【问题标题】:Using S3 upload to trigger Lambda function to create EBS volume, which would create EBS volume based on S3 upload size (using boto3)使用 S3 上传触发 Lambda 函数创建 EBS 卷,它将根据 S3 上传大小创建 EBS 卷(使用 boto3)
【发布时间】:2020-07-04 10:01:39
【问题描述】:

目前,我正在使用 S3 触发器在文件放入 S3 后启动 lambda 函数。

我的意图是从 S3 上传中获取大小,并将该值传递到创建 EBS 卷的自动化函数中的 Size 字段中。

我正在尝试根据文件大小创建一个 EBS 卷。然后将该文件复制到 EBS 卷,该卷将附加到一个 EC2 实例,该实例随后将处理该文件。我正在使用 EBS 卷,因为上传到主 S3 存储桶的文件是需要解压缩和处理的压缩文件。

有没有办法根据上传的原始文件创建 EBS 卷 Size

response = client.create_volume(
    AvailabilityZone='string',
    Encrypted=True|False,
    Iops=123,
    KmsKeyId='string',
    OutpostArn='string',
    Size=123,
    SnapshotId='string',
    VolumeType='standard'|'io1'|'gp2'|'sc1'|'st1',
    DryRun=True|False,
    TagSpecifications=[
        {
            'ResourceType': 'client-vpn-endpoint'|'customer-gateway'|'dedicated-host'|'dhcp-options'|'elastic-ip'|'fleet'|'fpga-image'|'host-reservation'|'image'|'instance'|'internet-gateway'|'key-pair'|'launch-template'|'natgateway'|'network-acl'|'network-interface'|'placement-group'|'reserved-instances'|'route-table'|'security-group'|'snapshot'|'spot-fleet-request'|'spot-instances-request'|'subnet'|'traffic-mirror-filter'|'traffic-mirror-session'|'traffic-mirror-target'|'transit-gateway'|'transit-gateway-attachment'|'transit-gateway-multicast-domain'|'transit-gateway-route-table'|'volume'|'vpc'|'vpc-peering-connection'|'vpn-connection'|'vpn-gateway'|'vpc-flow-log',
            'Tags': [
                {
                    'Key': 'string',
                    'Value': 'string'
                },
            ]
        },
    ],
    MultiAttachEnabled=True|False
)

【问题讨论】:

  • 您希望根据一个文件的大小创建一个 Amazon EBS 卷似乎很奇怪。你能解释一下你想要这样做的更广泛的用例吗?我也很困惑,您的问题首先是引用到 Amazon S3 的上传并且(我想)想要获取该上传的大小,但随后转向询问 Amazon EBS(AWS Lambda 函数不使用它)。您能否编辑您的问题以澄清您实际想要完成的任务?然后,我们将能够更好地为您提供帮助。
  • Lambda 函数无法将文件复制到 EBS 卷中,因此我认为您需要重新考虑整个事情。我建议拥有一个具有相当数量 EBS 空间的 EC2 实例,该实例从 SQS 队列中读取它需要处理的文件。当新文件到达时,S3 可以向队列发送消息。如果您在 EC2 上进行处理,Lambda 似乎根本不适合这里。

标签: amazon-web-services amazon-s3 aws-lambda boto3 amazon-ebs


【解决方案1】:

您的目标似乎是让 Amazon EC2 实例处理已上传到 Amazon S3 的文件。

首先,无需通过 Amazon EBS 卷发送文件。相反,运行在 EC2 实例上的软件可以简单地检索来自 S3。

主要的架构决策是上传文件后如何在 EC2 实例上触发进程

我会推荐这种架构:

  • 创建 Amazon SQS 队列
  • 配置 Amazon S3 事件以在上传文件时将消息推送到 SQS 队列(这将包括存储桶名称和文件名)
  • 在 Amazon EC2 实例上运行一个进程,该进程定期检查 SQS 队列(例如每分钟,或根据您的要求增加/减少频率)
  • 如果找到消息,应用程序应该:
    • 下载从 Amazon S3 中的文件
    • 处理文件
    • 删除本地文件
    • 可选:从 S3 中删除文件

或者,如果可能,您可以在不使用 Amazon EC2 实例的情况下在 AWS Lambda 中处理文件。但是,您没有在问题中提供足够的信息来确定这是否可行。

【讨论】:

    猜你喜欢
    • 2020-07-20
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多