【问题标题】:How to add settings for specific Lambdas based on which repository they're being deployed from?如何根据部署的存储库为特定 Lambda 添加设置?
【发布时间】:2020-08-02 11:04:57
【问题描述】:

我正在尝试使用 bash 脚本更改 Lambda 的最大事件年龄设置。 Serverless 目前似乎不支持此设置,因此我计划在从 GitHub 部署后将其作为 bash 脚本进行。

方法:

我正在考虑在特定 CloudFormation 堆栈中查询 Lambda 的 aws。我猜当部署一个 repo 时,会创建一个新的 CF 堆栈。然后,我想遍历函数并使用put-function-event-invoke-config 更改每个 lambda 的最大事件年龄设置。

问题:

put-function-event-invoke-config 似乎需要一个函数名。在查询 CF 堆栈时,我得到的是 lambda ARN。我可以做一些字符串操作来获取 lambda 名称,但这似乎是一种混乱的方式。

我在正确的轨道上吗?有没有更好的办法?

编辑:

lambdas 已经存在并已部署。我认为我需要做的是运行某种脚本,该脚本能够遍历已从单个存储库部署的 lambda 列表(有多个存储库部署到同一环境)并更改最大事件-年龄设置,默认为 6 小时。

这是我使用 CLI 使用 aws cloudformation describe-stacks 查询 CFN 时的示例输出:

 {
        "StackId": "arn:aws:cloudformation:us-east-1:***:stack/my-repository-name/0sdg70gfs-6124-12ea-a910-93c4ahj3d140",
        "StackName": "my-repository-name",
        "Description": "The AWS CloudFormation template for this Serverless application",
        "CreationTime": "2019-11-18T22:05:44.246Z",
        "LastUpdatedTime": "2019-03-19T23:26:04.382Z",
        "RollbackConfiguration": {},
        "StackStatus": "UPDATE_COMPLETE",
        "DisableRollback": false,
        "NotificationARNs": [],
        "Capabilities": [
            "CAPABILITY_IAM",
            "CAPABILITY_NAMED_IAM"
        ],
        "Outputs": [
            {
                "OutputKey": "TestLambdaFunctionQualifiedArn",
                "OutputValue": "arn:aws:lambda:us-east-1:***:function:my-test-function:3",
                "Description": "Current Lambda function version"
            },

我知道可以运行这个命令来改变maximum-event-age:

$ aws lambda --region us-east-1 put-function-event-invoke-config --function-name my-test-function --maximum-event-age-in-seconds 3600

但它似乎需要--function-name,我在上面查询的 CFN 输出中没有看到它。

如何以编程方式遍历 CFN 堆栈中的所有函数并修改最大事件年龄的设置?

【问题讨论】:

  • CFN 确实返回 lambda 函数名称,使用 !Ref
  • 我刚刚阅读了文档,但我不明白如何使用 Ref.你能进一步解释一下吗?我对此很陌生
  • 很遗憾,我不确定您在做什么。你的描述很混乱。所以您正在使用 CloudFormation 创建您的 lambda?你能提供你使用的模板吗?要从模板中输出函数名称,请使用模板中的 Outputs 部分。
  • @Marcin 我已经更新了这个问题,希望能更清楚。我也不确定你所说的模板是什么意思。那是无服务器 yaml 文件吗?让我知道是否仍不清楚我正在尝试做什么。谢谢你这么有耐心。

标签: amazon-web-services aws-lambda amazon-cloudformation serverless-framework


【解决方案1】:

put-function-event-invoke-config 接受 ARN,这意味着可以根据堆栈名称查询 CFN,该堆栈名称与部署它的存储库相对应。

但是,我决定使用 list-functions 来查询 Lambda,然后使用 list-tags,因为我们的部署是由 repo 名称标记的。这似乎是比查询 CFN 更好的选择(CFN 输出 ARN 也包含一个后缀,这意味着 put-function-event-invoke-config 不会在它们上运行)。

然后我可以通过 bash 中的 for 循环运行文本输出,并使用 put-function-event-invoke-config 添加最大事件年龄设置。

【讨论】:

    猜你喜欢
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 2021-11-10
    • 1970-01-01
    • 2011-08-17
    相关资源
    最近更新 更多