AWS Lambda 内部的 Parameter Store 请求超时
Posted
技术标签:
【中文标题】AWS Lambda 内部的 Parameter Store 请求超时【英文标题】:Parameter Store request timing out inside of AWS Lambda 【发布时间】:2019-02-07 14:05:18 【问题描述】:我正在尝试访问 AWS SSM 参数存储,就像 this article 一样。我已经在本地测试了 lambda 函数,它按预期工作。但是,当推送到 AWS 时,lambda 在尝试检索配置时失败;超时:
"errorMessage": "2018-09-02T04:55:49.096Z 71a5006a-ae6c-11e8-9322-313ba5e28048 Task timed out after 6.01 seconds"
我的serverless.yml
中添加了以下权限。我已尽可能不受限制地尝试找出错误所在。另外,参数只是一个字符串,所以不使用KMS。
service: pwaer-messages-service
provider:
name: aws
runtime: nodejs8.10
vpc:
securityGroupIds:
- sg-222f126f
subnetIds:
- subnet-756aef12
- subnet-130f8f3d
environment:
NODE_ENV: $opt:stage, 'dev'
iamRoleStatements:
- Effect: 'Allow'
Action: 'ssm:**'
Resource:
- 'Fn::Join':
- ':'
-
- 'arn:aws:ssm'
- Ref: 'AWS::Region'
- Ref: 'AWS::AccountId'
- 'parameter/*'
functions:
receiveText:
handler: dist/receive.handler
events:
- http:
path: sms/parse
method: post
我错过了什么?
【问题讨论】:
我不会将它连接到不正确的权限,因为在这种情况下,您会立即收到 IAM 错误。这是挂在哪个确切的函数调用上? 您是否尝试增加 lambda 超时,只是为了测试? @LechMigdal 我有。我刚刚发现删除 VPC 可以解决此问题,但我需要 VPC 才能访问 RDS。aws-sdk
不应该能够在不访问公共互联网的情况下访问 aws 资源吗?
啊,所以 lambda 无法访问公共互联网?尝试为 SSM 设置 VPC 端点 - docs.aws.amazon.com/systems-manager/latest/userguide/…
我很高兴,另外您可能想要编辑问题的标题以使其更通用/不指向 IAM 作为问题根本原因的东西:)
【参考方案1】:
由于提到 Lambda 无法访问公共互联网,要访问 AWS API,请设置VPC endpoint。
根据描述 - “VPC 端点使您能够将您的 VPC 私下连接到受支持的 AWS 服务和 VPC 端点服务”。
对于 AWS Systems Manager,请遵循此过程 - Setting Up VPC Endpoints for Systems Manager
【讨论】:
有没有办法在 serverless.yml 文件中做到这一点? @mikespitz_8 您只需要创建一个端点,您的所有 lambda 函数都将使用它。您可能不应该在无服务器文件中创建它,除非您的所有 lambda 函数都有一个无服务器文件(我建议不要这样做,而是使用 Terraform 创建端点)以上是关于AWS Lambda 内部的 Parameter Store 请求超时的主要内容,如果未能解决你的问题,请参考以下文章
如何在本地计算机上模拟 AWS Parameter Store 以进行 lambda 函数开发?
从 Lambda 函数内部访问 AWS CloudFormation ARN