[アップデート]AWS SAM CLIのローカル実行時のAWS::AccountIdの値にログイン中のアカウントのIDが利用されるようになりました
https://dev.classmethod.jp/articles/aws-sam-cli-override-aws-account-id-your-account/

#dev_classmethod #AWS #AWS_SAM_CLI

[アップデート]AWS SAM CLIのローカル実行時のAWS::AccountIdの値にログイン中のアカウントのIDが利用されるようになりました | DevelopersIO

初めに 本日 AWS SAM CLIのv1.119.0がリリースされました。 これまでAWS SAM CLIではローカル実行時に擬似参照パラメータであるAWS::AccountIdに関してはダミー値(123456789012)を利用するようになっておりました。 例えば以下のように環境変数でLambda関数に引き渡し出力させることでも確認できます。 この仕様があるため例えば自アカウントの既存のLambda Layerを!Sub arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:layer:hoge:1のような形で指定するとダミーアカウントID上のものを参照しようとし実行に失敗してしまいます。従来これを回避するためにはアカウントIDをParameters経由で値を引き渡す、テンプレート上にハードコードする等別の手段を取る必要がありました。 今回のアップデートでlocal invoke実行時に指定されたプロファイルのアカウントIDを参照するようになりその値が利用されるようになりました。 なおAWS::Regionの値関しては以前より–regionオプションが存在しこちらで指定することが可能でした。 動作確認 テスト用に適当にライブラリをインストールしたLamba Layerを作成しておきます。 SAM上で以下のような定義で関数を作成します。 以前のバージョンでこれを実行するとAWS::AccountIdにはダミーパラメータが指定される関係で取得不可なLambda Layerを参照してしまい実行以前の状態で失敗してしまいます。 これを1.119.0のものにすると正常に自アカウントを参照するようになるのでレイヤーの読み込みおよび実行に成功するようになります。処理上で自動的に読み込むため設定変更等をせずとも利用できるので非常に良さそうです。 認証情報がない場合 アカウントIDはgetCallerIdentityの結果から取得しますがこれの実行のためにAWSのアカウントのが今後必須となる…というわけではございませんのでご安心ください。 認証情報がない状態で実行すると現行のようにダミー値123456789012が利用される現行の状態が維持されます。 終わりに 地味ながら必要としていた環境は結構ありそうなのでよさげなアップデートですね。 知らずとも上手く取り回すことでなんとかできる部分ではありますが、パラメータの指定量を減らしてシンプルにしたり複数環境間での取り回しが良くなるため該当するような環境の方はぜひ一度コードを整理してみてはいかがでしょうか。

クラスメソッド発「やってみた」系技術メディア | DevelopersIO