Amazon web services 如何复制或复制aws lambda函数

Amazon web services 如何复制或复制aws lambda函数,amazon-web-services,aws-lambda,Amazon Web Services,Aws Lambda,我有aws lambda函数和api网关触发器。我想用相同的触发器创建相同的lambda函数。我怎么做?创建版本时,我看到api网关没有复制,无法更改代码。没有提供复制/克隆Lambda函数和api网关配置的功能。您需要从头开始创建一个新函数 如果您设想将来必须复制函数,那么可以使用它来创建Lambda函数。以后可以轻松部署更多功能。使用Lambda函数复制其他功能 不幸的是,AWS web控制台和命令行工具都没有 功能复制服务中的功能 这是一个明显的疏忽,使得看似简单的事情很难做到 例如,从“

我有aws lambda函数和api网关触发器。我想用相同的触发器创建相同的lambda函数。我怎么做?创建版本时,我看到api网关没有复制,无法更改代码。

没有提供复制/克隆Lambda函数和api网关配置的功能。您需要从头开始创建一个新函数

如果您设想将来必须复制函数,那么可以使用它来创建Lambda函数。以后可以轻松部署更多功能。

使用Lambda函数复制其他功能 不幸的是,AWS web控制台和命令行工具都没有 功能复制服务中的功能

这是一个明显的疏忽,使得看似简单的事情很难做到 例如,从“模板”函数创建新函数或重命名 通过使用 不同的名字

我发现做这项工作最简单的方法是创建一个Lambda函数 复制其他功能

do\u duplicate\u function.py
Python 3函数 下面的代码可以部署到Lambda,也可以在本地运行,以复制中的函数 你的AWS帐户

要使用它,请在AWS控制台中配置测试事件或以其他方式调用 事件数据至少包含以下内容的函数:

{
    "SourceFunctionName": "function_name_to_copy",
    "FunctionName": "function_name_to_create"
}
其中,
SourceFunctionName
是要复制的函数的名称,并且
FunctionName
是要创建的函数的名称

在函数代码的顶部有更多关于如何 使用它并部署它,请参阅代码了解详细信息

注意:我已将此单独写在您还可以获得。在那里查看最新版本。我也把所有的东西都放在这里,所以这个答案是完整的

“”“
这是一个Python3实用程序函数,用于创建另一个应用程序的副本
此AWS帐户中的函数具有相同的配置设置和环境
变量等。
简而言之,这完成了应该由“复制”特性处理的工作
AWS控制台和CLI中缺少此功能。
AWS中的使用
------------
要使用此功能,请在AWS控制台或其他地方配置测试事件
使用至少包含以下内容的事件数据调用函数:
{
“SourceFunctionName”:“函数名到副本”,
“函数名”:“要创建的函数名”
}
其中,`SourceFunctionName`是要复制的函数的名称,并且
`FunctionName`是要创建的函数的名称。
您可以通过以下方式覆盖新功能副本的配置设置:
事件数据中的额外可选变量,如'Description'、'Timeout',
`MemorySize`等,使您提供的值覆盖
源函数的配置。
有关详细信息,请参见boto3`create_function()`方法的参数:
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/lambda.html#Lambda.Client.create_function
本地使用
-------------
您可以在本地运行此函数,而无需将其部署到AWS Lambda
只要您满足以下要求:
-在安装了'boto3'的python3 virtualenv中运行它
-使用设置AWS CLI工具的AWS配置文件和凭据
有足够的权限执行此工作。
将这些设置到位后,按如下方式运行函数:
AWS_PROFILE=您的AWS配置文件\
python3 do_duplicate_function.py\
“{”SourceFunctionName:“fn_to_copy”,“FunctionName:“fn_to_create”}”
部署到AWS
-----------------
使用Python3.8运行时部署此函数(它可能在早期版本中可用)
Python 3的版本,但尚未测试)。
此函数必须具有足够的权限才能获取和创建Lambda
函数和将复制角色传递给新函数。若要允许,请应用
类似于以下权限策略文档的内容已部署到
功能:
{
“版本”:“2012-10-17”,
“声明”:[
{
“效果”:“允许”,
“行动”:[
“lambda:CreateFunction”,
“lambda:ListFunctions”,
“lambda:GetFunction”,
“iam:GetRole”,
“iam:密码角色”
],
“资源”:“*”
}
]
}
作者:詹姆斯·默蒂(https://github.com/jmurty)执照:麻省理工学院
"""
导入操作系统
导入json
导入系统
进口boto3
导入urllib3
def lambda_处理程序(事件、上下文):
#可选的envvar,仅用于在本地运行函数
aws_profile=os.environ.get(“aws_profile”)
如果aws_配置文件:
session=boto3.session(profile\u name=aws\u profile)
lambda_client=session.client(“lambda”)
其他:
lambda_client=boto3.client(“lambda”)
#获取源函数元数据
函数\u data=lambda\u client.get\u函数(
FunctionName=event.pop(“SourceFunctionName”),
限定符=event.pop(“SourceFunctionVersion”,“$LATEST”),
)
函数\ u data.pop(“ResponseMetadata”)
#从临时URL下载函数代码
code\u url=function\u data.pop(“code”)[“Location”]
http=urllib3.PoolManager()
response=http.request(“GET”,code\u url)

如果编辑lambda函数时不是200,则可以转到操作>导出函数>下载部署包

这将下载函数的.zip文件

然后创建一个新的Lambda,并转到“上传自”(代码编辑器右上方)>“.zip文件”


这复制了代码和npm模块等。。。但这不是该功能的触发器或权限。

这是谷歌云平台的另一个例子。AWS上的一些事情看起来真的很可笑——为什么没有重命名功能?一旦开始使用SAM+CloudFormation部署、管理和调试Lambda函数,您将