簡體   English   中英

AWS:我可以讓一個 VPC 內的 Lambda function 訪問公共 Websockets API 網關嗎?

[英]AWS: Can I give a Lambda function inside a VPC access to a public Websockets API Gateway?

我在使用 Websockets 協議的 API 網關中有一個公共 API。 我將其連接 ID 存儲在我的 VPC 內的數據存儲中,並嘗試編寫 Lambda 來讀取這些連接 ID,然后將數據發送給它們中的每一個 - 使用await apigwManagementApi.postToConnection({ ConnectionId: connectionId, Data: postData }).promise(); . 此超時 - Lambda 無法將消息發送到 API 網關。 所以我嘗試將網關添加到execute-apiaws ec2 create-vpc-endpoint --vpc-id vpc-xyz --vpc-endpoint-type Interface --service-name com.amazonaws.eu-west-1.execute-api --subnet-ids subnet-xyz --security-group-id sg-xyz 現在我得到了ForbiddenException: Forbidden由我對 apigwManagementApi 的調用引發的。

I've tried looking at the docs for the execute-api Gateway, but the doc for Interfaces https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html points to https://docs .aws.amazon.com/apigateway/latest/developerguide/apigateway-private-apis.html並導致創建私有 API - 我不想要這個,我需要我的 API 公開。

I think I might be able to use a resource policy usually https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-resource-policies-examples.html But this is a websocket API so these instructions don'無法工作,因為他們沒有資源策略選項。

我在 AWS Slack 上問過這個問題,它不可能使用資源策略並且會增加很多網絡復雜性: https://awsdevelopers.slack.com/archives/C6LDW0BC3/p1570618074008500

來自該線程中的 AWS 開發人員:

嘿,當 Lambda 啟用 VPC 時,它受 VPC 和子網的所有路由規則的約束。

要訪問任何公共資源,您將需要 NAT GW、路由規則和 SG 設置以允許通信。

資源策略將不起作用。

我遇到了同樣的問題 - 本文檔解釋了它的原因( https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-vpc-connections/ )。

要修復它,您需要添加一個邊緣優化的自定義域名,這需要以下內容:

  • 將證書添加到 AWS ACM(您需要證書、私鑰和提供商根證書)到us-east-1 ACM 管理器(您必須將其添加到 us-east-1 才能在邊緣優化證書中看到它列表)。

  • 在 API 網關控制台 go 中自定義域名並新建一個。

  • 設置您的域名,將類型保留為邊緣優化並應用您剛剛創建的證書

  • 設置域后(大約需要 40 分鍾),您可以添加基本路徑映射以將流量發送到您的 api/stage。

暫無
暫無

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

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