AWS SDK js v3 環境変数からアクセスキーなどを取得する方法
LangChainなどでAWS SDKを利用する際、process.envから環境変数を取得する必要がありましたが、JavaScript SDK(v3)では@aws-sdk/credential-provider-nodeというライブラリが利用できます。@aws-sdk/credential-provider-nodeをインストールし、defaultProviderを使ってアクセスキーやシークレットキーを取得することができます。また、任意のプロファイルを指定することも可能です。これにより、複数のAWSアカウントに接続することもできます。読み取り順序は環境変数、credentialsファイル、インスタンスメタデータとなっており、EC2やLambdaの明示的な指定にも利用できます。
目次
LangChainなどでAWS SDKを利用する際、手グセでprocess.env
から取得する処理を書いたりしていたのですが、どうもJavaScript SDK(v3)ではそのためのライブラリがある様子でした。
@aws-sdk/credential-provider-node
でアクセスキーなどを環境変数から取得する
@aws-sdk/credential-provider-node
をインストールしましょう。
npm i @aws-sdk/credential-provider-node
クレデンシャルを読み込みたい部分で、defaultProvider
をインポートします。
import { defaultProvider } from "@aws-sdk/credential-provider-node";
あとはこの処理を呼び出しましょう。2段階で呼ばないといけない点にご注意ください。
const provider = defaultProvider()
const credential = await provider()
// もしくは
const credential = await defaultProvider()()
レスポンスはこんな感じです。
{
accessKeyId: 'accesskey',
secretAccessKey: 'secretkey',
sessionToken: undefined,
expiration: undefined
}
任意のprofileを指定する
profileを使って複数のAWSアカウントに接続している場合、defaultProvider
の引数で指定できます。
const credential = await defaultProvider({
profile: 'hide'
})()
読み込み順序
AWSのアクセスキーやシークレットキーはさまざまな方法で環境変数に設定されています。Qiitaの記事によると、このような順序で読み取っている様子です。
デフォルト動作の場合は下記の順序で走査、最初に該当する有効なクレデンシャルを返すようです
・環境変数 AWS_PROFILE で指定されたセクションを ~/.aws/credentialsから読み取る
・環境変数 AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY で指定された値
・~/.aws/credentials の default セクション
・インスタンスメタデータ
インスタンスメタデータなどがあるので、EC2やLambdaで明示的に指定したい場合にも使えるかもしれません。