概要
- Secrets Managerに登録した値をlambda関数(ランタイムはNode.js18)で呼び出す方法を簡単にまとめる。
前提
- 下記か下記に準ずる方法でSecrets Managerに値を登録してあること。
方法
-
ランタイムがNode.js18のlambda関数を作成する。
-
関数の概要の「Layers」をクリックする。
-
「レイヤーの追加」をクリックする。
-
「レイヤーソース」で「AWSレイヤー」を選択し、プルダウンで「AWS-Parameters-and-Secrets-Lambda-Extension」を選択し、バージョン4を選択し、「追加」をクリックする。
-
関数の「設定」を開き「アクセス権限」の実行ロールの名をクリックする。
-
「許可を追加」をクリックし、「ポリシーをアタッチ」をクリックする。
-
SecretsManagerReadWrite
と入力しポリシーをフィルターする。 -
ヒットした
SecretsManagerReadWrite
を選択し「許可を追加」をクリックする。 -
これでlambda関数のロールにシークレットマネージャーの値を読み書きするポリシーを付与できた。(読み込むだけなら自分でインラインポリシーをjsonで追加してロールに付与する。)
-
下記の内容をlambda関数に記載し、保存 → Deployを実行する。Hello-Wold系のlambdaテストを用意し実行する。(下記のコードは「AWS Secrets Manager」 → 「シークレット」 → 「シークレットの名前のAPI-KEY」 → サンプルコードの「JavaScript」の部分を大いに参考にして記載)
index.mjs// Use this code snippet in your app. // If you need more information about configurations or implementing the sample code, visit the AWS docs: // https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/getting-started.html import { SecretsManagerClient, GetSecretValueCommand, } from "@aws-sdk/client-secrets-manager"; const secret_name = "API-KEY"; const client = new SecretsManagerClient({ region: "ap-northeast-1", }); let response; try { response = await client.send( new GetSecretValueCommand({ SecretId: secret_name, VersionStage: "AWSCURRENT", // VersionStage defaults to AWSCURRENT if unspecified }) ); } catch (error) { // For a list of exceptions thrown, see // https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html throw error; } const secret = response.SecretString; console.log(secret); // Your code goes here export const handler = async(event) => { // TODO implement const response = { statusCode: 200, body: JSON.stringify('Hello from Lambda!'), }; return response; };
-
lambdaのテストを実行すると定数
secret
の中に下記の値が入っている事が分かる。これでlambdaでシークレットの値を取得する事ができた。{ "API-KEY":"hogefuga" }
参考文献