はじめに
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すること。
オートスケールの設定がされているので、自動で新しい設定のインスタンスが立ち上がる。