Amazon-Web-Services
儘管有正確的 IGW、NAT 和路由表條目,AWS lambda 還是無法訪問網際網路?
我正在嘗試使用 AWS Lambda,使用一小段程式碼可以從 S3 獲取一些文件。不幸的是,當我將 Lambda 函式放入 VPC 時,我什至無法訪問網際網路資源,儘管我相信 VPC 配置正確。
我有以下程式碼範例,它展示了我正在嘗試做的事情:由於網路問題,urlopen 呼叫只是保持超時(如果我將我的 Lambda 設置在 VPC 之外,它就可以正常工作)。
import json def lambda_handler(event, context): # TODO implement import urllib.request contents = urllib.request.urlopen("https://api.ipify.org?format=json").read() return { "statusCode": 200, "body": json.dumps( str(contents) ) }
我已經收集了我的 VPC 等配置,有人可能會發現它周圍的任何問題嗎?我相信我已經避免了基本問題,所以無法訪問網際網路資源讓我非常困惑。
VPC: Name: S3 CONNECTION TEST VPC ID: vpc-09025133f1b68a1cc State: available IPv4 CIDR: 10.0.0.0/24 Subnet: Name: S3-connection-check-subnet Subnet ID: subnet-0e2904283f7b644e3 State: available VPC: vpc-09025133f1b68a1cc | S3 CONNECTION TEST Routing Table: rtb-0e0d8951583d0c5ca | S3 CONNECTIVITY check Internet Gateway: Name: S3 connection test ID: igw-07aabbe0d979d0ca3 State: attached VPC: vpc-09025133f1b68a1cc | S3 CONNECTION TEST NAT Gateway: Name: S3 connection test NAT ID: nat-06d25cfd034108851 Status: available Status Message: - Elastic IP Address: (some valid public IP address) Private IP address: 10.0.0.203 Network interface: eni-0fefa7310a1bcf050 VPC: vpc-09025133f1b68a1cc | S3 CONNECTION TEST Subnet: subnet-0e2904283f7b644e3 | S3-connection-check-subnet Routing Table: Name: S3 CONNECTIVITY check Route Table ID: rtb-0e0d8951583d0c5ca Explicit association: 1 Subnet Main: Yes VPC: vpc-09025133f1b68a1cc | S3 CONNECTION TEST Routes: Route 1: Destination: 10.0.0.0/24 Target: local Status: Active Propagated: No Route 2: Destination: 0.0.0.0/0 Target: nat-06d25cfd034108851 Status: Active Propagated: No Lambda function: Name: Test-S3-Read VPC: vpc-09025133f1b68a1cc Subnets: subnet-0e2904283f7b644e3 (10.0.0.0/24) | xx-xxxx-xx S3-connection-check-subnet Security Groups: sg-0e5ee380770e6e4cd (Allow All) | Allow All Security Groups: Name: sg-0e5ee380770e6e4cd (Allow All) | Allow All Inbound rules: Rule 1: Type: ALL Traffic Protocol: ALL Port Range: All Source: 0.0.0.0/0 Outbound rules: Rule 1: Type: ALL Traffic Protocol: ALL Port Range: ALL Destination: 0.0.0.0/0
根據邁克爾的回答,我終於能夠弄清楚這一點。(非常感謝他! :))
由於我一直在努力解決這個問題,我正在捕捉最終的解決方案,以防萬一有人遇到同樣的問題。
我最終使用了三個
Subnets
、一個Internet Gateway
、一個NAT Gateway
和兩個不同的Routing tables
(除了 VPC 的主路由表):
一個僅使用專用路由表託管 NAT 網關的小型子網
它的路由表包含兩個條目:
- VPC 特定流量(在我的情況下
10.0.0.0/24
)被路由到local
- 其他流量 (
0.0.0.0/0
) 被路由到Internet Gateway
使用另一個路由表託管 Lambda 服務的兩個子網
該路由表包含兩個條目:
- VPC 特定流量(在我的情況下
10.0.0.0/24
)被路由到local
- 其他流量 (
0.0.0.0/0
) 被路由到NAT Gateway
實際上,AWS 文件對此有很好的解釋,查看他們的範例設置圖對我有很大幫助。