[英]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 想要的目標的步驟:
在 API Gateway 控制台中單擊您的 API。
選擇/bucket
資源,然后從操作下拉菜單中選擇創建資源。 然后,在“新建子資源”窗格中執行以下操作。
一種。 勾選“配置為代理資源”。
灣使用資源名稱的默認proxy
。
C。 使用{proxy+}
作為資源路徑。
d. 選擇創建資源。
為集成類型選擇 HTTP 代理並鍵入端點 URL 作為任何網站(例如, https://my-website.com/ {proxy} )。 然后選擇保存。
選擇集成請求
一種。 選擇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}
變量。
在集成請求中擴展URL 路徑參數,然后選擇添加路徑。
在 Name 列中鍵入proxy
,在Mapped from列中鍵入method.request.path.proxy
。
其次,從Method Execution 中選擇Method Response 。
選擇添加響應。 為 HTTP 狀態鍵入 200。
展開 200 代碼的響應。
一種。 選擇添加標題。 為名稱鍵入Content-Type
。
灣單擊添加響應模型。 為Content type
application/json
並從 Models 下拉菜單中選擇Empty 。
最后,從Method Execution 中選擇Integration Response 。
擴展 200 Method 響應狀態
對於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}。
這是最后一個{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.