見出し画像

LINEで送信された写真をAWS S3に保存する(2024.8)


1-1.LINE公式アカウントを作成

・LINE公式アカウントのサイト

・個人のLINEアカウントと連携する形で作成
・困ることはなし

1-2.Messaging APIを有効

・右上の「設定」

・右左の「Messaging API」

・中央「MessagingAPIを利用する」

・名前、メールアドレスを入力して「同意する」

・プロバイダーを入力して「同意する」
・プロバイダー:個人名を入力

・入力なしで「OK」
・プライバシーポリシー:入力なし
・利用規約:入力なし

1-3.チャンネルアクセストークンの取得

・LINE Developersのサイト

・左からさっき作ったプロバイダーを選択

・Messaging APIを選択

・「Messaging API設定」タブを選択

・下部のチャンネルアクセストークンを発行
・チャンネルアクセストークンは後でlambdaの環境変数に設定する

2-1.S3バケットを作成

・アカウントは作成済み
・AWS Management Consoleにログインする。

・左上の検索バーに「S3」を入力→「S3」を選択

・「バケットを作成」

・各項目を入力して「バケットを作成」
・バケットタイプ:汎用
・バケット名:linepicture ※任意
・オブジェクト所有者:ACL無効
・このバケットのブロックパブリックアクセス設定:パブリックアクセスをすべて ブロック
・バケットのバージョニング:無効にする
・タグ:なし
・デフォルトの暗号化:Amazon S3 マネージドキーを使用したサーバー側の暗号化 (SSE-S3)
・バケットキー:有効にする ※SSE-S3にしているので影響なし
・オブジェクトロック:無効にする

2-2.IAMロールの作成

・左上の検索バーに「IAM」を入力→「IAM」を選択

・左の「ロール」

・右の「ロールを作成」

・各項目を入力して「ロールを作成」
・信頼されたエンティティタイプ:AWSのサービス
・ユースケース:Lambda
・許可ポリシー①:AmazonS3FullAccess
・許可ポリシー②:CloudWatchLogsFullAccess
・ロール名:linepicture ※任意 ※後でlambdaに設定する
・タグ:なし

3-1.Lambda関数の作成

・左上の検索バーに「Lambda」を入力→「Lambda」を選択

・「関数の作成」

・「一から作成」→各項目を入力して「関数の作成」
・関数名:linepictureupload
・ランタイム:Python 3.12
・アーキテクチャ:arm64
・実行ロール:既存のロールを使用する
・ロール:linepicture ※さっき作ったロール
・詳細設定:なし

3-2.コードの記述

・関数「linepictureupload」を選択→コードソースのエリアにコードを記述

・真ん中の「Deploy」

※あとでCloud9でrequestsライブラリをパッケージする

3-3.環境変数に設定

・「設定」タブを選択→「編集」

・「環境変数の追加」→キー、値を入力して「保存」
・キー:LINE_CHANNEL_ACCESS_TOKEN
・値:さっき発行したLINE Messaging API のチャンネルアクセストークン

3-4.トリガーの設定(API Gatewayの作成)

・「トリガーを追加」

・各項目を入力して「追加」
・ソース:API Gateway
・インテント:新規 API を作成
・API タイプ:HTTP API
・セキュリティ:開く
・API 名:linepictureupload-API ※デフォルトそのまま
・デプロイされるステージ:default ※デフォルトそのまま
・オリジン間リソース共有 (CORS):チェックなし
・詳細なメトリクスを有効化:チェックなし

・「API Gateway」を選択
・APIエンドポイント(URL)は後でWebhookに設定する

4-1.Webhook設定

・LINE DevelopersサイトのMessaging API設定画面のWebhookURL「編集」

・Webhook URLを入力して「更新」
・Webhook URL:さっき取得したAPIエンドポイントのURL
・Webhookの利用:ON

5-1.Cloud9の環境構築

・ローカル環境だとPythonのインストールが面倒なのでCloud9を利用
・左上の検索バーに「cloud9」を入力→「Cloud9」を選択

・「環境を作成」

・各項目を入力して「作成」
・名前:linepictureupload
・説明:入力なし ※デフォルトそのまま
・環境タイプ:新しいEC2インスタンス ※デフォルトそのまま
・インスタンスタイプ:t2.micro ※デフォルトそのまま
・プラットフォーム:Amazon Linux 2023 ※デフォルトそのまま
・タイムアウト:30分 ※デフォルトそのまま
・ネットワーク設定:SSM ※デフォルトそのまま
・VPC設定:デフォルトそのまま
・タグ:なし ※デフォルトそのまま

5-2.requestsライブラリのインストール

・作成したCloud9 IDEを「開く」
・下部のターミナル領域でコマンドを実行してrequestsライブラリをインストールするフォルダを作成する
・コマンド
mkdir lambda_package
cd lambda_package
pip install requests -t .

5-3.requestsライブラリとLamda関数をパッケージングする

・左の「aws」アイコン→EXPLORER/US EAST/Lambdaを右クリックする

・「Download」

・「Select a different folder」

・「Open」 ※たぶんここで一番上位の階層を選択しておけばよかったはず

・requestsフォルダとPythonファイルの階層が合っていないので修正する
・下部のターミナル領域でコマンドを実行してPythonファイルを移動させる
・不要になったフォルダ「linepictureupload」もついでに削除
・コマンド
mv linepictureupload/lambda_function.py .

・下部のターミナル領域でコマンドを実行してzipファイルを作成
・コマンド
zip -r lambda_function.zip .

・下部のターミナル領域でコマンドを実行してzipファイルをAWSにアップロードする
・コマンド
aws lambda update-function-code --function-name linepictureupload --zip-file fileb://lambda_function.zip

・AWSのLambdaでコードソース左を確認すると、requestsフォルダが存在することを確認できる

6-1.動作確認

・LINEで自分の公式アカウント宛に画像を送信する

・左上の検索バーに「s3」を入力→「S3」を選択

・バケットを選択

・画像が保存されていることを確認 ※なければCloudWatchでログを確認してトラブルシューティングする

6-2.参考


いいなと思ったら応援しよう!