Node.jsのaws-sdkで接続情報の設定をする方法5つ

ローカルのPCからの実行など、IAMロールを使えない場合にAccessKeyIDとSecretAccessKeyを設定する方法をまとめてみました。

目次

  1. ~/.aws/credentialsを参照する
  2. JSONファイルから読み込む
  3. 環境変数を使う
  4. .envファイルを使う
  5. 直接コードで指定する

1. ~/.aws/credentialsを参照する

aws-cliでも標準で参照される~/.aws/credentialsを参照するにはAWS.SharedIniFileCredentialsを使います。

~/.aws/credentialsには以下の様に記入しておきます。

[default]
aws_access_key_id = AKXXXXXXXXXXXXXXXXXX
aws_secret_access_key = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

[project1]
aws_access_key_id = AKYYYYYYYYYYYYYYYYYY
aws_secret_access_key = yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

profileをコードで指定

初期化時にprofileプロパティを指定することでprofile名を設定できます。指定しない場合はdefaultが使われます。

const AWS = require('aws-sdk')
const credentials = new AWS.SharedIniFileCredentials({profile: 'project1'})
AWS.config.credentials = credentials

profileを環境変数で指定

アプリケーション起動時に環境変数でAWS_PROFILEを指定することでもprofileを設定できます。

AWS_PROFILE=project1 node app.js
const AWS = require('aws-sdk')
const credentials = new AWS.SharedIniFileCredentials()
AWS.config.credentials = credentials

credentialsの場所を変える

初期化時にfilenameプロパティをしていすることで設定ファイルの読み込み先を変更することができます。

const AWS = require('aws-sdk')
const credentials = new AWS.SharedIniFileCredentials({profile: 'project1', filename: './credentials'})
AWS.config.credentials = credentials

2. JSONファイルから読み込む

JSONファイルから読み込む場合loadFromPathというメソッドが用意されています。

const AWS = require('aws-sdk')
AWS.config.loadFromPath('./config.json')

3. 環境変数を使う

環境変数のAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYに設定して起動するだけで使えます。

AWS_ACCESS_KEY_ID=AKYYYYYYYYYYYYYYYYYY AWS_SECRET_ACCESS_KEY=yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy node app.js
const AWS = require('aws-sdk')

4. .envファイルを使う

こちらは特に公式の方法ではないのですが環境変数をdotenvで簡単に管理できるので紹介します。ライブラリを使用するので

npm install dotenv

でインストールして、.envファイルをアプリケーションルートに配置します。

# .env
AWS_ACCESS_KEY_ID=AKYYYYYYYYYYYYYYYYYY
AWS_SECRET_ACCESS_KEY=yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

あとは設定を読み込むだけでokです。

require('dotenv').config()
const AWS = require('aws-sdk')

5. 直接コードで指定する

以下の例の様にコードに直書きでの運用はダメですが、このような設定方法が方法があると上記の方法にどうしても当てはまらない特殊な場合にも対応できるのでいざというとき安心ですよね。

const AWS = require('aws-sdk')
const credentials = new AWS.Credentials({accessKeyId: 'AKYYYYYYYYYYYYYYYYYY', secretAccessKey: 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'})
AWS.config.credentials = credentials

参照