他アカウントで検知した CloudWatch アラームをトリガーに AWS Lambda を実行する方法を教えてください

2023.05.01

困っていること

他アカウントで EC2 インスタンスの CPU 使用率を監視する Cloudwatch アラームを設定しています。
その CloudWatch アラームが発生したら主アカウントの AWS Lambda が実行されるようにしたいです。
どのようにすれば実現可能でしょうか、教えてください。

どう対応すればいいの?

  • 「他アカウント」を アカウント A
  • 「主アカウント」を アカウント B

上記仮定の基、以下の手順を参考に想定となる挙動となるかお試しください。

1. アカウント B にて Lambda を通知先に設定した SNS トピックを作成
2. ドキュメントAWS re:Post を参考にアカウント B の SNS トピックのアクセスポリシーに以下を追記

※ "REGION" "ACCOUNT_ID" "TOPIC_NAME" "ALARM_NAME" は環境によって書き換えてください。

{
	"Sid": "Allow_Publish_Alarms",
	"Effect": "Allow",
	"Principal": {
		"Service": [
			"cloudwatch.amazonaws.com"
		]
	},
	"Action": "sns:Publish",
	"Resource": "arn:aws:sns:<REGION>:<ACCOUNT_ID>:<TOPIC_NAME>",
	"Condition": {
		"ArnLike": {
			"aws:SourceArn": "arn:aws:cloudwatch:<REGION>:<ACCOUNT_ID>:alarm:<ALARM_NAME>"
		}
	}
}


3. アカウント A にてアカウント B の SNS トピックをアクションに設定した CloudWatch アラームを作成

参考資料