紙一重の積み重ね

アラフォーのエンジニアがなれる最高の自分を目指して、学んだことをこつこつ情報発信するブログです。

【CloudFormation】Fargate作成時に You cannot specify an IAM role for services that require a service linked role エラーで怒られたときの対処法

はじめに

CloudFormationでFargate を作ろうとしてハマったのでメモ。

状況

  • すでに手動でECS クラスタを作成済み
  • 同一VPC内に類似したECSクラスタを作成したい
  • 面倒なので、Former2で生成したCloudFormationテンプレートで作成したい

エラー内容

Resource handler returned message: "Invalid request provided: CreateService error: You cannot specify an IAM role for services that require a service linked role
  • CreateServiceのエラーです。サービスリンクロールを必要とするサービスにIAMロールを指定することはできません。

実行した CFn template(一部抜粋)

ECSService:
        Type: "AWS::ECS::Service"
        Properties:
            ServiceName: !Sub "${ENV}-service-frontend"
            Cluster: !GetAtt ECSCluster.Arn
            LoadBalancers: 
              - 
                TargetGroupArn: !Ref ElasticLoadBalancingV2TargetGroup2
                ContainerName: !Sub "${ENV}-container-front"
                ContainerPort: 80
            DesiredCount: 2
            LaunchType: "FARGATE"
            PlatformVersion: "LATEST"
            TaskDefinition: !Ref ECSTaskDefinition2
            DeploymentConfiguration: 
                MaximumPercent: 200
                MinimumHealthyPercent: 100
                DeploymentCircuitBreaker: 
                    Enable: false
                    Rollback: false
            Role: !Sub "arn:aws:iam::${AWS::AccountId}:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS"

対策

公式ドキュメントによると、

  • アカウントですでにAmazonECSサービスにリンクされたロールが作成されている場合、ここでロールを指定しない限り、そのロールがデフォルトでサービスに使用されます。

とのことなので、上記のtemplateから、 Role: !Sub "arn:aws:iam::${AWS::AccountId}:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS" をコメントアウトする。

参考情報

docs.aws.amazon.com