あるアカウントで AWS Lambda 関数を作成し、別のアカウントの AWS CloudFormation カスタムリソースからその関数を呼び出したいと考えています。
簡単な説明
Lambda 関数とカスタムリソースが同じ AWS リージョンにある場合にのみ、別のアカウントのカスタムリソースから Lambda 関数を呼び出すことができます。AWS::CloudFormation::CustomResource の ServiceToken プロパティは、AWS CloudFormation スタックを作成したリージョンと同じリージョンにある必要があります。リソースベースのポリシーを使用して、Lambda 関数を呼び出すカスタムリソースに対するアクセス許可をアカウントに付与する必要があります。
注: Lambda 関数をカスタムリソースに関連付けると、カスタムリソースが作成、更新、または削除されるたびに関数が呼び出されます。AWS CloudFormation は Lambda API を呼び出して関数を呼び出し、すべてのリクエストデータを関数に渡します。例えば、リクエストデータには、リクエストタイプとリソースプロパティが含まれます。
解決方法
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください。
Lambda 関数に別のアカウント (アカウント B) からカスタムリソースへのアクセス権を付与するには、プライマリアカウント (アカウント A) で AWS CLI コマンドの add-permission を実行します。
1. アカウント A のスタックを介して Lambda 関数を作成する場合、AWS::Lambda::Permission リソースを使用して、アカウント B にアクセス許可を付与します。
2. アカウント B で、カスタムリソースを含む AWS CloudFormation スタックを起動します。
注: ServiceToken がアカウント A の Lambda 関数の Amazon リソースネーム (ARN) を参照していることを確認してください。カスタムリソースに入力として送信する追加のプロパティを含めます。
3. Amazon CloudWatch Logs を使用して、アカウント B のカスタムリソースがアカウント A で Lambda 関数を呼び出したことを確認します。
関連情報
プロパティ
他のアカウントへの関数アクセス権の付与