是否可以重命名AWS Lambda函数?

时间:2016-04-18 02:23:43

标签: amazon-web-services rename aws-lambda

我在AWS上创建了一些Lambda函数用于测试目的(命名为test_function某些东西),然后在测试后我发现这些函数可用于prod env。

是否可以重命名Lambda函数?如何? 或者我应该创建一个新的并复制粘贴源代码?

4 个答案:

答案 0 :(得分:56)

最接近重命名lambda函数的方法是使用别名,这是一种命名特定版本lambda的方法。但是,创建函数的实际名称会在设置后设置。如果要重命名它,只需创建一个新函数并将完全相同的代码复制到其中。这样做不会花费你额外的费用(因为你只收取执行时间),所以你什么都不会失去。

有关如何命名lambda函数版本的参考,请查看文档here

答案 1 :(得分:2)

您不能重命名该功能,唯一的选择是遵循此处已提供的建议或创建一个新建议并复制粘贴代码。

实际上,您不能重命名是一件好事:如果可以,它将停止工作,因为附加到该功能的策略仍指向旧名称,除非您要手动编辑其中的每一个,或将其设为通用(不明智)。

但是,作为软件开发方面的最佳实践,我建议您始终将生产和测试(阶段)分开,以有效地复制环境。

这使您能够在安全的环境中进行测试,在这种情况下,如果您犯了一个错误,则不会失去任何重要的东西,并且当您确认新功能有效时,可以在生产环境中复制它们。

因此,在您的情况下,您将有两个lambda,一个称为“ my-lambda-staging”,另一个称为“ my-lambda-prod”。使用lambda的ENV变量来适应当前环境,因此您无需进行重构!

答案 2 :(得分:0)

我的解决方案是导出函数,创建一个新的Lambda,然后将.zip文件上传到新的Lambda。

答案 3 :(得分:0)

我的 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)