簡體   English   中英

API 帶子目錄的 S3 網關代理

[英]API Gateway Proxy for S3 with subdirectories

我為“S3”創建了一個集成類型為“AWS 服務”的 API 網關方法 GET。 我定義了一個 Path override: {object} 從 method.request.path.item 映射

整合請求

只要路徑僅包含存儲桶本身 (./bucket/ mybucketname ),它就可以工作並且 {item} 的值為mybucketname

但是當我指定例如../bucket/mybucketname/foo/bar/test.txt作為路徑時,{item} 值應該是 mybucketname/foo/bar/test.txt 但它是的。 我認為這是因為嵌套路徑

當我選擇包羅萬象的路徑變量 {proxy+} 時,我無法再選擇集成類型“AWS 服務”。

任何提示我做錯了什么或我應該做什么才能通過 API 網關從 S3 檢索子文件夾中的文件/文件夾?

這可以使用 代理資源來完成。

以下是我實現@Johnny90 想要的目標的步驟:

  1. 在 API Gateway 控制台中單擊您的 API。

  2. 選擇/bucket資源,然后從操作下拉菜單中選擇創建資源 然后,在“新建子資源”窗格中執行以下操作。

    一種。 勾選“配置為代理資源”。

    使用資源名稱的默認proxy

    C。 使用{proxy+}作為資源路徑。

    d. 選擇創建資源

  3. 為集成類型選擇 HTTP 代理並鍵入端點 URL 作為任何網站(例如, https://my-website.com/ {proxy} )。 然后選擇保存

  4. 選擇集成請求

    一種。 選擇AWS 服務作為集成類型。

    從 AWS 區域下拉列表中,選擇您的 S3 存儲桶所在的區域。

    C。 從 AWS 服務中,選擇 S3。 對於 AWS 子域,將其留空。

    d. 對於 HTTP 方法,選擇 GET。

    e. Action Type選擇Use path override 並輸入bucket/{proxy}

    F。 粘貼具有足夠權限的 IAM 角色。

    G。 點擊保存

將集成請求從HTTP 代理集成更改為AWS Service 后,我們必須為 API 添加一些設置。 首先,您必須設置 URL 路徑參數,以便 API Gateway 可以理解Integration Request資源路徑中定義的{proxy}變量。

  1. 在集成請求中擴展URL 路徑參數,然后選擇添加路徑

  2. 在 Name 列中鍵入proxy ,在Mapped from列中鍵入method.request.path.proxy

其次,從Method Execution 中選擇Method Response

  1. 選擇添加響應。 為 HTTP 狀態鍵入 200。

  2. 展開 200 代碼的響應。

    一種。 選擇添加標題 為名稱鍵入Content-Type

    單擊添加響應模型 Content type application/json並從 Models 下拉菜單中選擇Empty

最后,從Method Execution 中選擇Integration Response

  1. 擴展 200 Method 響應狀態

  2. 對於Header Mapping ,您應該在 Response 標題列中看到Content-Type 映射值列中輸入integration.response.header.Content-Type

以下是我的配置:

集成請求: 在此處輸入圖片說明

集成響應: 在此處輸入圖片說明

方法響應: 在此處輸入圖片說明

關鍵是如何在路徑覆蓋中傳遞 {object} 變量的值。 我認為您為來自請求路徑的集成請求設置了 url 路徑參數,如下所示:

object = method.request.path.object     

我認為問題是因為對象中有“/”,api 路徑(資源)也是如此。 它導致 api 網關只能識別根路徑中的對象。

我所做的是為來自請求查詢字符串的集成請求設置 url 路徑參數,如下所示:

object = method.request.querystring.object

有用

或者您可以嘗試使用 url encode 對對象路徑進行編碼,將 '/' 替換為 '%2F'。 我從來沒有嘗試過。

路徑覆蓋:bucket_name/{folder} 模式按照級別,用於第一個 {folder}。

在此處輸入圖片說明

您可以像這樣訪問 s3 嵌套路徑。 在此處輸入圖片說明

這是最后一個{object},所以提到了所有路徑圖。 此鏈接將有幫助https://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-s3.html

@johnny90,首先在創建資源 {proxy+} 時配置為 lambda 代理...創建后..將集成類型更新為“AWS 服務”。然后您可以將任何 AWS 服務配置到您的 API 網關。

您可以在請求 URL 中使用“%2F”作為路徑分隔符,例如:

URL 中的foo%2Fbar將被轉換為foo/bar S3 路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM