LoginSignup
0
0

ECSでの"Missing credentials in config"エラーの解決

Posted at

事象

AWS ECSのサービスを新しく作ってNode.js製のプロジェクトを動かしたら、以下のエラーになった。

[ERROR] Error [CredentialsError]: Missing credentials in config, if using AWS_CONFIG_FILE, set AWS_SDK_LOAD_CONFIG=1

設定確認

このプロジェクトではS3などのAWSサービスを利用しているのでAWSの認証情報を設定する箇所がある。
設定は以下

const aws = require('aws-sdk')

if (process.env.LOCAL == 'true') {
  // ローカル開発環境なら~/.aws/credentialsを参照する
  aws.config.credentials = new aws.SharedIniFileCredentials()
} else {
  // ECSならECSのロールを参照する
  aws.config.credentials = new aws.ECSCredentials({
    httpOptions: { timeout: 5000 },
    maxRetries: 10,
    retryDelayOptions: { base: 200 },
  })
}
aws.config.region = "ap-northeast-1"
module.exports = aws

コメントにある通り、ローカル開発環境ではローカル環境の認証設定ファイルを参照し、ECSならECSのロールを見るようになっているはず。
なのでエラーの if using AWS_CONFIG_FILE ・・・ には該当しない

解決

ダメなのはロール設定の方だった

image.png

↑ タスクロールの方にS3参照権限ポリシを持つロールを割り当てたら動いた

メモ

タスクロールとタスク実行ロールの違いは

  • タスクロール: ECSのコンテナ内からAWSの別のサービスにアクセスする時のロールを割り当てる
  • タスク実行ロール: ECSコンテナを立ち上げるエージェントのロールを割り当てる。(上のようにコンテナの中身がすることには関与しない)例えばログをCloudWatchに保存するなどはこっちのロールになる。

以上。

参考

参考にさせていただきました

0
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
0
0