AWS API GatewayからLambdaを通さずにS3へ連携する方法
S3プロキシを使用してAPI GatewayからS3へ直接連携する手順です。Lambdaは使用しません。
GETメソッド
IAMロール作成
S3にフルアクセスできるIAMロールを作成しておきます。
信頼関係を以下の通りに編集します。
ロールARNは後で使用するので、コピーしておきます。
S3にファイルを置く
次にS3にファイルを置きます。api-to-s3というバケットにsample.txtというファイルを置いています。
API Gatewayの設定
API Gatewayでリソースを追加します。この際、リソースパスはパスパラメータ形式にします。{xxx}みたいな書き方です。
S3からファイルを取得して表示するのでGETメソッドを追加します。
「統合リクエスト」をクリックします。
統合タイプは「AWSサービス」にします。
AWSリージョン、AWSサービスを各々指定して、AWSサブドメインは空白にします。
HTTPメソッドはGETで、パス上書きは{bucketname}/{objectkey}
とします。
実行ロールには、先ほど作成したIAMロールを設定します。
URLパスパラメータに以下を追加します。
名前 | マッピング元 |
---|---|
bucketname | method.request.path.bucketname |
objectkey | method.request.path.objectkey |
これでテストします。
正常にファイルが取得出来て出力されていることが確認できます。
ちなみにデプロイしてURL実行してもOKです。
チュートリアル: API Gateway で Amazon S3 プロキシとして REST API を作成する
PUTメソッド
次にAPI Gateway経由でPUTしてbody部をファイルとしてS3へ作成します。
IAMはGETと同じロールを使用します。バケットも同じものを使用します。
S3へファイルを作成するのでPUTメソッドを追加します。
「統合リクエスト」をクリックします。
統合タイプは「AWSサービス」にします。
AWSリージョン、AWSサービスを各々指定して、AWSサブドメインは空白にします。
HTTPメソッドはPUTで、パス上書きは{bucketname}/{objectkey}
とします。
実行ロールには、先ほど作成したIAMロールを設定します。
URLパスパラメータに以下を追加します。
名前 | マッピング元 |
---|---|
bucketname | method.request.path.bucketname |
objectkey | method.request.path.objectkey |
これでテストします。
正常にファイルが作成されていることが確認できます。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント