Lak*_*kar 5 lambda amazon-web-services amazon-vpc aws-lambda serverless-framework
我正在使用无服务器框架来创建lambda.我创建了一个简单的Lambda函数,它从mongo实例查询并返回响应.最初,我使用publicIp创建了mongo实例,并使用publicIP使Lambda访问该实例.它运作良好.
现在,为了提高安全性,我将VPC配置添加到Lambda.这是我的serverless.yml:
functions:
graphql:
handler: handler.graphql
iamRoleStatements:
- Effect: Allow
Resource: "*"
Action:
- ec2:CreateNetworkInterface
- ec2:DescribeNetworkInterfaces
- ec2:DetachNetworkInterface
- ec2:DeleteNetworkInterface
- logs:CreateLogGroup
- logs:CreateLogStream
- logs:PutLogEvents
vpc:
securityGroupIds:
- sg-16f9e371
subnetIds:
- subnet-883a12fe
- subnet-3f7b1067
events:
- http:
path: graphql
method: post
integration: lambda
memorySize: 256
timeout: 10
cors: true
response:
headers:
Access-Control-Allow-Origin: "'*'"
Run Code Online (Sandbox Code Playgroud)
添加上面的配置,serverless deployment成功了.现在,当我尝试通过在邮递员中调用APIGateway URL来访问该函数时,我收到超时错误.这是邮递员的截图:

向Lambda 添加VPC配置是否通过公开调用它使其无法访问?我很迷惑.对此的任何想法都会很棒.
小智 6
在VPC内创建lambda函数时,lambda函数的弹性网络接口仅分配一个私有IP地址.但要连接到互联网上的资源,您需要一个公共IP地址.如果您的mongo实例是通过Internet访问的,那么您的lambda函数将无法连接到它.
您需要设置NAT网关才能访问lambda函数.转到以下链接并在"Internet访问Lambda函数"主题下查看以查看步骤.
http://docs.aws.amazon.com/lambda/latest/dg/vpc.html
您可以将 Lambda 附加到 VPC,以便通过专用网络传输数据库流量。否则,这是不必要的安全妥协,并且在 Internet 上速度较慢。
上一个答案是正确的,您现在有一个 ENI 附加到您的 Lambda 函数,这意味着它在您的 VPC 子网上有一个私有 IP 连接。我猜您的 MongoDB 实例也在您的 VPC 中,如果它在互联网上的其他地方,您应该将其保持为公开连接。
一些相关信息:
设计考虑
我用于类似场景的模式组合:
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
1221 次 |
| 最近记录: |