Error getting valid credentials (AKID ): NoCredentialProviders: no valid providers in chain. Deprecated.

はじめに

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すること。

オートスケールの設定がされているので、自動で新しい設定のインスタンスが立ち上がる。