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

aws lambda函数调用内部负载均衡器

AWS API Gateway - Lambda - 内部服务器错误

在AWS Lambda中获得“内部流位置意外更改”

AWS API Gateway - Lambda 代理(集成请求) - 内部服务器错误