LoginSignup
2
0

More than 1 year has passed since last update.

【CloudShell】AWS CLIコマンドを並列で実行した際に`Error when retrieving credentials from container-role`と出力されるときの対処法

Posted at

はじめに

以下のようにCloudShellでAWS CLIコマンドを並列実行する際、同時実行数が20を超えてくるとError when retrieving credentials from container-roleというエラーが発生するようになる。

こちらの対処方法について調べても見つからなかったので、AWSに問い合わせてみた。

# このくらいであればエラー無し
$  for i in {1..5}; do (aws ec2 describe-regions > /dev/null && echo $i) & done
~略~
3
2
4
1
5
# 20件を超えると発生しやすくなる
$  for i in {1..30}; do (aws ec2 describe-regions > /dev/null && echo $i) & done
~略~
27
2
~略~
28

Error when retrieving credentials from container-role: Error retrieving metadata: Received non 200 response (503) from ECS metadata: <html><head><title>Timeout</title></head><body><h1>Timeout</h1></body></html>
Error when retrieving credentials from container-role: Error retrieving metadata: Received non 200 response (503) from ECS metadata: <html><head><title>Timeout</title></head><body><h1>Timeout</h1></body></html>
Error when retrieving credentials from container-role: Error retrieving metadata: Received non 200 response (503) from ECS metadata: <html><head><title>Timeout</title></head><body><h1>Timeout</h1></body></html>
~略~

回答

Cloud Shell の内部仕様により、一定回数以上のAWS CLIコマンドを実行すると、実行に必要な認証情報の取得に失敗するとのこと。
また、こちらの緩和申請もできないとのこと。
そのため、Cloud Shellで並列実行する際は、xargsPオプション等で実行回数を制限した方が良い。

# 同時実行回数を実行回数と同等(=30回)にする (-P 30)
seq 30 | xargs -P 30 aws ec2 describe-regions --query "Regions[0].RegionName" ;
~略~
Error when retrieving credentials from container-role: Error retrieving metadata: Received non 200 response (503) from ECS metadata: <html><head><title>Timeout</title></head><body><h1>Timeout</h1></body></html>
~略~


# 同時実行回数を10回に制限する (-P 10)
seq 30 | xargs -P 10 aws ec2 describe-regions --query "Regions[0].RegionName" ;
# エラーなし

get-user の例

list-usersで取得した全ユーザーでget-userを行う場合。

# for文だと、ユーザー数によってはエラーになる
$ for u in `aws iam list-users --query 'Users[*].UserName' --output text`; do aws iam get-user --user-name $u & done
~
Error when retrieving credentials from container-role: Error retrieving metadata: Received non 200 response (503) from ECS metadata: <html><head><title>Timeout</title></head><body><h1>Timeout</h1></body></html>


# xargs
## -P 100 だとエラー
$ aws iam list-users --query 'Users[*].UserName' | jq -r '.[]' |  xargs -I NAME -P 100 aws iam get-user --user-name NAME
~
Error when retrieving credentials from container-role: Error retrieving metadata: Received non 200 response (503) from ECS metadata: <html><head><title>Timeout</title></head><body><h1>Timeout</h1></body></html>


## -P 20 だとエラーなし
$ aws iam list-users --query 'Users[*].UserName' | jq -r '.[]' |  xargs -I NAME -P 20 aws iam get-user --user-name NAME
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0