こんにちは。
今回は、API Gatewayを使ってS3にファイルをアップロードする方法を紹介します。
1. S3のバケットを作成
まずは、S3のバケットを作成します。
バケット名は後で使うので、控えておいてください。
2. IAMロールを作成
次に、API GatewayからS3にアクセスするためのIAMロールを作成します。
信頼されたエンティティタイプから「AWSのサービス」、サービスからユースケースでは「API Gateway」を選択します。
作成後、ポリシーをアタッチします。
今回はJSONを使って以下のポリシーをアタッチします。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*"
}
]
}
YOUR_BUCKET_NAME
には先ほど作成したS3のバケット名を入れてください。
3. API Gatewayを作成
次に、API Gatewayを作成します。
APIの種類は「REST API」を選択します。
新しいAPIを選択して、API名を入力します。
続いて、リソースを作成します。
リソースパスは/
, リソース名は{object+}
を入力します。
リソースが作成されたら、リソースに対してメソッドを作成します。
リソースを作成したら、統合リクエストを設定します。
統合リクエストのURLパスパラメータを設定します。
編集からURLパスパラメータを追加します。
名前はobject
、マッピング元はmethod.request.path.object
を選択します。
最後に、APIの設定からバイナリメディアタイプを設定します。
今回はとりあえずなんでもアップロードできるように*/*
を設定します。
ここまで設定が完了したら、デプロイします。
「新しいステージ」を選択して、ステージ名を入力します。
4. 実際にファイルをアップロードしてみる
最後に、実際にファイルをアップロードしてみます。
curl -i --location --request PUT 'https://{API GatewayのID}.execute-api.ap-northeast-1.amazonaws.com/{ステージ名}/{アップロードしたいファイル名}' --data-binary '{アップロードしたいファイル名}'
{API GatewayのID}
はAPI GatewayのID、{ステージ名}
はデプロイしたステージ名、{アップロードしたいファイル名}
はアップロードしたいファイル名を入力します。
S3にファイルがアップロードされたら成功です。