AWS Lambda から S3 に保存したPDFファイルをダウンロードするメモ

AWS Lambda から S3 に保存したPDFファイルをダウンロードするメモ:

AWS Lambda からS3に保存したPDFファイルをダウンロードする際の覚書きです。


流れ

  1. S3バケットを作成
  2. IAMロールの作成
  3. Lambdaファンクションの作成
  4. API Gatewayの設定
  5. S3にPDFファイルを保存
  6. ファイルダウンロードのコードを作成
  7. API Gateway のAPI エンドポイントにアクセス
  8. ファイルがダウンロードされることを確認


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


メソッドリクエストの設定画面



スクリーンショット 2019-01-15 6.24.43.png



メソッドリクエストの設定画面



スクリーンショット 2019-01-15 6.25.20.png



バイナリメディアタイプの設定画面



スクリーンショット 2019-01-15 6.25.48.png


設定が終わったらステージを選んで保存します。

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 
ダウンロードされたファイルを開いて確認します。

コメント

このブログの人気の投稿

投稿時間:2021-06-17 22:08:45 RSSフィード2021-06-17 22:00 分まとめ(2089件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)