amazon-web-services - 无法通过CloudFormation创建ECS服务

标签 amazon-web-services aws-cloudformation

我创建以下 CloudFormation 模板文件来创建 ECS 集群和任务定义、服务,但出现错误。 这些设置出了什么问题?

  1. 使用以下模板创建 ECS 服务时,出现请验证传递的 ECS 服务角色是否具有适当的权限
  2. 创建不带属性的模板时 Role: !ImportValue "IAMRoleECSService" 不会发生错误,但不会从 CREATE_IN_PROGRESS 完成

ECSApplicationService:
  Type: "AWS::ECS::Service"
  DependsOn:
    - "ECSApplicationCluster"
    - "ECSApplicationTaskDefinition"
  Properties:
    Cluster: !Ref "ECSApplicationCluster"
    DeploymentConfiguration:
      MaximumPercent: 100
      MinimumHealthyPercent: 50
    DesiredCount: 4
    LoadBalancers:
      - ContainerName: !Ref "ContainerAppName"
        ContainerPort: 80
        TargetGroupArn: !ImportValue "ALBTargetGroup"
    Role: !ImportValue "IAMRoleECSService"
    ServiceName: "ecs-application-service"
    TaskDefinition: !Ref "ECSApplicationTaskDefinition"

IAMRoleECSService:
  Type: "AWS::IAM::Role"
  Properties:
    RoleName: "ecs-service"
    AssumeRolePolicyDocument:
      Version: "2012-10-17"
      Statement:
        - Effect: "Allow"
          Principal:
            Service:
              - "ecs.amazonaws.com"
          Action:
            - "sts:AssumeRole"
    Policies:
      - PolicyName: "ec2-management"
        PolicyDocument:
          Version: "2012-10-17"
          Statement:
            - Effect: "Allow"
              Action:
                - "ec2:AuthorizeSecurityGroupIngress"
                - "ec2:Describe*"
              Resource: "*"
      - PolicyName: "alb-management"
        PolicyDocument:
          Version: "2012-10-17"
          Statement:
            - Effect: "Allow"
              Action:
                - "elasticloadbalancing:DeregisterInstancesFromLoadBalancer"
                - "elasticloadbalancing:DeregisterTargets"
                - "elasticloadbalancing:DescribeTargetGroups"
                - "elasticloadbalancing:DescribeTargetHealth"
                - "elasticloadbalancing:Describe*"
                - "elasticloadbalancing:RegisterInstancesWithLoadBalancer"
                - "elasticloadbalancing:RegisterTargets"
              Resource: "*"

我应该做什么?

最佳答案

更新: 截至 2018 年 7 月 19 日,现在可以使用 CloudFormation https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-servicelinkedrole.html 创建 IAM 服务相关角色.

   EcsServiceLinkedRole:
    Type: "AWS::IAM::ServiceLinkedRole"
    Properties:
      AWSServiceName: "ecs.amazonaws.com"
      Description: "Role to enable Amazon ECS to manage your cluster."

旧答案: ECS 现在依赖 Service-Linked Roles而不是正常的角色。确保您已使用以下方式为帐户创建它:

aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com

然后从 IAMRoleECSService 中删除 Role 参数,因为不再需要它。

关于amazon-web-services - 无法通过CloudFormation创建ECS服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47635331/

相关文章:

aws-cloudformation - 如何使用 CloudFormation 定义 ECR 生命周期策略

amazon-web-services - 当 AWS 节点组没有出现在 CloudFormation 中并且仅在尝试删除父集群或创建新集群时似乎存在时,如何销毁 AWS 节点组?

python - 预签名 URL 和 x-amz-acl

c# - SNS - JSON 消息正文解析失败

amazon-web-services - 通过 Athena 跨账户访问 AWS Glue 数据目录

aws-cloudformation - 如何使用 CloudFormation 针对两个指标之和定义 CloudWatch 警报?

amazon-web-services - 使用 CloudFormation 创建 RDS 免费套餐实例?

amazon-web-services - 我可以在带有 vagrant 的 aws 上使用哪个 centos 图像?

amazon-web-services - 如何下载通过 CloudFormation 创建的 IoT 证书?

python-3.x - Cloudformation 的 AWS lambda 代码部署问题