はじめに
ECSでコンテナを動かそうとすると、作成されるEC2でdocker logsに
2019-07-08T12:17:52Z [INFO] Event stream ContainerChange start listening... 2019-07-08T12:17:52Z [WARN] Error getting valid credentials (AKID ): NoCredentialProviders: no valid providers in chain. Deprecated. For verbose messaging see aws.Config.CredentialsChainVerboseErrors 2019-07-08T12:17:52Z [INFO] Registering Instance with ECS 2019-07-08T12:17:52Z [INFO] Remaining mem: 3885 2019-07-08T12:17:52Z [ERROR] Unable to register as a container instance with ECS: NoCredentialProviders: no valid providers in chain. Deprecated. For verbose messaging see aws.Config.CredentialsChainVerboseErrors 2019-07-08T12:17:52Z [ERROR] Error registering: NoCredentialProviders: no valid providers in chain. Deprecated. For verbose messaging see aws.Config.CredentialsChainVerboseErrors
というエラーが記述された。その原因と対策を明記する。
原因
ecsを実行するEC2インスタンスのroleに適切な権限がない。
roleに以下の通り権限を付与する
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:CreateCluster", "ecs:DeregisterContainerInstance", "ecs:DiscoverPollEndpoint", "ecs:Poll", "ecs:RegisterContainerInstance", "ecs:StartTelemetrySession", "ecs:UpdateContainerInstancesState", "ecs:Submit*", "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" } ] }
もしEC2へattachするroleを変更したい場合は、ECSの画面からではなく、CloudFormationの画面から変更を行う。
これは、ECSのサービス作成時、裏でCloudFormationが実行されるため。
具体的な手順はクラメソさんのBlogが非常にわかりやすい。
https://dev.classmethod.jp/cloud/aws/ecs-change-instance-type/
変更点は以下の箇所
有効化するには現在起動しているEC2インスタンスをterminateすること。
オートスケールの設定がされているので、自動で新しい設定のインスタンスが立ち上がる。