1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2024-09-24

はじめに

AWS Step Functionsの実行結果をSlackへ通知する手順について、以下の記事では、Step Functionsの実行結果を取得し、Slackに通知する方法を紹介します。この記事では、SNS(Simple Notification Service)とAWS Lambdaを使ってStep Functionsの実行結果をトリガーし、Slackに通知を送信する流れを説明します。

構成

Untitled Diagram.png

目次

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

SlackのWebhookURLを取得

Slackに通知を送るためには、SlackのIncoming Webhooksを利用します。
以下の手順でWebhook URLを取得します。

Slack APIを参考にアプリを作成。
・アプリを作成したら、Incoming Webhooksを有効にし、Webhook URLを生成します。このURLは後ほどLambda関数内で使用します。

SNSトピックの作成

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

・AWSコンソールにログインし、SNSサービスに移動します。
・「トピックの作成」をクリックし、トピック名を入力してトピックを作成します。
・トピックが作成されたら、ARN(Amazon Resource Name)をメモしておきます。Lambda関数でこのARNを使ってSNSからの通知を受信します。

スクリーンショット 2024-09-24 12.36.48.png

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

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

・AWS Step Functionsのコンソールに移動します。
・対象となるステートマシンを選択し、編集モードに移行します。
・Step Functionsの定義にCatchFinallyセクションを追加して、失敗や成功に応じてSNSに通知するように設定します。

生成されたコードは下記のようになります。

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

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

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

・AWS Lambdaのコンソールに移動し、新しいLambda関数を作成します。
・ランタイムにPythonを選択し、以下のようなコードを追加します。

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'}
    )
    
    # Slackへの通知結果をログに出力
    print({
        "status_code": response.status,
        "response": response.data
    })

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

最後にStep Functionsを実行し、正常に動作しているか確認します。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?