[アップデート] AWS SecretsManagerで複数のシークレットを同時に取得できるようになりました #AWSreinvent

2023.11.27

こんにちは。CX事業本部のakkyです。

RDSのパスワードなど、シークレットの管理などにはSecretsManagerを使うのが便利ですが、API経由で値を取得する際に複数のシークレットを同時に取得できるようにアップデートされました。

aws-sdk-js-v3もつい1時間ほど前にアップデートされ、様々なアップデートと共にこの機能に対応しました。

https://github.com/aws/aws-sdk-js-v3/releases/tag/v3.458.0

私は普段はPythonを使うことが多いので、boto3も更新されていないかを確かめてみたのですが、11/27 15時の段階ではまだアップデートはないようです。とはいえしばらくすれば対応されると思います。 →つい先ほどのアップデートで対応したようです!

それでは、早速この機能を試してみましたので、ご紹介します。

やってみた

まず、マネジメントコンソールでSecretsManagerを開き、2つのシークレットを登録してみました。

次にnodejsで新たなプロジェクトを作り、npmでaws-sdk v3の3.458.0とtypescriptをインストールしました。

"@aws-sdk/client-secrets-manager": "^3.458.0",

コードはTypescriptで記述しました。test1とtest2という2つのシークレットを名前で検索してみます。

import { SecretsManager } from "@aws-sdk/client-secrets-manager";

const secretsmanager = new SecretsManager({ region: "ap-northeast-1" });

(async function () {
    // const secrets_list = await secretsmanager.listSecrets({});
    // console.log(secrets_list);
    const secrets = await secretsmanager.batchGetSecretValue({
        Filters: [{
                Key: "name",
                Values: ["test1", "test2"]
            }
        ]
    });
    console.log(secrets);
})();

こちらのコードを実行すると、2つのシークレットが表示されることを確認できました!(結果は一部マスクしています)

{
  '$metadata': {
    httpStatusCode: 200,
    requestId: 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX',
    extendedRequestId: undefined,
    cfId: undefined,
    attempts: 1,
    totalRetryDelay: 0
  },
  Errors: [],
  SecretValues: [
    {
      ARN: 'arn:aws:secretsmanager:ap-northeast-1:123456789012:secret:test2-XXXXXX',
      CreatedDate: 2023-11-27TXX:XX:XX.XXXXZ,
      Name: 'test2',
      SecretString: '{"password":"9876"}',
      VersionId: 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX',
      VersionStages: [Array]
    },
    {
      ARN: 'arn:aws:secretsmanager:ap-northeast-1:123456789012:secret:test1-XXXXXX',
      CreatedDate: 2023-11-27TXX:XX:XX.XXXXZ,
      Name: 'test1',
      SecretString: '{"password":"123456"}',
      VersionId: 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX',
      VersionStages: [Array]
    }
  ]
}