我想在 Lambda Function 上部署我在 GitHub 上共享的项目。为此,我将 AWS CDK 添加到项目中。一切运行良好,程序由 API 网关执行。但是,应用程序无法连接到 S3。这是错误详细信息:
START RequestId: 800fb738-cd7f-4368-8757-46563c802cfd Version: $LATEST
2024/03/12 21:03:25 Processing request data for user Berkan with test_match.dem file.
2024/03/12 21:04:57 Error downloading file: operation error S3: GetObject, exceeded maximum number of attempts, 3, https response error StatusCode: 0, RequestID: , HostID: , request send failed, Get "https://csense-demos.s3.eu-central-1.amazonaws.com/test_match.dem?x-id=GetObject": dial tcp 52.219.47.148:443: i/o timeout
2024/03/12 21:04:57 unexpected EOF
2024/03/12 21:04:57 unexpected EOF
RequestId: 800fb738-cd7f-4368-8757-46563c802cfd Error: Runtime exited with error: exit status 1
Runtime.ExitError
END RequestId: 800fb738-cd7f-4368-8757-46563c802cfd
REPORT RequestId: 800fb738-cd7f-4368-8757-46563c802cfd Duration: 91709.49 ms Billed Duration: 91710 ms Memory Size: 128 MB Max Memory Used: 48 MB Init Duration: 176.00 ms
起初,我认为这与 Lambda Function 所在的 VPC 及其公有子网有关(我附上了截图),但我认为一切都是应该的。当我使用 AWS Toolkit 在本地计算机上尝试 Lambda Function 时,一切正常;它连接到同一个 S3 并根据需要执行操作。
您可以在GitHub上直接看到Stack。
此外,您还可以在这里找到通过Lambda函数执行的代码。
在 VPC 内部署 lambda 时,我们需要弄清楚如下的路由方面,
如果您的 lambda 不访问 VPC 内的任何资源,则无需使用 VPC 配置进行部署,或者 VPC 内的任何资源需要调用 Lambda,则您可以为 Lambda 设置 VPC 接口端点。
希望这会有所帮助,如果没有添加 SG-Outbound/NACL-Inbound-Outbound/路由表条目,您也可以检查 lambda ENI 上的 VPC 流日志是否有任何被拒绝的流量。