AWS CloudFormation マクロが原因で発生したエラーを解決したいです。
解決方法
CloudFormation スタックでカスタムマクロを使用すると、次の一般的なエラーが表示される場合があります。
エラー: 「変換から、不正な形式の応答を受信しました <ACCOUNT>:<Macro-Name」
このエラーメッセージは、CloudFormation スタックイベントまたは変更セットで発生します。
通常、CloudFormation では、マクロの実行元である基盤 AWS Lambda 関数が次の JSON 形式のレスポンスを返すことを想定しています。
{
"requestId" : "$REQUEST_ID",
"status" : "$STATUS",
"fragment" : { ... }
"errorMessage": "optional error message for failures"
}
このエラーは、CloudFormation テンプレートが AWS Lambda 関数から受け取った値または応答を受け入れられなかった場合に発生します。
このエラーをトラブルシューティングするには、Amazon CloudWatch ログで、レスポンスをトリガーしたマクロを含む、基盤 Lambda 関数を確認します。
このエラーを解決するには、以下の手順を実行します。
- CloudFormation コンソールにログインします。
- 作成または更新に失敗したスタックを選択します。
- そのスタックの [テンプレート] タブを選択します。
- テンプレート内で、マクロの名前を検索します。名前はテンプレートの [Transform] セクションで参照されています。または、Fn::Transform 関数で名前を見つけてください。
- そのマクロリソースをデプロイしたスタックを検索します。AWS::CloudFormation::Macro を確認してください。
注: マクロリソースの名前が、その物理 ID です。各スタックの [リソース] タブを選択して、スタックによってデプロイされたリソースとその物理 ID を確認します。
- そのスタックの [テンプレート] タブを選択します。次に、スタックテンプレート内の AWS::CloudFormation::Macro リソースの FunctionName プロパティで、Lambda 関数の名前を特定します。
- Lambda コンソールに移動します。先ほど見つけた関数名を選択します。
- [モニター] を選択します。次に、[CloudWatch でログを表示] を選択します。
- 最新の CloudWatch Logs ストリームで、エラーメッセージがないか確認します。
または、
Lambda 関数によって送信された最終応答が、上記の正しい JSON 形式であるかどうかを確認します。
エラー: 「変換を実行できませんでした <ACCOUNT>:<Macro-Name>」
このエラーは、AWS Identity and Access Management (IAM) ユーザー、ロール、またはサービスロールが Lambda 関数を呼び出さなかったことを示しています。このエラーは、IAM エンティティに必要なアクセス許可がないことが原因で発生しました。
ユーザーが基盤 Lambda 関数に対する lambda:InvokeFunction アクセス許可を持っていれば、AWS CloudFormation はテンプレートに含まれるマクロを正常に実行できます。そのアクセス許可は、スタック操作を実行する IAM ID に付与されている必要があります。Lambda 関数に関連するアクセス許可エラーの詳細については、「Lambda 関数エラーのトラブルシューティング方法を教えてください」を参照してください。
エラー: 「次の名前の付いた変換がありません <ACCOUNT>:<Macro-Name> 」
このエラーは、テンプレートの Transform セクションまたは、Fn::Transform 関数のマクロが、スタックがデプロイされているアカウントとリージョンにないことを示しています。アカウントとリージョンで参照されているマクロの名前を確認してください。次に、同じ名前を使用して CloudFormation テンプレート内のマクロを参照します。
関連情報
AWS CloudFormation マクロ関数インターフェイス
AWS CloudFormation マクロ定義を作成するときの考慮事項
AWS CloudFormation マクロアカウントのスコープとアクセス許可