7
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?

More than 1 year has passed since last update.

S3へのアップロードをLambdaで検知してslackに通知する

Last updated at Posted at 2023-12-04

概要

業務フローの最適化を目指してS3へのアップロードを検知してslackに知らせるシステムを構築してみようと思います。イメージはこんな感じ。
名称未設定ファイル.drawio.png

前提条件

  • Awsアカウントを作成済みであること(自由に触れる)
  • S3のバケットが用意してあること
  • slackアカウントを持っていること

Lambda環境の用意

こちらにまとめてあるので割愛

トリガーを設定する

これは編集画面ですが、新規作成もほぼ一緒です。s3のバケットの特定のディレクトリにアップロードされた際にLambdaが動くように設定
スクリーンショット 2023-08-18 0.42.22.png
コードをちょいと調整

module.exports.handler = async (event) => {
  console.log(event['Records'][0]['s3']['bucket']['name']);
  console.log(event['Records'][0]['s3']['object']['key']);
  
  return {
    statusCode: 200,
    body: JSON.stringify(
      {
        message: 'success!!',
        input: event,
      },
      null,
      2
    ),
  };
};

画像をアップロードしてCloudWatchを確認
スクリーンショット 2023-08-18 0.52.02.png
いけてるね!

slackに通知を送る

slackアプリの作成はこちらにまとめてあるので割愛

Lambda全体のコードはこんな感じ

const https = require('https');

module.exports.handler = async (event) => {
  const bucket = event['Records'][0]['s3']['bucket']['name'];
  const key = event['Records'][0]['s3']['object']['key'];
  const request = https.request('https://slack.com/api/chat.postMessage', {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "Authorization": "Bearer {アクセストークン}"
    },
  });
  request.write(JSON.stringify({
    channel: "#{チャンネル名}",
    text: (bucket + '/' + key + 'ファイルがアップロードされました'),
  }));
  request.end();

  return {
    statusCode: 200,
    body: JSON.stringify(
      {
        message: 'success!!',
        input: event,
      },
      null,
      2
    ),
  };
};

結果
スクリーンショット 2023-08-18 2.43.33.png

警告
本番環境にdeployしたところ意図した動作にならないバグが発生中。作業時間が取れたら確認しようと思います。非同期処理が怪しいとは思う...

まとめ

S3へのアップロードを検知してslackに知らせるシステムを簡単に実装することができました!

今後の展望

弊社の動画配信で使用しているブライトコーブクラウドには動画アップロード用のAPIが存在する

今回のシステムをベースに自動アップロードシステムを構築すれば現状で人が介入している業務フローが改善するのではないか?
名称未設定ファイル.drawio (1).png
業務フローを全てシステム化して動画コンテンツの準備が整い次第、最速で配信をユーザに届けたい!!

最後に運動通信社について

運動通信社は「日本を世界が憧れるスポーツ大国にする」というビジョンを達成するべく、一緒に働く仲間を募集しています!
PMやアプリエンジニア、Webエンジニアなど色んな職種を募集しておりカジュアル面談大歓迎なので是非採用フォームよりご連絡ください!
ぜひ一緒に、自分たちも世の中もワクワクするサービスを作りましょう!

Greenも活用中です

7
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
7
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?