2

我知道許多類似的問題已發佈並在此處得到解答,但其中沒有一個與我所遇到的情況完全相同。AWS Api網關+ Lambda +自定義域(Route53)缺少身份驗證令牌問題

我有一個處理傳入請求(GET和POST)的Lambda函數。我還設置了一個api網關作爲面向公衆的端點。此外,我設置了以下自定義域Set up Custom Domain Name for API Host Name

該測試呼叫在lambda和api網關控制檯中都起作用。一切都可以使用invoke URL,但不能與我設置的自定義域一起使用。

這裏有一些更多的細節:

調用URL(工程):

https://{api gateway id}.execute-api.us-west-2.amazonaws.com/prod/endpoint 

自定義域endpint(不工作):

https://api.{my domain}.com/endpoint 

基本路徑映射:

/endpoint endpoint:prod 

All Met HOD驗證:

Authorization None 
API Key Not required 

Route53:

A record as alias that points api.{my domain}.com to the cloudfront distribution domain name as alias target. 

,如果有人知道發生了什麼事在這裏我會很感激。

+0

你還設置了一個'Route53-Record-Set'指向'CloudFront-Distribution'嗎? – MaiKaY

+0

@MaiKaY是的。我有一個A記錄作爲api的別名。{my domain} .com。別名目標是CloudFront分配域名 – jlai

+1

我想你需要將'BasePath Mapping'更改爲:'/ endpoint:prod'。或者嘗試使用現有的'BasePath Mapping'來訪問'https:// api。{我​​的域名}。com' – MaiKaY

回答

2

我發現這個問題是誤解基礎路徑映射的工作原理。

我所有的配置都是正確的。

我的API資源不是在/但在/端點

要使用自定義域,而不是訪問https://api。{我的域名}的.com /端點,它需要去https://api。{我的域名} .com /端點/端點

當然這是愚蠢和多餘的。

我有兩個選擇。我要麼設置基本路徑映射到/而不是/端點,要麼我只能使用API​​資源/而不是/端點。

因爲如果基本路徑映射設置爲/,my api。{my domain} .com將只能託管一個API(我仍然可以在相同API下使用資源,但爲什麼浪費額外的抽象層?)。

這似乎是轉儲,但我仍然很高興我明白了。

+0

目前還不清楚爲什麼你會期望一個名爲'/ endpoint'的資源的'/ endpoint'基路徑會導致因爲資源是在base-path + resource處訪問的,所以除了需要請求轉到'/ endpoint/endpoint'外,其他任何行爲都是* other。 –

+1

我實際上使用lambda的模板設置了api網關,模板自動將它放在API的名稱下,而不是API的根目錄下。這是我第一次使用它,所以我沒有想到這種行爲。我預計資源是在API的根下創建的,這意味着API的名稱應該只是API的名稱,默認情況下根用於第一個資源。 – jlai

+1

我明白你的意思了。 –