我为测试目的创建了一些AWS Lambda函数(命名为test_function
之类的),然后在测试后发现这些函数可以在生产环境中使用。
是否可以重命名AWS Lambda函数?如何操作? 还是说我应该创建一个新的并复制粘贴源代码?
我为测试目的创建了一些AWS Lambda函数(命名为test_function
之类的),然后在测试后发现这些函数可以在生产环境中使用。
是否可以重命名AWS Lambda函数?如何操作? 还是说我应该创建一个新的并复制粘贴源代码?
你无法重命名该函数,唯一的选择是按照这里提供的建议或创建一个新函数并复制粘贴代码。
实际上,如果您能够重命名函数,这是一件好事情:因为与该函数相关联的策略仍然指向旧名称,否则它将停止工作,除非您手动编辑每个策略,或使它们通用(不建议这样做)。
然而,在软件开发方面的最佳实践是,建议您始终保持生产和测试(staging)分离,有效地复制您的环境。
这使您可以在安全环境中测试内容,如果您犯了错误,您不会丢失任何重要内容,并且确认您的新功能正常工作后,再在生产环境中复制它们。
因此,在您的情况下,您将拥有两个λ函数,一个称为“my-lambda-staging”,另一个称为“my-lambda-prod”。使用λ函数的环境变量适应当前环境,这样您就不需要进行重构!
我的解决方案是将函数导出,创建一个新的Lambda,然后将.zip文件上传到新的Lambda。
我对Lambda重命名的解决方案是,基本上使用boto3描述先前的Lambda信息来进行配置设置,并下载先前的Lambda函数代码以创建新的Lambda,但触发器不会被设置,因此您需要手动添加触发器。
from boto3.session import Session
from botocore.client import Config
from botocore.handlers import set_list_objects_encoding_type_url
import boto3
import pprint
import urllib3
pp = pprint.PrettyPrinter(indent=4)
session = Session(aws_access_key_id= {YOUR_ACCESS_KEY},
aws_secret_access_key= {YOUR_SECRET_KEY},
region_name= 'your_region')
PREV_FUNC_NAME = 'your_prev_function_name'
NEW_FUNC_NAME = 'your_new_function_name'
def prev_lambda_code(code_temp_path):
'''
download prev function code
'''
code_url = code_temp_path
http = urllib3.PoolManager()
response = http.request("GET", code_url)
if not 200 <= response.status < 300:
raise Exception(f'Failed to download function code: {response}')
return response.data
def rename_lambda_function(PREV_FUNC_NAME , NEW_FUNC_NAME):
'''
Copy previous lambda function and rename it
'''
lambda_client = session.client('lambda')
prev_func_info = lambda_client.get_function(FunctionName = PREV_FUNC_NAME)
if 'VpcConfig' in prev_func_info['Configuration']:
VpcConfig = {
'SubnetIds' : prev_func_info['Configuration']['VpcConfig']['SubnetIds'],
'SecurityGroupIds' : prev_func_info['Configuration']['VpcConfig']['SecurityGroupIds']
}
else:
VpcConfig = {}
if 'Environment' in prev_func_info['Configuration']:
Environment = prev_func_info['Configuration']['Environment']
else:
Environment = {}
response = client.create_function(
FunctionName = NEW_FUNC_NAME,
Runtime = prev_func_info['Configuration']['Runtime'],
Role = prev_func_info['Configuration']['Role'],
Handler = prev_func_info['Configuration']['Handler'],
Code = {
'ZipFile' : prev_lambda_code(prev_func_info['Code']['Location'])
},
Description = prev_func_info['Configuration']['Description'],
Timeout = prev_func_info['Configuration']['Timeout'],
MemorySize = prev_func_info['Configuration']['MemorySize'],
VpcConfig = VpcConfig,
Environment = Environment,
PackageType = prev_func_info['Configuration']['PackageType'],
TracingConfig = prev_func_info['Configuration']['TracingConfig'],
Layers = [Layer['Arn'] for Layer in prev_func_info['Configuration']['Layers']],
)
pp.pprint(response)
rename_lambda_function(PREV_FUNC_NAME , NEW_FUNC_NAME)