➡️

CDK TypeScriptでSecrets ManagerのSecretを読み出せない

2025/02/11に公開

はじめに

私は普段、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