AWS LambdaとS3、SNSでファイルのアップロードを自動通知
AWS LambdaとS3、SNSでファイルのアップロードを自動通知 AWS Lambdaは特定の条件を満たすときにサーバーレスでPython(他のプログラミング言語も)を実行できるサービスです。トリガーを検知したときや […]
Filter by Category
AWS LambdaとS3、SNSでファイルのアップロードを自動通知 AWS Lambdaは特定の条件を満たすときにサーバーレスでPython(他のプログラミング言語も)を実行できるサービスです。トリガーを検知したときや […]
PythonとMoviePyで動画ファイルの指定時間ごとの分割を自動化 OpenCVなどで動画の処理を行う際に、1分毎の変化や10分毎に結果を見たいときに一連の動画から指定した時間毎に分割して切り出したいことがあります。 […]
OpenCVで動画ファイルの最終フレームを取得 PythonとOpenCVを使用して動画ファイルの最大フレーム数を取得する方法を解説をします。処理の確認用に取得した最大フレーム数とファイル名をソートして表示させます。 コ […]
GitHub CopilotをPyCharmで使用するまでの手順 GitHub Copilotは、プログラミングの効率を飛躍的に向上させるツールで、開発者にとって非常に便利なコーディングのサポートを提供します。本記事では […]
PyCharm 2023.2から追加されたBlackによるコード成形 Pythonのコード成形で人気のBlackがPyCharm 2023.2から環境設定画面で設定可能になりました。従来はpipなどでインストールしていま […]
Twitter APIの変更に関して 最近、Twitter APIのバージョンがアップデートされ、v1が廃止されました。これに伴い、開発者はv2への移行が必要となります。 Twitter v1の廃止 Twitter v1 […]
PyCharmで.envから環境変数を読み込む 環境変数を.envに書いて読み込ませる理由 Pythonの開発では、セキュリティや環境毎の設定、柔軟性などの理由から.envファイルに環境変数を書いて読み込ませる方法が推奨 […]
AWS Cloud9にPython3.9をインストール AWSのCloud9(Ubuntu)にはデフォルトでPython 3.6.9がインストールされています。 openaiに必要なpandasのインストール opena […]
AWSのCloud9を使ってPythonのプログラミング研修を開催 2022年11月から2023年2月までの期間で、群馬県庁職員を対象にしたDXを促進するためのPythonによるプログラミング研修を開催しました。現在、群 […]
AttributeError: module ‘numpy’ has no attribute ‘float’ numpyを使ったライブラリをコマンド実行した際に以下のエラ […]
PythonからDeepLのAPIを使って翻訳 最先端のAI技術を使った世界最高レベルの機械翻訳のDeepLをAPIで操作します。deeplのライブラリを使うとPythonで書く通常のPOSTのコードよりも記述量を少なく […]
rembgで背景を削除した画像を編集して元の画像と再合成 YouTubeにアップロードしたrembgで背景を削除する説明動画にコメントをいただいたので、rembgを使った画像処理の続編です。rembgで背景を削除した画像 […]
Rembgで画像から背景を削除 先日、SNSで見た画像の背景を削除して切り抜くPythonのライブラリを見つけたので早速試してみました。普段業務で画像の背景を処理することも多くソフトを使って背景を削除していたので、Pyt […]
MacにGoProをウェブカメラとして認識させてOpenCVで使う MacとGoProを繋ぎ、GoProをウェブカメラとして認識させてOpenCVに映像を入力します。今回は映像を取り込んで画面に表示するだけですが、Pyt […]
Raspberry PiにInsightFaceをインストールできなかった 顔検出や顔認証、属性判定ができるInsightFaceというライブラリを使ってRaspberry Piで属性判定に挑戦しましたが、結果的にRas […]
WindowsでPythonの仮想環境を構築 Pythonで開発するときはMac版のPyCharmを使用しているので仮想環境も自動でPyCharmが構築してくれるのですが、Apple SiliconのMacでは動かないラ […]
iPhoneで撮影した写真をPythonでpngに変換 iPhoneで撮影した写真はHEICという拡張子で保存されます。この画像を利用したり編集したりするにはpngなどの形式に変換が必要なので画像が大量にある場合は1枚1 […]
Appleシリコン搭載MacのDocker環境でTensorflowを使う Intel搭載のMacで作成したTensorflowを使ったプロジェクトを移して、M1やM2などのAppleシリコンを搭載しているMacでTen […]
PythonでYouTubeの動画をダウンロード YouTubeの動画をPythonでダウンロードします。今回使うyt-dlpはyoutube-dlのフォークで、youtube-dlよりもダウンロード速度が高速です。Py […]
Pythonでjpgやpng画像をwebpに一括変換 ウェブサイトで使用される画像に画質を保ったまま軽量化できるWebサイト向けの次世代画像フォーマットのwebpを利用するケースが増えていますが、サイト内で使われている画 […]
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やソフトウェアを開発している株式会社ファントムが運営しています。
メーリングリストに登録するとファントムの最新情報をお届けします
お客様のメールアドレスを共有することはありません