如何更改 lambda 的默认参数值?

Posted

技术标签:

【中文标题】如何更改 lambda 的默认参数值?【英文标题】:How can I change default parameter values for lambda? 【发布时间】:2021-12-19 02:18:13 【问题描述】:

我正在使用 AWS lambda,但无法更改 lambda 中使用的默认参数。有解决办法吗?

设置

Lambda "iAmInvoked" 由 cloudformation 中的堆栈创建,该堆栈设置了默认参数值(我设置这些默认值的想法是,如果调用程序不提供参数值,则会使用这些默认值需要并且可以被覆盖)。我使用名为“iWillInvoke”的 lambda 异步调用此 iAmInvoked lambda,并提供包含 iAmInvoked 使用的参数的新值的有效负载> 而不是它的默认值。

iWillInvoke 代码

import json
import boto3

client = boto3.client('lambda')

def lambda_handler(event, context):
    payloadForLambda =  'parameter1' : 'abc,def' , 'parameter2' : '123456' , 'parameter3' : '987654' 

    client.invoke(
        FunctionName='arn:aws:lambda:us-west-2:123456789:function:iAmInvoked',
        InvocationType='Event',
        Payload=json.dumps(payloadForLambda)
        )

iAmInvoked 代码

AWSTemplateFormatVersion: 2010-09-09
Description: |
  "Creates required IAM roles to give permission to get and put SSM parameters and creates lambda function that shares the parameter(s)."
Parameters:
  parameter1:
    Type: String
    Default: parameterValueThatShallBeOverridden1
  parameter2:
    Type: String
    Default: parameterValueThatShallBeOverridden2
  parameter3:
    Type: String
    Default: parameterValueThatShallBeOverridden3

问题/问题:

无论我在 iWillInvoke 的负载中提供什么,iAmInvoked 都使用其默认值。有没有办法可以覆盖默认值?

【问题讨论】:

您好,感谢您回来查看。你说得对。问题不在于 cloudformation 模板。我在 Lambda 的 python 代码中使用环境变量而不是事件变量。解决这个问题解决了这个问题。谢谢! 【参考方案1】:

iAmInvoked Code 不是你的函数代码,也不是它的参数。它的 CloudFormation 模板和模板的参数。使用client.invoke 不会以任何形式影响CloudFormation 模板。

要在 boto3 中使用 CloudFormation,有 cloudformation SDK。

【讨论】:

你说得对,它是创建 lambda 的 cloudformation 模板的一部分。我没有添加整个模板,因为它与问题无关。我的问题是,cloudformation 模板 (iAmInvoked) 的生成 lambda 使用默认参数,即使 iWillInvoke 正在为有效负载中的参数发送不同的值。 @PraveenBuilds 正如我所解释的,您的 lambda 调用与您的 cloudformation 模板无关。这是两种不同的资源。

以上是关于如何更改 lambda 的默认参数值?的主要内容,如果未能解决你的问题,请参考以下文章

带有 lambda 作为每个实例化的唯一默认参数的模板

如何在子类中添加命名参数或在 Ruby 2.2 中更改它们的默认值?

Ruby:如何获取可选 proc 参数的默认值

如何设置默认日期参数以传递给 JavaScript 中的 ajax get 调用,在选择日期值时它应该更改

ArgParse Python 模块:更改继承参数的默认参数值

将默认参数定义为全局变量