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でログを確認してトラブルシューティングする