web-dev-qa-db-ja.com

S3用APIゲートウェイプロキシとサブディレクトリ

「S3」の統合タイプ「AWSサービス」でAPIゲートウェイメソッドGETを作成しました。私はパスのオーバーライドを定義しました:method.request.path.itemからマップされる{object}

Integration Request

パスにバケット自体のみが含まれている限り(./bucket/mybucketname)、それは機能し、{item}の値はmybucketname

しかし、たとえば../bucket/mybucketname/foo/bar/test.txtをパスとして指定すると、{item}値はmybucketname/fooになります/bar/test.txtですがemptyです。ネストされたパスが原因だと思います

キャッチオールパス変数{proxy +}を選択すると、統合タイプ「AWSサービス」を選択できなくなります。

API Gatewayを介してS3からサブフォルダー内のファイル/フォルダーを取得するために何が間違っているのか、または何をすべきかについてのヒントはありますか?

10
Johnny90

重要なのは、パスの上書きで{object}変数の値を渡す方法です。次のように、リクエストパスからの統合リクエストのURLパスパラメータを設定すると思います。

object = method.request.path.object     

問題は、オブジェクトに「/」が含まれているためであり、APIパス(リソース)にも含まれているためと考えられます。これにより、APIゲートウェイはルートパス内のオブジェクトのみを認識できます。

私がすることは、次のようにリクエストクエリ文字列からの統合リクエストのURLパスパラメータを設定することです:

object = method.request.querystring.object

できます

または、urlエンコードを使用してオブジェクトパスをエンコードして、「/」を「%2F」に置き換えてみてください。私は試したことはありません。

6
alfianabdi

パスのオーバーライド:レベルごとのbucket_name/{folder}パターン。最初の{folder}に対するものです。

enter image description here

このようにして、s3のネストされたパスにアクセスできます。 enter image description here

これは最後の{object}のためのものなので、すべてのパスマップについて言及しました。このリンクは役に立ちます https://docs.aws.Amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-s3.html

2
Piyush Sonigra

@ johnny90、最初にリソース{proxy +}の作成中にラムダプロキシとして構成します。作成後、.. update統合タイプを「AWSサービス」として構成します。その後、APIゲートウェイに任意のAWSサービスを構成できます。

2
Afsi

これは proxy resource を使用して実行できます。

@ Johnny90が望むものを達成するための私のステップは次のとおりです。

  1. API GatewayコンソールでAPIをクリックします。

  2. /bucketリソースを選択し、次にActionsドロップダウンメニューからCreate Resourceを選択します。次に、[新しい子リソース]ウィンドウで次の操作を行います。

    a。 「プロキシリソースとして設定」にチェックを入れます。

    b。リソース名にはデフォルトのproxyを使用します。

    c。リソースパスには{proxy+}を使用します。

    d。 リソースの作成を選択します。

  3. 統合タイプのHTTPプロキシを選択し、任意のWebサイトとしてエンドポイントURLを入力します(例: https://my-website.com/ {proxy})。次に保存を選択します。

  4. Integration Requestを選択します

    a。統合タイプとしてAWSサービスを選択します。

    b。 [AWSリージョン]ドロップダウンリストから、S3バケットが存在するリージョンを選択します。

    c。 AWSサービスから、S3を選択します。 AWSサブドメインの場合は、空白のままにします。

    d。 HTTPメソッドの場合は、GETを選択します。

    e。 アクションタイプse path overrideを選択します。 bucket/{proxy}と入力します。

    f。十分な権限を持つIAMロールを貼り付けます。

    g。 保存をクリックします。

統合リクエストをHTTPプロキシ統合からAWSサービスに変更した後、APIの設定をいくつか追加する必要があります。まず、API Gatewayがリソースパス統合リクエストで定義されている{proxy}変数を理解できるように、URLパスパラメータを設定する必要があります。

  1. 統合リクエストでRLパスパラメータを拡張し、次にパスを追加を選択します。

  2. Name列にproxyと入力し、Mapped from列にmethod.request.path.proxyと入力します。

次に、メソッドの実行からメソッドの応答を選択します。

  1. Add Responseを選択します。 HTTPステータスに200を入力します。

  2. 200コードの応答を展開します。

    a。 ヘッダーの追加を選択します。名前に「Content-Type」と入力します。

    b。 Add Response Modelをクリックします。 application/jsonContent typeと入力し、[モデル]ドロップダウンメニューからEmptyを選択します。

最後に、メソッド実行から統合応答を選択します。

  1. 200メソッドの応答ステータスを拡張する

  2. Header Mappingの場合、Responseヘッダー列にContent-Typeが表示されます。 マッピング値列にintegration.response.header.Content-Typeと入力します。

以下は私の構成です:

統合リクエスト: enter image description here

統合応答: enter image description here

メソッドの応答: enter image description here

1
Brian