群馬県でPythonを使ったAIやシステムを開発しているファントム

Navigation
群馬県でPythonを使ったAIやシステムを開発しているファントム

群馬県でPythonを使ったAIやシステムを開発しているファントムです。企業の経営課題を最適なテクノロジーで解決します。テックブログではPythonを中心にプログラミングに役立つ情報を発信しています。

投稿を検索する


  • 株式会社ファントム コーポレートサイト

カテゴリー



  • AWS 16
  • Django 45
  • FastAPI 4
  • Flask 8
  • GCP 1
  • Information 37
  • Other 32
  • PHP 2
  • Python 93
  • Pythonista 3
  • Rust 1

タグ


Alembic API argparse Beautiful Soup black Channels charset CodeCommit datetime Django REST framework Docker enumerate f-string git GitHub glob Google Colaboratory i18n IAM Internship Jupyter Lambda Matplotlib Nginx OpenCV pandas PIL Pillow PostgreSQL PyCharm PyCon pyenv PyTorch Redis Rembg ReportLab requests S3 Sentry slack tqdm uWSGI venv Vue.js youtube
このサイトはreCAPTCHAによって保護されており、Googleのプライバシーポリシーと利用規約が適用されます。

© 2022 Fantom, Inc.

Hydra WordPress Theme by EckoThemes.

Published with WordPress.

Related Articles

Filter by Category

  • Python(93)
  • Django(45)
  • Information(37)
  • Other(32)
  • AWS(16)
  • Flask(8)
  • FastAPI(4)
  • Pythonista(3)
  • PHP(2)
  • GCP(1)
  • Rust(1)

Filter by Author

  • EIGHT (14)
  • hayai017 (2)
  • press (196)
Back to Latest Articles
AWS

AWS LambdaとS3、SNSでファイルのアップロードを自動通知

AWS LambdaとS3、SNSでファイルのアップロードを自動通知 AWS Lambdaは特定の条件を満たすときにサーバーレスでPython(他のプログラミング言語も)を実行できるサービスです。トリガーを検知したときや […]

Posted on 21st 11月 2023 by press

Other

GitHubリポジトリを別のOrganizationに移行

GitHubリポジトリを別のOrganizationに移行 非公開用のOrganization(組織)で管理していたリポジトリの公開範囲をプライベートから公開に変更するにあたって、リポジトリを別のOrganization […]

Posted on 20th 11月 2023 by press

Python

PythonとMoviePyで動画ファイルの指定時間ごとの分割を自動化

PythonとMoviePyで動画ファイルの指定時間ごとの分割を自動化 OpenCVなどで動画の処理を行う際に、1分毎の変化や10分毎に結果を見たいときに一連の動画から指定した時間毎に分割して切り出したいことがあります。 […]

Posted on 20th 11月 2023 by press

Python

OpenCVで動画ファイルの最終フレームを取得

OpenCVで動画ファイルの最終フレームを取得 PythonとOpenCVを使用して動画ファイルの最大フレーム数を取得する方法を解説をします。処理の確認用に取得した最大フレーム数とファイル名をソートして表示させます。 コ […]

Posted on 6th 11月 2023 by press

AWS

Amazon Route 53で新規ドメインを登録

Amazon Route 53で新規ドメインを登録 ウェブサイトやウェブサービスを運営する際にドメインは欠かせない要素です。この記事では、Amazon Route 53で新しいドメインを登録する方法について解説します。 […]

Posted on 19th 10月 2023 by press

Other

GitHub CopilotをPyCharmで使用するまでの手順

GitHub CopilotをPyCharmで使用するまでの手順 GitHub Copilotは、プログラミングの効率を飛躍的に向上させるツールで、開発者にとって非常に便利なコーディングのサポートを提供します。本記事では […]

Posted on 17th 10月 2023 by press

Python

PyCharm 2023.2から追加されたBlackによるコード成形

PyCharm 2023.2から追加されたBlackによるコード成形 Pythonのコード成形で人気のBlackがPyCharm 2023.2から環境設定画面で設定可能になりました。従来はpipなどでインストールしていま […]

Posted on 13th 9月 2023 by press

AWS

S3のライフサイクルルールの落とし穴

S3のライフサイクルルールの落とし穴 保存したデータが必要以上に増えないようにライフサイクルルールで指定した日数を経過したデータは削除する設定にしていましたが、後日改めてバケットを確認するとフォルダ、ファイルどちらも削除 […]

Posted on 10th 9月 2023 by press

AWS

S3でストレージクラスを一括で変更

S3でストレージクラスを一括で変更 デフォルトではS3のストレージクラスは「標準」になっていますが、このストレージクラスは頻繁にアクセスするデータを保存するのに適した設定なので、バックアップファイルなどの頻繁にアクセスし […]

Posted on 10th 9月 2023 by press

Django

request.FILES.get(‘file’)とrequest.FILES[‘file’] の違い

request.FILES.get(‘file’)とrequest.FILES[‘file’] の違い この記事は生成AIで作成されました request.FILES.ge […]

Posted on 21st 5月 2023 by press

Other

Twitter APIの移行作業について

Twitter APIの変更に関して 最近、Twitter APIのバージョンがアップデートされ、v1が廃止されました。これに伴い、開発者はv2への移行が必要となります。 Twitter v1の廃止 Twitter v1 […]

Posted on 6th 5月 2023 by EIGHT

AWS

AWS Rekognitionとは

AWS Rekognitionとは AWS Rekognitionは、画像と動画から情報を抽出するディープラーニング技術を利用した分析サービスです。このサービスは、顔認識、物体検出、シーン分析など、さまざまな分析機能を提 […]

Posted on 5th 5月 2023 by EIGHT

Other

コメント,タイプヒント, ドックストリングの追記とGitHubでのコンフリクト

タイプヒント, コメント, ドックストリングの追記とGitHubでのコンフリクト コメントの記述方法と注意点 タイプヒントの記述方法と注意点 ドックストリングの記述方法と注意点 GitHubのコンフリクト発生時の対処法に […]

Posted on 18th 4月 2023 by hayai017

Other

VSCodeとGitでのコード管理

VSCodeとGitでのコード管理 行ったこと アクセストークンの取得リポジトリのクローン リポジトリのクローン ブランチの作成 ファイルのコミット 同期 ターミナルでのgitbashの利用(windows) 作業用のブ […]

Posted on 18th 4月 2023 by hayai017

Other

vue createで作成する際に.gitが生成されないようにする

vue createで作成する際に.gitが生成されないようにする Vue.jとDjangoのプロジェクトをGitで管理しようとしたところ、vue createで生成したディレクトリだけが追加されていないことがわかりまし […]

Posted on 3rd 4月 2023 by press

Django

Vue.jsとDjango REST Frameworkで画面が真っ白になる原因〜2〜

Vue.jsとDjango REST Frameworkで画面が真っ白になる原因〜2〜 Django REST Frameworkと組み合わせたVue.jsで、ビルド後にバックエンドの開発サーバー(8000ポートなど)で […]

Posted on 3rd 4月 2023 by press

Django

Vue.jsとDjango REST Frameworkで画面が真っ白になる原因〜1〜

Vue.jsとDjango REST Frameworkで画面が真っ白になる原因〜1〜 画面が真っ白になる原因 Vue.jsとDjangoの組み合わせで開発中にnpm run serveで起動した開発サーバーでページを確 […]

Posted on 3rd 4月 2023 by press

Django

Vue.jsとDjango REST FrameworkでSPA構築〜後半〜

Vue.jsとDjango REST FrameworkでSPA構築〜後半〜 前半に続き、後半はフロントエンド側(Vue.js)の実装を進めていきます。 コードはGitHubリポジトリにあげています。 開発環境 PC: […]

Posted on 2nd 4月 2023 by press

Django

Vue.jsとDjango REST FrameworkでSPA構築〜前半〜

Vue.jsとDjango REST FrameworkでSPA構築〜前半〜 Vue.jsとFlaskの連携に続き、今回はVue.jsとDjango(Django REST Framework)の連携を解説します。チュー […]

Posted on 2nd 4月 2023 by press

Other

.gitignoreには書かずに自分の環境だけファイルを管理から外す

.gitignoreには書かずに自分の環境だけファイルを管理から外す Gitでは管理から外すファイルを指定するには、.gitignoreファイルを使用します。これは、Gitが無視するべきファイルやディレクトリのリストを書 […]

Posted on 1st 4月 2023 by press

View Latest Posts
AWS

AWS LambdaとS3、SNSでファイルのアップロードを自動通知


press
AWS LambdaとS3、SNSでファイルのアップロードを自動通知
Posted on 21st 11月 2023 by press
2024年度 インターンシップ 募集開始

AWS LambdaとS3、SNSでファイルのアップロードを自動通知

AWS Lambdaは特定の条件を満たすときにサーバーレスでPython(他のプログラミング言語も)を実行できるサービスです。トリガーを検知したときや指定したタイミングでのみ起動するので、常時起動しているEC2などと比べてコスト面でも優れています。さらに、バッチ処理や特定のスクリプトはcronで実行することも多かったですが、AWS Lambdaに移行することで本番環境のリソースを使わずに処理を実行できることも魅力的です。

本記事ではAWS LambdaとストレージサービスのS3、メッセージ通知サービスのSNSを組み合わせて、S3でファイルのアップロードを検知したらAWS Lambdaでファイル名を取得して、取得したファイル名をSNSでメールに通知する機能を構築します。

構築の流れ

  1. S3でファイルをアップロードするバケットを作成
  2. IAMでSNS用のポリシーを作成
  3. SNSのトピック、サブスクリプションを作成
  4. Lambda関数の作成とIAMロールを設定
  5. Lambda関数のトリガーを設定
  6. Lambda関数にプログラムを記述

S3でファイルをアップロードするバケットを作成

S3でバケットを作成
S3でバケットを作成

ストレージサービスのS3で新しいをバケットを作成します。「バケットを作成」を押します。

S3でバケットを作成
S3でバケットを作成

バケット名とリージョンを指定します。

バケット名: lambda-triggered-file-upload-bucket-dev
リージョン: 東京

IAMでSNS用のポリシーを作成

ポリシーを作成
ポリシーを作成

IAMでSNS用のポリシーを作成します。「ポリシーの作成」を押します。

ポリシーを作成
ポリシーを作成
書き込み権限を付与
書き込み権限を付与
ポリシーの作成
ポリシーの作成

SNSを選択して、書き込み権限の「Publish」を選択します。リソースは「すべて」を選択して「次へ」を押します。

SNS用のポリシーを作成
SNS用のポリシーを作成
SNS用のポリシーを作成
SNS用のポリシーを作成

ポリシー名を入力して「ポリシーの作成」を押します。

ポリシー名: SNSPublishS3ToLambdaDev

SNSのトピック、サブスクリプションを作成

SNSでトピックを作成
SNSでトピックを作成

メッセージ通知サービスのSNSでトピックを作成します。トピック名を入力して「次のステップ」を押します。

SNSでトピックを作成
SNSでトピックを作成
トピックの作成
トピックの作成

スタンダードを選択して「トピックの作成」を押します。

サブスクリプションの作成
サブスクリプションの作成

サブスクリプションを作成します。「サブスクリプションの作成」を押します。ARNの値は後ほどLambda関数の設定で必要になるのでコピーしておきます。

サブスクリプションの作成
サブスクリプションの作成
サブスクリプションの作成
サブスクリプションの作成

トピックARNは先程作成したトピック名を選択、プロトコルはEメールを選択、エンドポイントには通知するメールアドレスを入力して「サブスクリプションの作成」を押します。

トピックARN: LambdaTriggeredEmailsDev
プロトコル: Eメール
エンドポイント: 通知するメールアドレス

サブスクリプションの確認メール
サブスクリプションの確認メール

サブスクリプションが作成されるとエンドポイントに入力したメールアドレス宛に確認メールが届くのでURLをクリックします。

サブスクリプションの確認
サブスクリプションの確認

この画面が表示されればサブスクリプションの作成が完了です。

サブスクリプションのステータスを確認
サブスクリプションのステータスを確認

URLをクリック後、SNSのサブスクリプションを確認するとステータスが「確認済み」に変わります。

Lambda関数の作成とIAMロールを設定

Lambda関数を作成
Lambda関数を作成

Lambdaで関数を作成します。「関数の作成」を押します。

Lambda関数の作成
Lambda関数の作成
Lambda関数の作成
Lambda関数の作成

関数名を入力します。ランタイムはPythonを選択、アーキテクチャはx86_64を選択、実行ロールは新しいをロールを作成を選択して「関数の作成」を押します。

Lambda関数名: sendEmailOnS3UploadDev
ランタイム: Python
アーキテクチャ: x86_64
実行ロール: 新しいをロールを作成

IAMの設定
IAMの設定

Lambda関数が作成できたら実行ロールの設定を行います。ロール名のURLを押します。

ポリシーをアタッチ
ポリシーをアタッチ

「許可を追加」を押してから「ポリシーをアタッチ」を押します。

SNS用のポリシーをアタッチ
SNS用のポリシーをアタッチ

IAMで作成したポリシーを検索すると候補に表示されるので選択して「許可を追加」を押します。

Lambda関数のトリガーを設定

Lambda関数のトリガーを設定
Lambda関数のトリガーを設定

Lambda関数を実行させるトリガーを設定します。「トリガーを追加」を押します。

トリガーのS3の設定
トリガーのS3の設定
トリガーにS3を追加
トリガーにS3を追加

S3を選択、バケット作成したバケット名を選択、イベントタイプは「PUT」と「POST」を選択して「追加」を押します。(コピーや削除をトリガーに追加することも可能)通知対象を特定のフォルダにする場合はPrefixにフォルダ名などを入力し、特定の拡張子を対象にする場合はSuffixに入力します。

Lambda関数に設定されたトリガー
Lambda関数に設定されたトリガー

トリガーにS3が追加されました。

Lambda関数にプログラムを記述

Lambda関数にコードを記述
Lambda関数にコードを記述

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にファイルをアップロードして確認

S3にアップロードするファイルを追加
S3にアップロードするファイルを追加

S3にファイルをアップロードしてメールが通知されるか確認します。「ファイルを追加」を押します。

S3にファイルをアップロード
S3にファイルをアップロード

選択したファイルをアップロードします。

ファイルアップロードを通知するメールを確認
ファイルアップロードを通知するメールを確認

アップロード完了後、メールを確認するとこのようにアップロードしたファイル名が通知されました。

CloudWatchでログを確認

Amazon CloudWatchでログの確認
Amazon CloudWatchでログの確認

CloudWatchでログを確認します。「CloudWatch ログを表示」を押します。

Amazon CloudWatchでログの確認
Amazon CloudWatchでログの確認

ログストリームに実行されたログが表示されます。詳しく見る場合はログのURLをクリックします。

ファントムYouTubeチャンネル

株式会社ファントムへのお問い合わせ

群馬県でPythonを使ったAIやソフトウェアを開発している株式会社ファントムが運営しています。




    press
    • IAM
    • Lambda
    • S3
    • SNS
    • Share Article:
    • Twitter
    • Facebook
    • Pinterest
    • LinkedIn
    • Reddit

    Related Articles

    Python

    Pythonのf文字列を使った書式パターン

    Pythonのf文字列を使った書式パターン この記事で紹介したf文字列を使った文字列の操作ですが、文字列に変数を埋め込む際に書式を指定できます。0埋めして文字数を揃えたり、カンマで桁を区切ることも可能です。 カンマで桁区 […]

    Posted on 27th 2月 2022 by press
    Python

    Pythonのrandomモジュールでランダムな小数・整数を生成

    Pythonのrandomモジュールでランダムな小数・整数を生成 Pythonで乱数(ランダムな小数や整数)が生成できる、randomモジュールの使い方を説明します。 開発環境 float型の乱数を生成(1) float […]

    Posted on 26th 1月 2021 by press