AWS Lambda から S3 に保存したPDFファイルをダウンロードするメモ
AWS Lambda から S3 に保存したPDFファイルをダウンロードするメモ:
AWS Lambda からS3に保存したPDFファイルをダウンロードする際の覚書きです。
東京リージョンにS3バケットを作成します。
S3にアクセスできる権限を持つユーザーロールを作成します。
AWSのLambdaコンソールからLambdaファンクションを作成します。
テストの為、セキュリティはオープンに設定します。
設定が終わったらステージを選んで保存します。
API Gatewayの設定を変更した場合は、デプロイするステージを選択して保存(デプロイ)します。
S3にPDFファイルをアップロードします。
今回は事前にThinreportsで作成したPDFファイルをアップロードしました。
Lambdaコンソールでコードを記述します。
Lambdaにてテストを実行します。
レスポンスにPDFが出力されていることを確認します。
APIエンドポイントにアクセスします。
LambdaのコンソールからAPI Gatewayを選択し、APIエンドポイントのURLリンクをクリックします。
ブラウザでアクセスして、エラーで表示されないことを確認します。
cURLを使って実行してPDFファイルがダウンロードされることを確認します。
ダウンロードされたファイルを開いて確認します。
AWS Lambda からS3に保存したPDFファイルをダウンロードする際の覚書きです。
流れ
- S3バケットを作成
- IAMロールの作成
- Lambdaファンクションの作成
- API Gatewayの設定
- S3にPDFファイルを保存
- ファイルダウンロードのコードを作成
- API Gateway のAPI エンドポイントにアクセス
- ファイルがダウンロードされることを確認
S3バケットを作成
東京リージョンにS3バケットを作成します。- バケット名:バケット名(ex. kazu-lambda-test001)
IAMロールの作成
S3にアクセスできる権限を持つユーザーロールを作成します。
ポリシーの作成
- サービス:S3
- アクション:GetObject, PutObject
- リソース:S3バケットARN/*
- ポリシー名:luck-s3-get-put-policy
ロールの作成
- ロール名:lambda-s3-read-write-role
- 利用サービス:Lambda
- ポリシー:AWSLambdaBasicExecutionRole, luck-s3-get-put-policy, AmazonAPIGatewayPushToCloudWatchLogs
Lambdaファンクションの作成
AWSのLambdaコンソールからLambdaファンクションを作成します。- ファンクション名:s3PdfDownload
- ランタイム:Ruby2.5
- ロール:lambda-s3-read-write-role
API Gatewayの設定
テストの為、セキュリティはオープンに設定します。- API:新規APIの作成
- セキュリティ:オープン
- 設定:バイナリタイプメディア:application/pdf
メソッドリクエストの設定画面
メソッドリクエストの設定画面
バイナリメディアタイプの設定画面
設定が終わったらステージを選んで保存します。
API Gatewayの設定を変更した場合は、デプロイするステージを選択して保存(デプロイ)します。
S3にPDFファイルを保存
S3にPDFファイルをアップロードします。今回は事前にThinreportsで作成したPDFファイルをアップロードしました。
ファイルダウンロードのコードを作成
Lambdaコンソールでコードを記述します。require 'json' require 'base64' require 'aws-sdk-s3' def lambda_handler(event:, context:) region = 'リージョン' bucket_name = 'バケット名' key = 'hello_world.pdf' s3 = Aws::S3::Resource.new(region: region) obj = s3.bucket(bucket_name).object(key) puts "pp object => " pp obj resp = obj.get() puts "pp resp" pp resp puts "pp resp.body" pp resp.body pp resp.content_type { statusCode: 200, headers: { 'Content-Type': 'application/pdf' }, body: Base64.encode64(resp.body.read()), isBase64Encoded: true } end
テスト
Lambdaにてテストを実行します。レスポンスにPDFが出力されていることを確認します。
APIエンドポイントにアクセス
APIエンドポイントにアクセスします。LambdaのコンソールからAPI Gatewayを選択し、APIエンドポイントのURLリンクをクリックします。
ブラウザでアクセスして、エラーで表示されないことを確認します。
cURLで実行
cURLを使って実行してPDFファイルがダウンロードされることを確認します。$ curl -H "Accept: application/pdf" "APIエンドポイントURL" > test.pdf % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 45348 100 45348 0 0 84780 0 --:--:-- --:--:-- --:--:-- 88397 $ ls test.pdf
コメント
コメントを投稿