NorthNest
AWS

AWS Step Functionsの実行結果をSlackへ通知する方法

📅 2024年9月24日
✍️ 王 家豪
#AWS
#Step Functions
#SNS
#Lambda
#Slack

はじめに

AWS Step Functionsの実行結果をSlackへ通知する手順について解説します。

本記事では、AWS Step Functions → SNS(Simple Notification Service) → AWS Lambda → Slack という構成で、
Step Functionsの実行結果をトリガーとしてSlackに通知を送る方法を紹介します。

構成

構成図

目次

  1. SlackのWebhookURLを取得
  2. SNSトピックの作成
  3. Step Functionsの実行結果をSNSへ通知する設定
  4. Lambda関数を作成し、SNSから実行結果を受け取りSlackに通知する

SlackのWebhookURLを取得

Slackに通知を送るために、Incoming Webhooks を利用します。

以下の手順でWebhook URLを取得します。

  • Slack API を参考にSlackアプリを作成
  • アプリ作成後、Incoming Webhooks を有効化
  • Webhook URLを生成(後ほどLambda関数で使用)

SNSトピックの作成

AWS Step Functionsの実行結果を受け取るために、SNSトピックを作成します。
SNSは、Step FunctionsとLambdaの間のメッセージブローカーとして機能します。

手順は以下の通りです。

  • AWSコンソールにログインし、SNSサービスへ移動
  • 「トピックの作成」をクリック
  • 任意のトピック名を入力して作成
  • 作成後、ARN(Amazon Resource Name) を控えておく

SNSトピック作成

Step Functionsの実行結果をSNSへ通知する設定

次に、Step Functionsが実行結果をSNSに通知するよう設定します。

  • AWS Step Functionsのコンソールへ移動
  • 対象のステートマシンを選択
  • 編集モードに切り替え
  • CatchFinally を利用し、成功・失敗時にSNSへ通知するステップを追加

以下はSNSへ通知するTaskステートの例です。

{
  "Type": "Task",
  "Resource": "arn:aws:states:::sns:publish",
  "Parameters": {
    "TopicArn": "作成されたARN",
    "Message": "Step Function完了しました"
  },
  "End": true
}

Lambda関数を作成し、SNSから実行結果を受け取りSlackに通知する

最後に、SNSからのメッセージを受け取りSlackへ通知するLambda関数を作成します。

Lambda関数の作成手順

  • AWS Lambdaのコンソールへ移動
  • 新しいLambda関数を作成
  • ランタイムに Python を選択
  • SNSトリガーを設定

Lambda関数のサンプルコード

import json
import urllib3

http = urllib3.PoolManager()

def lambda_handler(event, context):
    # SNSからのメッセージを取得
    message = event['Records'][0]['Sns']['Message']
    
    # SlackのWebhook URL
    slack_webhook_url = "https://hooks.slack.com/services/xxxx/yyyy/zzzz"
    
    # Slackに通知するペイロード
    slack_message = {
        'text': f"Step Functions Result: {message}"
    }
    
    # Slackにリクエストを送信
    response = http.request(
        'POST',
        slack_webhook_url,
        body=json.dumps(slack_message),
        headers={'Content-Type': 'application/json'}
    )
    
    print({
        "status_code": response.status,
        "response": response.data
    })

    return {
        'statusCode': 200,
        'body': json.dumps('slack通知')
    }

動作確認

Step Functionsを実行し、

  • SNSにメッセージが送信されていること
  • Lambdaが正常に実行されていること
  • Slackに通知が届くこと

を確認すれば設定完了です。

まとめ

AWS Step Functionsの実行結果をSlackへ通知することで、
バッチ処理やワークフローの成功・失敗を即座に把握できます。

SNSとLambdaを組み合わせることで、柔軟かつ拡張性の高い通知基盤を構築できるため、
運用監視やエラーハンドリングの自動化にぜひ活用してみてください。

AI活用についてご相談ください

貴社のビジネス課題に最適なAIソリューションをご提案いたします