AWSJavaScript

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 セクション
・インスタンスメタデータ

https://qiita.com/shinsaka/items/6db1d6b2addfaed1aad1

インスタンスメタデータなどがあるので、EC2やLambdaで明示的に指定したい場合にも使えるかもしれません。

ブックマークや限定記事(予定)など

WP Kyotoサポーター募集中

WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。

14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。

広告ここから
広告ここまで

Related Category posts