AWSネイティブな実装で、ブラウザからS3へアップロード。api gateway -> lambda(python)でs3の署名付きURL取得 ->htmlから直接s3へアップロード

AWSネイティブな実装で、ブラウザからS3へアップロード。api gateway -> lambda(python)でs3の署名付きURL取得 ->htmlから直接s3へアップロード

lambdaのペイロードが6MBしかないので、lambda経由のアップロードは無理だった。
セキュリティ最優先のためだろうけど、設定する場所が多すぎ!

参考URL
https://qiita.com/jun0o0/items/41fbcc28dfcafa6052cd

1, S3のバケット作成
1-1, 「パブリックアクセスをすべて ブロック」をオフ
1-2, バケットポリシーを記述(Read許可とIP制限)

1-3, Cross-Origin Resource Sharing (CORS)を設定。アップロード元を、どのオリジンからでもOKにする

1-4, プロパティタグの一番下に有る「静的ウェブサイトホスティング」を有効化。インデックスドキュメントをindex.html

2, lambda(python)関数で、s3の署名付きURLを生成。AmazonS3FullAccessポリシーで権限を付与しておく
https://qiita.com/jun0o0/items/41fbcc28dfcafa6052cd

3, lambdaのトリガーからapi gateway作成(REST API)
3-1, IP制限しているので、SecurityはOpen
3-2, /Lambda名のGETメソッドを作成。2で作ったlambdaを割り当てる
3-3, CORS対応。メソッドレスポンスのレスポンスヘッダーに、以下の3つを追加
Access-Control-Allow-Headers
Access-Control-Allow-Methods
Access-Control-Allow-Origin
3-4, 統合レスポンスのヘッダーのマッピングを編集
Access-Control-Allow-Headers ’Content-Type,X-Amz-Date,Authorization,X-Requested-With,X-Requested-By,X-Api-Key’
Access-Control-Allow-Methods ’GET,POST’
Access-Control-Allow-Origin ’*’

3-3, ステージはdefaultでデプロイして、URLを取得
https://乱数.execute-api.ap-northeast-1.amazonaws.com/default/Lambdaの関数名

4, ブラウザからアップロード操作するindex.htmlをs3に配置。静的ホスティングしているからs3のurlから使える。