AWS LambdaでS3へのファイルアップロードを検知しSlackに通知してみた

AWS LambdaでS3へのファイルアップロードを検知しSlackに通知してみた

AWS Lambda を使って、Amazon S3 へのファイルアップロードを検知し、Slack にリアルタイムで通知を送る方法を試してみました。手順を詳しく解説していますので、ぜひご覧ください!
Clock Icon2024.10.30

こんにちは!前越です。
皆さん、S3にファイルがアップロードされたことをリアルタイムで知りたいと思ったことはありませんか?
今回は、AWS Lambdaを使ってAmazon S3へのファイルアップロードを検知し、Slackにリアルタイムで通知を送る仕組みを作ってみました!

事前準備

必要なもの

  • AWSアカウント
  • Slackワークスペース
  • Slackで通知を受け取る チャンネルWebhook URL

やってみる

1. SlackのWebhook URLを取得

Slackのワークスペースで、通知を受け取りたいチャンネルを用意します。
スクリーンショット 2024-10-29 16.57.43


Slack APIサイトからアプリを作成して、Incoming Webhookを有効化し Webhook URLを取得します。

スクリーンショット 2024-10-29 16.54.21

Webhook URL は以下のような形式です。

https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX

2. S3バケットの作成

S3 サービスにアクセスし 「バケットを作成」 します。

バケット名を入力し、必要に応じてリージョンやオプションを設定します。
例:my-s3-event-bucket-maegoshi

「作成」 をクリックしてバケットを作成します。

スクリーンショット 2024-10-29 16.38.34


3. Lambda関数の作成

S3のイベントを受け取って、Slackに通知を送るLambda関数を作成します。

Lambdaサービスにアクセスし、「関数の作成」 をクリックします。

関数の詳細を設定します。
関数名:NotifyS3UploadToSlack
ランタイム:Python 3.12

スクリーンショット 2024-10-29 17.11.24


Lambdaの関数コードを下記のようにします。

Lambda
import json
import urllib3
import os

http = urllib3.PoolManager()

def lambda_handler(event, context):
    slack_url = os.environ['SLACK_WEBHOOK_URL']

    # S3のイベント情報を取得
    bucket_name = event['Records'][0]['s3']['bucket']['name']
    object_key = event['Records'][0]['s3']['object']['key']

    message = f"S3バケット '{bucket_name}' に新しいオブジェクトがアップロードされました!!!!!\nファイル名: {object_key}"

    encoded_data = json.dumps({"text": message}).encode('utf-8')

    response = http.request(
        'POST',
        slack_url,
        body=encoded_data,
        headers={'Content-Type': 'application/json'}
    )

    print(f"Slackへの送信結果: {response.status}")

    return {
        'statusCode': response.status,
        'body': response.data.decode('utf-8')
    }

環境変数 を設定します。
キー:SLACK_WEBHOOK_URL
:先ほど取得したSlackのWebhook URL

スクリーンショット 2024-10-29 17.21.03


4. Lambdaトリガーの設定

Lambda関数がS3のイベントでトリガーされるように設定します。

Lambda関数の詳細ページで、「トリガーを追加」 をクリックします。

トリガーの設定

  • トリガーの種類:S3
  • バケット:my-s3-event-bucket-maegoshi(作成したバケット)
  • イベントタイプ:オブジェクトの作成(すべて)
  • プレフィックスやサフィックス:必要に応じて指定 (今回は指定なし)

スクリーンショット 2024-10-29 16.41.19


動かしてみる

実際にLambdaのトリガー先の S3 にtest.txtをファイルをアップロードしてみます!
ドキドキっ!!!

スクリーンショット 2024-10-29 17.32.07


Slackを確認・・・


無事通知できてました!

スクリーンショット 2024-10-29 17.34.48

Slackに通知が届き、AWS LambdaとAmazon S3を利用して、バケットへのファイルアップロードをリアルタイムで受け取ることができました!

まとめ

今回は、AWS Lambda を使用して、Amazon S3 へのファイルアップロードを検知し Slack に通知する仕組みを構築しました。

これにより、ファイルアップロードなどの重要なイベントを即座にキャッチし、迅速に対応することが可能になります。

ぜひ皆さんも試してみてください!

アノテーション株式会社について

アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新ITテクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.