「S3」の統合タイプ「AWSサービス」でAPIゲートウェイメソッドGETを作成しました。私はパスのオーバーライドを定義しました:method.request.path.itemからマップされる{object}
パスにバケット自体のみが含まれている限り(./bucket/mybucketname)、それは機能し、{item}の値はmybucketname。
しかし、たとえば../bucket/mybucketname/foo/bar/test.txtをパスとして指定すると、{item}値はmybucketname/fooになります/bar/test.txtですがemptyです。ネストされたパスが原因だと思います
キャッチオールパス変数{proxy +}を選択すると、統合タイプ「AWSサービス」を選択できなくなります。
API Gatewayを介してS3からサブフォルダー内のファイル/フォルダーを取得するために何が間違っているのか、または何をすべきかについてのヒントはありますか?
重要なのは、パスの上書きで{object}変数の値を渡す方法です。次のように、リクエストパスからの統合リクエストのURLパスパラメータを設定すると思います。
object = method.request.path.object
問題は、オブジェクトに「/」が含まれているためであり、APIパス(リソース)にも含まれているためと考えられます。これにより、APIゲートウェイはルートパス内のオブジェクトのみを認識できます。
私がすることは、次のようにリクエストクエリ文字列からの統合リクエストのURLパスパラメータを設定することです:
object = method.request.querystring.object
できます
または、urlエンコードを使用してオブジェクトパスをエンコードして、「/」を「%2F」に置き換えてみてください。私は試したことはありません。
パスのオーバーライド:レベルごとのbucket_name/{folder}パターン。最初の{folder}に対するものです。
これは最後の{object}のためのものなので、すべてのパスマップについて言及しました。このリンクは役に立ちます https://docs.aws.Amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-s3.html
@ johnny90、最初にリソース{proxy +}の作成中にラムダプロキシとして構成します。作成後、.. update統合タイプを「AWSサービス」として構成します。その後、APIゲートウェイに任意のAWSサービスを構成できます。
これは proxy resource を使用して実行できます。
@ Johnny90が望むものを達成するための私のステップは次のとおりです。
API GatewayコンソールでAPIをクリックします。
/bucket
リソースを選択し、次にActionsドロップダウンメニューからCreate Resourceを選択します。次に、[新しい子リソース]ウィンドウで次の操作を行います。
a。 「プロキシリソースとして設定」にチェックを入れます。
b。リソース名にはデフォルトのproxy
を使用します。
c。リソースパスには{proxy+}
を使用します。
d。 リソースの作成を選択します。
統合タイプのHTTPプロキシを選択し、任意のWebサイトとしてエンドポイントURLを入力します(例: https://my-website.com/ {proxy})。次に保存を選択します。
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パスパラメータを設定する必要があります。
統合リクエストでRLパスパラメータを拡張し、次にパスを追加を選択します。
Name列にproxy
と入力し、Mapped from列にmethod.request.path.proxy
と入力します。
次に、メソッドの実行からメソッドの応答を選択します。
Add Responseを選択します。 HTTPステータスに200を入力します。
200コードの応答を展開します。
a。 ヘッダーの追加を選択します。名前に「Content-Type
」と入力します。
b。 Add Response Modelをクリックします。 application/json
にContent type
と入力し、[モデル]ドロップダウンメニューからEmptyを選択します。
最後に、メソッド実行から統合応答を選択します。
200メソッドの応答ステータスを拡張する
Header Mappingの場合、Responseヘッダー列にContent-Typeが表示されます。 マッピング値列にintegration.response.header.Content-Type
と入力します。
以下は私の構成です: