📘
(typescript)AWS Parameters and Secrets Lambda Extensionを使ったcdkコード
secret managerを取得するlambdaを久々に1から書いたのだが、
AWS Parameters and Secrets Lambda Extensionなるものがあったので利用するようにしてみた。
だいぶ古くからある機能。昔ニュースで読んだような記憶が。。。
secret managerに何度も値を取得せず、キャッシュすることができるため
呼び出し回数を減らすことができるよう。
公式のコードサンプルはpythonで
typescriptで動くコード作成したので
備忘も含めてブログに書こうと思います。
const secretName = 'sample';
const secrets = new secretsmanager.Secret(this, 'Secrets', {
secretName: secretName,
});
const paramsAndSecrets = lambda.ParamsAndSecretsLayerVersion.fromVersion(
lambda.ParamsAndSecretsVersions.V1_0_103,
{
cacheSize: 500,
logLevel: lambda.ParamsAndSecretsLogLevel.DEBUG,
}
);
const lambdaFunction = new lambdaNodejs.NodejsFunction(this, 'Lambda', {
runtime: lambdaNodeRunTime,
entry: 'lib/resources/lambda/xxxx.ts',
handler: 'handler',
architecture: lambda.Architecture.ARM_64,
timeout: Duration.seconds(60),
logRetention: accessLogDuration,
paramsAndSecrets,
environment: {
SECRET_ID: secrets.secretName,
},
});
props.snsTopic.addSubscription(new subs.LambdaSubscription(lambdaFunction));
secrets.grantRead(lambdaFunction);
lambdaの中に書くコード
const AWS_SESSION_TOKEN = process.env['AWS_SESSION_TOKEN'] || '';
// AWS Parameters and Secrets Lambda Extension
const getSecretResponse = await axios.get(
'http://localhost:2773/secretsmanager/get',
{
params: {
secretId: SECRET_ID,
},
headers: {
'X-Aws-Parameters-Secrets-Token': AWS_SESSION_TOKEN,
},
}
);
const secretValue = getSecretResponse.data.SecretString //secretの中身
Discussion