Blog

LambdaでS3に置かれたファイルの署名付きURLをSlackに通知してみた

はじめに

こんにちは、新卒一年目のpopopopmanです。今回は練習のためにタイトル通りの機能をAWS上に構築してみました。Amazon S3に置かれたファイルを比較的安全に共有します。

TerraformとPythonを使って実装しました。

背景

ニフティでは実弾演習場と呼ばれるAWSの練習用アカウントが存在します。これを使ってAWSに慣れてみようということで本機能を作成しました。

構成

Amazon S3上にファイルが置かれたら、Amazon EventBridgeがそれを検知し、AWS Lambdaを発火させます。

アーキテクチャ図は以下のようになっています。

ディレクトリ構成は以下のようになりました。

以下main.tfのコードです。

send_url.pyのコードです。

下準備

.gitignoreの追加

githubでコードを管理する場合、.gitignoreファイルを他のファイルと同じ階層に作成し、

を記入。

Pythonファイルを圧縮

Pythonのファイルをzip圧縮。windowsの場合、zipコマンドをインストールするかファイルを右クリックして圧縮を行なってください。

AWSアクセスキーとシークレットアクセスキーの取得

AWSアクセスキーとシークレットアクセスキー外部に流出しないように大切に保管してください。

  • AWS Management Consoleにサインイン。
  • サービスメニューから「IAM(Identity and Access Management)」を選択。
  • 左側のメニューから「ユーザー」を選択し、「ユーザーの追加」をクリック。
  • ユーザーに適切なアクセス権を付与し、アクセスキーとシークレットアクセスキーを生成。

Terraformで読み込むクレデンシャルの設定

~/.aws/credentialsに以下のように記述。

AWSのパラメータストアにSlackのwebhook URLを格納

Slackのwebhook URLを取得したら、

  • AWS Management Consoleにサインイン。
  • Systems Managerパラメータストアに移動。
  • 左側のメニューから「パラメータストア」を選択し、「パラメータの作成」をクリック。
  • Nameを”/webhook/url/slack/dm”とし、Valueにwebhook URLを入力してパラメータを作成。

構築

を実行してデプロイ。

動作確認

コンソールからAmazon S3にtest.txtをアップロード。

するとSlackに長い署名付きURLの通知が来ました。

アクセスすると、

アップロードしたファイルを見ることができました。

めでたしめでたし。

おわりに

今回は実弾演習場を使ってAWS LambdaからAmazon S3に置かれたファイルの署名付きURLをslackに通知しました。自分で作ると理解が深まりますね。

改良すれば運用を自動化したりなど夢が広がります。

We are hiring!

ニフティでは、さまざまなプロダクトへ挑戦するエンジニアを絶賛募集中です!
ご興味のある方は以下の採用サイトよりお気軽にご連絡ください!

カジュアル面談も受け付けています!

Tech TalkやMeetUpも開催しております!
こちらもお気軽にご応募ください!