やりたいこと
- API GatewayのInvoke URLを叩くとS3においてあるファイルがダウンロードされる。
まずやってみたこと(失敗)
「Integration type」でHTTP Proxy
を選択して「Endpoint URL」にS3のStatic Website HostingのEndpointを指定すれば行けると思ったのですがInternal server Error
となりました。
うまくいったやり方
ひとまずうまくいったやり方が以下になります。
S3にバケットを作成
任意のバケットを作成し、ダウンロードさせたいファイルを配置します。
S3アクセス用のroleを作成
IAMでAPI GatewayからS3の該当バケットにアクセスするためのroleを作成します。
API Gatewayの設定
以下のように設定します。
Integration Request
Integration Type
AWS Service Proxyを選択
AWS Region
S3のリージョンを選択
AWS Service
S3を選択
HTTP method
任意
Path override
S3のkey(bucketname含む)を入力
Execution role
作成したroleのarnを入力
Method Response
Response Models for 200
Content type
application/octet-stream
課題
Content-Disposition: attachment; filename="filename"
の設定ができていません。
「Method Response」の「Response Headers for 200」に
Content-Disposition
を追加して、
「Integration Response」の「Header Mappings」の「Mapping value」に
attachment; filename="filename"
を指定すると以下のエラーとなりました。
Invalid mapping expression specified: Validation Result: warnings : [], errors : [Invalid mapping expression specified: attachment; filename="filename"]
ここは現在調査中です。
2016/02/09追記
2016/02/09現在、「Method Execution」からのTESTを実行するとInternal server error
となります。
どうやらAPI Gatewayのバグの用で、Deployすると正常に動作します。