使用Boto3 Python代码创建AWS Lambda函数?

7

我需要使用从头开始选项创建一个Lambda函数。我在AWS应用程序中看到了3个选项。我查阅了AWS Boto3文档,但无法找到选择这3种方式的方法。

我尝试查找Boto3文档。我的代码在S3键处失败了。如何使用Boto3代码创建一个简单的Lambda函数!

我的代码:

  lambda_Client = boto3.client('lambda', aws_access_key_id=accessKey,
                       aws_secret_access_key=secretKey,region_name=region)
  response =lambda_Client.create_function(
            Code={
                'S3Bucket': 's3bucket',
                'S3Key': 'function.zip', #how can i create or fetch this S3Key
            },
            Description='Process image objects from Amazon S3.',
            FunctionName='function_name',
            Handler='index.handler',
            Publish=True,
            Role='arn:aws:iam::123456789012:role/lambda-role',
            Runtime='nodejs12.x',
        )

        print(response)

错误: 获取S3密钥无效。
如何创建s3密钥或创建没有任何依赖项的AWS Lambda函数的简单方法。请指导我!
2个回答

7

我尝试使用zip文件创建lambda函数时遇到了很多问题,但最终我做到了,并且成功了。

这段代码将从ZIP文件创建一个lambda函数:

首先,我们声明zip文件的路径,然后在aws_file函数中将其转换为字节,以便亚马逊可以读取它,最后lambda_creator将上传并使用给定的参数创建lambda函数。

ZIPNAME = "code\\my-deployment-package.zip"


def aws_file():
    with open(ZIPNAME, 'rb') as file_data:
        bytes_content = file_data.read()
    return bytes_content


def lambda_creator(name):
    lambda_client = boto3.client('lambda', aws_access_key_id=ACCESSKEY,
                                 aws_secret_access_key=SECRETKEY, region_name=REGION)
    response = lambda_client.create_function(
        Code={
            'ZipFile': aws_file()
        },
        Description='Hello World Test.',
        FunctionName='Test-lambda',
        Handler='lambda_function.lambda_handler',
        Publish=True,
        Role='arn:aws:iam:: 123456789012:role/lambda-rol',
        Runtime='python3.8',
    )
    return response

请解释您的代码是做什么的以及它如何实现。 - M-Chen-3

3

这个密钥将来自于上传一个对象到Amazon S3,您可以通过调用Boto3 SDK中的put_object方法以编程方式完成此操作。

以下是如何使用的大致示例:

import zipfile
archive = zipfile.ZipFile('function.zip', 'w')
zip.write('index.js', 'path/on/disk/index.js')
.......

client.put_object(Body=archive, Bucket='bucket-name', Key='function.zip')

lambda_Client = boto3.client('lambda', aws_access_key_id=accessKey,
                       aws_secret_access_key=secretKey,region_name=region)
response = lambda_Client.create_function(
            Code={
                'S3Bucket': 'bucket-name',
                'S3Key': 'function.zip', #how can i create or fetch this S3Key
            },
            Description='Process image objects from Amazon S3.',
            FunctionName='function_name',
            Handler='index.handler',
            Publish=True,
            Role='arn:aws:iam::123456789012:role/lambda-role',
            Runtime='nodejs12.x',
        )


你需要在上传时指定密钥,确保在上传时将代码进行压缩。或者使用 ZipFile 属性,从 Boto3 文档 中可以看到以下内容。

部署包的 base64 编码内容。AWS SDK 和 AWS CLI 客户端会自动为您处理编码。


我已经添加了一个简单的示例,应该能够说明如何实现它。 - Chris Williams
1
你指定的Lambda角色只需要在其策略中添加xray:PutTraceSegments权限即可。或者将AWSXrayWriteOnlyAccess托管策略添加到您的角色中 :) - Chris Williams
1
好的,谢谢。我正在使用Python 3.7.3版本。以下是代码: import zipfile archive = zipfile.ZipFile('function.zip', 'w') zip.write('index.js', 'path/on/disk/index.js')但是我遇到了一个错误:AttributeError: type object 'zip' has no attribute 'write'。在点击import zip时,它可以正确地进入库,但是write没有被突出显示。 - Mia
我只需要上传一个zip文件而无需编写代码,我该怎么做? - Mia
1
哎呀,应该是archive.write - Chris Williams

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接