[AWS] API GatewayでS3にファイルをアップロードする

2024/12/19

AWS
API Gateway

こんにちは。

今回は、API Gatewayを使ってS3にファイルをアップロードする方法を紹介します。

1. S3のバケットを作成

まずは、S3のバケットを作成します。

2

バケット名は後で使うので、控えておいてください。

2. IAMロールを作成

次に、API GatewayからS3にアクセスするためのIAMロールを作成します。

1

信頼されたエンティティタイプから「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

3. API Gatewayを作成

次に、API Gatewayを作成します。

4

APIの種類は「REST API」を選択します。

5

新しいAPIを選択して、API名を入力します。

6

続いて、リソースを作成します。

7

リソースパスは/, リソース名は{object+}を入力します。

リソースが作成されたら、リソースに対してメソッドを作成します。

8

9

リソースを作成したら、統合リクエストを設定します。

統合リクエストのURLパスパラメータを設定します。

14

編集からURLパスパラメータを追加します。

15

名前はobject、マッピング元はmethod.request.path.objectを選択します。

最後に、APIの設定からバイナリメディアタイプを設定します。

今回はとりあえずなんでもアップロードできるように*/*を設定します。

10

ここまで設定が完了したら、デプロイします。

「新しいステージ」を選択して、ステージ名を入力します。

12

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にファイルがアップロードされたら成功です。

13