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で明示的に指定したい場合にも使えるかもしれません。

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark