前提
IAMロールをEC2(Redhat Linux8)にアタッチして、コマンドを実行するだけです。権限などを変更していません。
ジョブスケジューラで毎日下記のようなコマンドを実行してログをローカルにダウンロードします。
aws logs get-log-events –log-group-name $LOGGROUP –log-stream-name $LOGSTREAM
現象
ジョブスケジューラを実行してから2ヶ月ぐらいのある日突然下記のエラーメッセージがでました。
「Unable to locate credentials.You can configure credentials by running “aws configure”」
エラーメッセージが不自然と思い、コマンドを再度実行して、正常終了しました。
ここでは、エラーメッセージの解決方法を紹介したいと思います。
AWSより回答
前は、別のエラーメッセージ(AWS API 呼び出しエラー)で再試行の実装をしたことがあります。
それと同じ解決方法になるかと思いますが、念のためAWSに問い合わせをしました。
============ AWSサポートより ===========
エラーメッセージ「Unable to locate credentials. You can configure credentials by running "aws configure".」は、AWS CLI で有効な認証情報が取得できなかった場合に表示されるものでございます。過去事例等を調査いたしましたところ、AWS CLI を設定ファイル(aws configure での設定 等)を使用せず、認証情報をロールから取得している場合、一時的な理由により認証情報の取得が出来ず、稀に上記のようなエラーが発生する場合があることが報告されておりました。
上述のような場合、アプリケーション等にてリトライ動作を実施頂くことが有効かと存じます。以下のドキュメント [1] にリトライとエクスポネンシャルバックオフにつきましての記載がございますため、ご参照頂ければ幸いでございます。
(ご参考)
AWS でのエラー再試行とエクスポネンシャルバックオフ
https://docs.aws.amazon.com/ja_jp/general/latest/gr/api-retries.html
=============== ここまで ===============
結論
下記を参考にエラーメッセージが出る場合、sleep時間を入れてから再試行することで再発していないことを確認しました。
再試行とエクスポネンシャルバックオフを実施することで事象が改善されるかお試しください。
参考:
AWS でのエラーの再試行とエクスポネンシャルバックオフ