如何根据从哪个存储库部署特定的 Lambdas 添加设置?

How to add settings for specific Lambdas based on which repository they're being deployed from?

我正在尝试使用 bash 脚本更改 Lambda 的最大事件年龄设置。无服务器目前似乎不支持此设置,因此我计划在从 GitHub.

部署后将其作为 bash 脚本执行

方法:

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

问题:

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

我做的对吗?有没有更好的方法?

编辑:

lambda 已经存在并已部署。我想我需要做的是 运行 某种脚本,它能够遍历从单个存储库部署的 lambda 列表(有多个存储库部署到同一环境)并更改maximum-event-age 设置,默认值为 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"
            },

我知道 运行 这个命令可以改变最大事件年龄:

$ 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 堆栈中的所有函数并修改 maximum-event-age 的设置?

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

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

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