AWS LambdaとS3、SNSでファイルのアップロードを自動通知
AWS LambdaとS3、SNSでファイルのアップロードを自動通知 AWS Lambdaは特定の条件を満たすときにサーバーレスでPython(他のプログラミング言語も)を実行できるサービスです。トリガーを検知したときや […]
Filter by Category
AWS LambdaとS3、SNSでファイルのアップロードを自動通知 AWS Lambdaは特定の条件を満たすときにサーバーレスでPython(他のプログラミング言語も)を実行できるサービスです。トリガーを検知したときや […]
GitHubリポジトリを別のOrganizationに移行 非公開用のOrganization(組織)で管理していたリポジトリの公開範囲をプライベートから公開に変更するにあたって、リポジトリを別のOrganization […]
PythonとMoviePyで動画ファイルの指定時間ごとの分割を自動化 OpenCVなどで動画の処理を行う際に、1分毎の変化や10分毎に結果を見たいときに一連の動画から指定した時間毎に分割して切り出したいことがあります。 […]
OpenCVで動画ファイルの最終フレームを取得 PythonとOpenCVを使用して動画ファイルの最大フレーム数を取得する方法を解説をします。処理の確認用に取得した最大フレーム数とファイル名をソートして表示させます。 コ […]
Amazon Route 53で新規ドメインを登録 ウェブサイトやウェブサービスを運営する際にドメインは欠かせない要素です。この記事では、Amazon Route 53で新しいドメインを登録する方法について解説します。 […]
GitHub CopilotをPyCharmで使用するまでの手順 GitHub Copilotは、プログラミングの効率を飛躍的に向上させるツールで、開発者にとって非常に便利なコーディングのサポートを提供します。本記事では […]
PyCharm 2023.2から追加されたBlackによるコード成形 Pythonのコード成形で人気のBlackがPyCharm 2023.2から環境設定画面で設定可能になりました。従来はpipなどでインストールしていま […]
S3のライフサイクルルールの落とし穴 保存したデータが必要以上に増えないようにライフサイクルルールで指定した日数を経過したデータは削除する設定にしていましたが、後日改めてバケットを確認するとフォルダ、ファイルどちらも削除 […]
S3でストレージクラスを一括で変更 デフォルトではS3のストレージクラスは「標準」になっていますが、このストレージクラスは頻繁にアクセスするデータを保存するのに適した設定なので、バックアップファイルなどの頻繁にアクセスし […]
request.FILES.get(‘file’)とrequest.FILES[‘file’] の違い この記事は生成AIで作成されました request.FILES.ge […]
Twitter APIの変更に関して 最近、Twitter APIのバージョンがアップデートされ、v1が廃止されました。これに伴い、開発者はv2への移行が必要となります。 Twitter v1の廃止 Twitter v1 […]
AWS Rekognitionとは AWS Rekognitionは、画像と動画から情報を抽出するディープラーニング技術を利用した分析サービスです。このサービスは、顔認識、物体検出、シーン分析など、さまざまな分析機能を提 […]
タイプヒント, コメント, ドックストリングの追記とGitHubでのコンフリクト コメントの記述方法と注意点 タイプヒントの記述方法と注意点 ドックストリングの記述方法と注意点 GitHubのコンフリクト発生時の対処法に […]
VSCodeとGitでのコード管理 行ったこと アクセストークンの取得リポジトリのクローン リポジトリのクローン ブランチの作成 ファイルのコミット 同期 ターミナルでのgitbashの利用(windows) 作業用のブ […]
vue createで作成する際に.gitが生成されないようにする Vue.jとDjangoのプロジェクトをGitで管理しようとしたところ、vue createで生成したディレクトリだけが追加されていないことがわかりまし […]
Vue.jsとDjango REST Frameworkで画面が真っ白になる原因〜2〜 Django REST Frameworkと組み合わせたVue.jsで、ビルド後にバックエンドの開発サーバー(8000ポートなど)で […]
Vue.jsとDjango REST Frameworkで画面が真っ白になる原因〜1〜 画面が真っ白になる原因 Vue.jsとDjangoの組み合わせで開発中にnpm run serveで起動した開発サーバーでページを確 […]
Vue.jsとDjango REST FrameworkでSPA構築〜後半〜 前半に続き、後半はフロントエンド側(Vue.js)の実装を進めていきます。 コードはGitHubリポジトリにあげています。 開発環境 PC: […]
Vue.jsとDjango REST FrameworkでSPA構築〜前半〜 Vue.jsとFlaskの連携に続き、今回はVue.jsとDjango(Django REST Framework)の連携を解説します。チュー […]
.gitignoreには書かずに自分の環境だけファイルを管理から外す Gitでは管理から外すファイルを指定するには、.gitignoreファイルを使用します。これは、Gitが無視するべきファイルやディレクトリのリストを書 […]
AWS Lambdaは特定の条件を満たすときにサーバーレスでPython(他のプログラミング言語も)を実行できるサービスです。トリガーを検知したときや指定したタイミングでのみ起動するので、常時起動しているEC2などと比べてコスト面でも優れています。さらに、バッチ処理や特定のスクリプトはcronで実行することも多かったですが、AWS Lambdaに移行することで本番環境のリソースを使わずに処理を実行できることも魅力的です。
本記事ではAWS LambdaとストレージサービスのS3、メッセージ通知サービスのSNSを組み合わせて、S3でファイルのアップロードを検知したらAWS Lambdaでファイル名を取得して、取得したファイル名をSNSでメールに通知する機能を構築します。
ストレージサービスのS3で新しいをバケットを作成します。「バケットを作成」を押します。
バケット名とリージョンを指定します。
バケット名: lambda-triggered-file-upload-bucket-dev
リージョン: 東京
IAMでSNS用のポリシーを作成します。「ポリシーの作成」を押します。
SNSを選択して、書き込み権限の「Publish」を選択します。リソースは「すべて」を選択して「次へ」を押します。
ポリシー名を入力して「ポリシーの作成」を押します。
ポリシー名: SNSPublishS3ToLambdaDev
メッセージ通知サービスのSNSでトピックを作成します。トピック名を入力して「次のステップ」を押します。
スタンダードを選択して「トピックの作成」を押します。
サブスクリプションを作成します。「サブスクリプションの作成」を押します。ARNの値は後ほどLambda関数の設定で必要になるのでコピーしておきます。
トピックARNは先程作成したトピック名を選択、プロトコルはEメールを選択、エンドポイントには通知するメールアドレスを入力して「サブスクリプションの作成」を押します。
トピックARN: LambdaTriggeredEmailsDev
プロトコル: Eメール
エンドポイント: 通知するメールアドレス
サブスクリプションが作成されるとエンドポイントに入力したメールアドレス宛に確認メールが届くのでURLをクリックします。
この画面が表示されればサブスクリプションの作成が完了です。
URLをクリック後、SNSのサブスクリプションを確認するとステータスが「確認済み」に変わります。
Lambdaで関数を作成します。「関数の作成」を押します。
関数名を入力します。ランタイムはPythonを選択、アーキテクチャはx86_64を選択、実行ロールは新しいをロールを作成を選択して「関数の作成」を押します。
Lambda関数名: sendEmailOnS3UploadDev
ランタイム: Python
アーキテクチャ: x86_64
実行ロール: 新しいをロールを作成
Lambda関数が作成できたら実行ロールの設定を行います。ロール名のURLを押します。
「許可を追加」を押してから「ポリシーをアタッチ」を押します。
IAMで作成したポリシーを検索すると候補に表示されるので選択して「許可を追加」を押します。
Lambda関数を実行させるトリガーを設定します。「トリガーを追加」を押します。
S3を選択、バケット作成したバケット名を選択、イベントタイプは「PUT」と「POST」を選択して「追加」を押します。(コピーや削除をトリガーに追加することも可能)通知対象を特定のフォルダにする場合はPrefixにフォルダ名などを入力し、特定の拡張子を対象にする場合はSuffixに入力します。
トリガーにS3が追加されました。
Lambda関数に以下のコードを記述します。記述が終わったら「Deploy」を押して保存します。
import boto3
def lambda_handler(event, context):
sns = boto3.resource('sns')
arn = 'SNSトピックARN' # SNSトピックARN
file_name = event['Records'][0]['s3']['object']['key'] # S3にアップロードされたファイル名を取得
platform_endpoint = sns.PlatformEndpoint(arn)
subject = 'Lambdaから送られたメール'
msg = f'S3のバケットにファイルがアップロードされました。\nファイル名: {file_name}'
response = platform_endpoint.publish(
Message = msg,
Subject = subject
)
return response
SNSトピックARNの値はSNSでトピックを作成したときに生成された「arn:aws:sns:」から始まるARNの値を指定します。
arn = 'SNSトピックARN'
S3にファイルをアップロードしてメールが通知されるか確認します。「ファイルを追加」を押します。
選択したファイルをアップロードします。
アップロード完了後、メールを確認するとこのようにアップロードしたファイル名が通知されました。
CloudWatchでログを確認します。「CloudWatch ログを表示」を押します。
ログストリームに実行されたログが表示されます。詳しく見る場合はログのURLをクリックします。
群馬県でPythonを使ったAIやソフトウェアを開発している株式会社ファントムが運営しています。
メーリングリストに登録するとファントムの最新情報をお届けします
お客様のメールアドレスを共有することはありません