当前位置: 首页 > 知识库问答 >
问题:

AWS ECS:ARN中的服务无效(服务:AmazonECS;…)

吕永嘉
2023-03-14

尝试使用cloudformation创建ECS服务(在Fargate上),但出现错误:

ARN中的服务无效(服务:AmazonECS;状态代码:400;错误代码:InvalidParameterException;请求ID:xxx)。

根据错误消息,似乎有些ARN是错误的,但我没有找到原因,我检查了IAM角色的ARN并确定了。其他ARN都通过了!Ref函数(因此不是输入错误)

创建所有资源(包括来自所有其他嵌套模板、vpc、集群、alb等的资源),但“服务”资源(ECS服务)除外。

下面是使用的模板(嵌套模板)。所有参数都正常(从根模板传递)。参数TaskExecutionRole和ServiceRole是ECS向导创建的IAM角色中的ARN:

Description: >
  Deploys xxx ECS service, with load balancer listener rule,
  target group, task definition, service definition and auto scaling

Parameters:
  EnvironmentName:
    Description: An environment name that will be prefixed to resource names
    Type: String
  EnvironmentType:
    Description: See master template
    Type: String
  VpcId:
    Type: String
  PublicSubnet1:
    Type: String
  PublicSubnet2:
    Type: String
  ALBListener:
    Description: ALB listener
    Type: String
  Cluster:
    Description: ECS Cluster
    Type: String
  TaskExecutionRole:
    Description: See master template
    Type: String
  ServiceRole:
    Description: See master template
    Type: String
  ServiceName:
    Description: Service name (used as a variable)
    Type: String
    Default: xxx
  Cpu:
    Description: Task size (CPU)
    Type: String
  Memory:
    Description: Task size (memory)
    Type: String

Conditions:
  HasHttps: !Equals [!Ref EnvironmentType, production]
  HasNotHttps: !Not [!Equals [!Ref EnvironmentType, production]]

Resources:
  ServiceTargetGroup:
    Type: AWS::ElasticLoadBalancingV2::TargetGroup
    Properties:
      Name: !Sub '${EnvironmentName}-${ServiceName}'
      VpcId: !Ref VpcId
      TargetType: ip
      Port: 80
      Protocol: HTTP

  AlbListenerRule:
    Type: AWS::ElasticLoadBalancingV2::ListenerRule
    Properties:
      Actions:
      - Type: forward
        TargetGroupArn: !Ref ServiceTargetGroup
      Conditions:
      - Field: host-header
        Values: [www.mydomain.com] # test
      ListenerArn: !Ref ALBListener
      Priority: 1

  TaskDefinition:
    Type: AWS::ECS::TaskDefinition
    Properties:
      Family: !Sub '${EnvironmentName}-${ServiceName}-Task'
      ContainerDefinitions:
        - Name: !Ref ServiceName
          Image: nginx
          PortMappings:
          - ContainerPort: 80
          LogConfiguration:
            LogDriver: awslogs
            Options:
              awslogs-group: !Ref EnvironmentName
              awslogs-region: !Ref AWS::Region
              awslogs-stream-prefix: !Ref ServiceName
      NetworkMode: awsvpc
      RequiresCompatibilities: [FARGATE]
      Cpu: !Ref Cpu
      Memory: !Ref Memory
      ExecutionRoleArn: !Ref TaskExecutionRole

  Service:
    Type: AWS::ECS::Service
    DependsOn: TaskDefinition
    Properties:
      Cluster: !Ref Cluster
      ServiceName: !Ref ServiceName
      TaskDefinition: !Ref TaskDefinition
      LaunchType: FARGATE
      DesiredCount: 1
      LoadBalancers:
      - ContainerName: !Ref ServiceName
        ContainerPort: 80
        TargetGroupArn: !Ref ServiceTargetGroup
      NetworkConfiguration:
        AwsvpcConfiguration:
          AssignPublicIp: ENABLED
          Subnets:
            - !Ref PublicSubnet1
            - !Ref PublicSubnet2
      Role: !Ref ServiceRole

我在这件事上浪费了几个小时,无法解决它,我查阅了很多文档,但如果有人知道如何帮助的话,什么都没有。

谢谢!

共有1个答案

吕宇定
2023-03-14

错误消息令人困惑,因为它没有解释哪个参数是错误的。Amazon API希望资源ARN具有多个参数,包括集群任务定义目标组。当其中一个参数错误时,会发生错误。请仔细检查这些参数并确保它们是有效的ARN。

我有完全相同的错误,在我的情况下,我犯了一个错误,提供了错误的Cluster值。

我在这里发布一个答案,因为这是这个错误消息的第一个搜索结果,它没有答案。

 类似资料:
  • 在单体架构时,因为服务不会经常和动态迁移,所有服务地址可以直接在配置文件中配置,所以也不会有服务发现的问题。但是对于微服务来说,应用的拆分,服务之间的解耦,和服务动态扩展带来的服务迁移,服务发现就成了微服务中的一个关键问题。 服务发现分为客户端服务发现和服务端服务发现两种,架构如下图所示。 这两种架构都各有利弊,我们拿客户端服务发现软件Eureka和服务端服务发现架构Kubernetes/SkyD

  • 我有以下服务: 和其他服务 我有我的Junit 当我在调试模式下运行这个测试时,我看到这个。合同服务。getInfo(multipartFileId) 正在返回我“null”。 我在嘲弄中错在哪里。 我刚刚在JUnit中嘲笑了ContractService。我还需要模拟AccountServiceImpl吗? 编辑:添加saveInCache和getInfo方法

  • 在异步HTTP SERVER中使用服务 全局方法service_center() 使用service_center($service)获取服务地址,然后使用call()方法调用公开的服务方法 $service = (yield service_center('User')); $user = (yield $service->call("User::getUser", ['id'

  • 我对计划中的应用程序的设计有一点问题,特别是数据库引擎和无服务器/非无服务器。目标是一个通过RESTAPI与数据库对话的Web应用程序。RESTAPI本身实际上只是CRUD操作,因此在我看来,无服务器aproach(AWS Lambda)非常适合。因此,最有效的数据库可能是DynamoDB(NoSQL)。 我熟悉RDBMS,对NoSQL数据库知之甚少。 应用程序的模式尚未完成,应该可以在以后进行扩

  • 无法启动nginx服务器OS:ubuntu服务器16.04 systemctl status nginx.status抛出此消息:nginx.service-高性能web服务器和反向代理服务器加载:加载(/lib/systemd/system/nginx.service;enabled;vendor preset:enabled)活动:失败(结果:exit-code)自UTC Thu 2016-1