CDK TypeScriptでSecrets ManagerのSecretを読み出せない
はじめに
私は普段、CDK TypeScriptを使ってAWS各種リソースの構築を行っています。
LambdaにPythonのソースコードをデプロイし、Secretから読み出した内容をLambdaの環境変数に設定しようとしたところSecretを読み出せない不具合が発生しました。
備忘録を兼ねて残します。
何が起きたか
コンソール画面でSecretを作成後、下記内容にてcdk deployを実行しLambdaを構築しようとしたところ、Secrets Manager cant't find the specified secret. (Service: AWSSecretsManager; Status Code: 400; Error Code: ResourceNotFoundException; Requesut ID ********-****-****-************; Proxy: null
のエラーを出力しデプロイエラーとなりました。
const secretName = "hoge-service-secret";
const secretValue = secretsmanager.Secret.fromSecretNameV2(
this,
"SECRET_VALUE",
secretName
)
new lambdaPython.PythonFunction(
this,
"hoge-service-lambda",
{
funtionName: "hoge-lambda",
runtime: lambda.PYTHON3_12,
entry: "../app/",
index: "lambda.py",
handler: "lambda_handler",
environment: {
SECRET_VALUE: `${secretValue
.secretValueFromJson("SECRET_VALUE")
.unsafeUnwrap()}`
},
}
)
確認したこと
エラー内容からLambdaに対して権限が足りないものと考えRole周りを見直しました。結果、権限設定に不足はなく原因特定には至りませんでした。
別プロジェクトも似たような構成にしているため、cdk deployを実行すると同様のエラーになるものと考え実行したところ、冒頭エラーは発生せず。どうやら権限ではない模様。
なぜ起きてしまったのか
コンソール画面でSecretを作ったので、Secrets Managerの公式ドキュメントを読んでいたら、下記一文を発見。
Do not end your secret name with a hyphen followed by six characters. If you do so, you risk confusion and unexpected results when searching for a secret by partial ARN. Secrets Manager automatically adds a hyphen and six random characters after the secret name at the end of the ARN.
コンソール画面で作成時にSecret nameを hoge-service-secret
としてSecretを作っていました。その結果、ドキュメントに記載の通り、ハイフン以降の6文字をARNのSuffixと誤認識してありもしないSecret nameを探したことにより冒頭のエラーが起きていました。
教訓
Secret nameには ハイフン+6文字
は使わないこと。
Discussion