我正在尝试通过以下清单创建ECS服务:
---
AWSTemplateFormatVersion: 2010-09-09
Description: 'CloudFormation template for ui service definition'
Resources:
UIService:
Type: AWS::ECS::Service
Properties:
Cluster: !ImportValue MyCSClusterName
DesiredCount: 1
LaunchType: EC2
LoadBalancers:
- ContainerName: !ImportValue UIContainerName
ContainerPort: '80'
TargetGroupArn: !ImportValue UITGArn
Role: !Ref UIServiceRole
ServiceName: ui-service
ServiceRegistries:
- RegistryArn: arn:aws:servicediscovery:eu-west-1:4309430903:service/srv-oh45959hj55yesez7
TaskDefinition: !ImportValue UITaskArn
UIServiceRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Principal:
Service: [ecs.amazonaws.com]
Action: ['sts:AssumeRole']
Path: /
Policies:
- PolicyName: ecs-service
PolicyDocument:
Statement:
- Effect: Allow
Action: ['elasticloadbalancing:DeregisterInstancesFromLoadBalancer', 'elasticloadbalancing:DeregisterTargets',
'elasticloadbalancing:Describe*', 'elasticloadbalancing:RegisterInstancesWithLoadBalancer',
'elasticloadbalancing:RegisterTargets', 'ec2:Describe*', 'ec2:AuthorizeSecurityGroupIngress']
Resource: '*'
通过亚马逊控制台创建失败,并显示以下错误,我不知道这是怎么回事。
您不能为需要服务链接角色的服务指定IAM角色。
答案 0 :(得分:0)
根据this terraform github issue,有些人通过从清单(Role: !Ref UIServiceRole
)中删除IAM角色来解决此错误。也许值得一试?
答案 1 :(得分:0)
在大多数情况下,当您创建需要执行某些 ECS 活动的集群或角色时,ECS 服务会生成 IAM 角色 AWSServiceRoleForECS。 Cloudformation 有时会遇到时间问题;解决这个问题的两种方法
(1) 在您的 cloudformation 中,确保 ECSCluster 依赖于可以访问 ecs 服务的 IAM 角色;在您的示例中 DependsOn: UIServiceRole
另一种看起来更“正确”的方法 (2) 在您的 cloudformation 中添加一个新资源 IAM Service Linked Role as
ECSServiceLinkedRole:
Type: 'AWS::IAM::ServiceLinkedRole'
Properties:
AWSServiceName: ecs.amazonaws.com
Description: ECS Service Linked Role
注意:服务相关角色是否已存在于帐户中并且您定义了必须确保描述匹配的结构(Cloudformation 将不支持更改描述)