
はじめに
ゼネットシステム事業部の方です。
AWSの運用では、システム異常やジョブ失敗の通知をSNS(Simple Notification Service)で受け取ることが一般的です。
しかし、通知先メールアドレスが複数ある場合、SNSコンソールから1件ずつ手作業で登録するのは負担が大きく、ミスも発生しやすくなります。
本記事では、CloudFormationを使って SNS サブスクリプションを自動化する方法を紹介します。
IaC(Infrastructure as Code)で管理することで、運用効率と信頼性が大幅に向上します。
SNSサブスクリプション自動化のメリット
1. 手作業が不要になり運用負荷を削減
複数のメールアドレスを CloudFormation でまとめて登録できるため、手で追加する必要がありません。
2. ヒューマンエラーを防止
手入力のミスや登録漏れを防げます。
テンプレートに明示的に定義されるため、正確な状態を保てます。
3. 複数環境への横展開が容易
開発・ステージング・本番など、どの環境にも同じテンプレートをデプロイするだけで統一された通知設定を再現できます。
4. IaC による変更管理
SNSサブスクリプションもコードとしてGitで管理でき、
「いつ・誰が・どの通知を追加したのか」を履歴として追跡可能です。
5. スケーラブルな通知体制
チームメンバーが多くあっても、テンプレートのパラメータにメールを追加するだけで対応できます。
CloudFormationでSNSサブスクリプションを自動化するテンプレート例
Parameters:
Email:
Type: CommaDelimitedList
Default: "address1@example.com,address2@example.com"
Description: Email addresses to receive notifications. Separate multiple emails with commas.
Resources:
NotificationTopic:
Type: AWS::SNS::Topic
Properties:
TopicName: "test-notification-topic"
Fn::ForEach::SubscriptionLoop:
- Address
- !Ref Email
- 'Subscription&{Address}':
Type: AWS::SNS::Subscription
Properties:
TopicArn: !Ref NotificationTopic
Protocol: email
Endpoint: !Ref Address
このテンプレートでは、Fn::ForEach を利用して パラメータに入力した複数メールアドレスをループ処理で自動登録 できます。
実際に使ってみよう
1. スタック作成時にメールアドレスを入力
CloudFormation のパラメータ欄に通知先メールアドレスをカンマ区切りで入力します。
address1@example.com,address2@example.com

2. デプロイ後にリソースを確認
入力したメールはパラメータタブで確認できます。

リソースタブには、ループによって自動生成された SNS サブスクリプションがメールアドレスごとに1つずつ作成されているのが確認できます。

3. メールの「サブスクリプション確認」を承認
SNS はメール通知のサブスクリプションを確認するため、各アドレスに確認メールを送信します。
2日以内に承認しない場合、自動で削除される点に注意してください。

使うときのポイントまとめ
-
Email パラメータに通知したいメールアドレスをカンマ区切りで入力
-
テンプレートを CloudFormation スタックとしてデプロイ
-
各メールで SNS の確認メールを承認
-
承認後、CloudWatch や Lambda、Glue ジョブ失敗通知などで活用可能
まとめ
CloudFormationを活用してSNSサブスクリプションを自動化すると、以下のメリットがあります:
-
手作業の削減による運用負荷の軽減
-
ヒューマンエラーの防止
-
複数環境への統一した通知設定のデプロイ
-
IaC 管理による変更履歴の追跡
-
チーム規模が大きくなっても柔軟に対応できるスケーラビリティ
AWS Glue や Lambda の失敗通知など、運用監視を正確に行いたい場面で特に効果を発揮します。
なお、ゼネットでは、AWS認定資格の取得を目標に、実際に手を動かしながら理解を深めるハンズオン中心の研修を実施しています。
