Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 使用S3上传触发Lambda函数创建EBS卷,该函数将根据S3上传大小创建EBS卷(使用boto3)_Amazon Web Services_Amazon S3_Aws Lambda_Boto3_Amazon Ebs - Fatal编程技术网

Amazon web services 使用S3上传触发Lambda函数创建EBS卷,该函数将根据S3上传大小创建EBS卷(使用boto3)

Amazon web services 使用S3上传触发Lambda函数创建EBS卷,该函数将根据S3上传大小创建EBS卷(使用boto3),amazon-web-services,amazon-s3,aws-lambda,boto3,amazon-ebs,Amazon Web Services,Amazon S3,Aws Lambda,Boto3,Amazon Ebs,目前,我正在使用S3触发器在文件放入S3后启动lambda函数 我的目的是从S3上传中获取大小,并将该值传递到创建EBS卷的自动函数中的size字段中 然后,我尝试根据文件大小创建一个EBS卷。然后将文件复制到EBS卷,该卷将连接到EC2实例,然后EC2实例将处理该文件。我使用EBS卷是因为上传到主S3存储桶的文件是需要解压缩和处理的压缩文件 是否有方法根据上载的原始文件创建EBS卷大小 response = client.create_volume( AvailabilityZone=

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

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

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

是否有方法根据上载的原始文件创建EBS卷
大小

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
)

您的目标似乎是让AmazonEC2实例处理已上载到AmazonS3的文件

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

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

我推荐这种架构:

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

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

最奇怪的是,您希望根据一个文件的大小创建一个Amazon EBS卷。你能解释一下你想要做这件事的更广泛的用例吗?我还感到困惑的是,您的问题是从引用到AmazonS3的上传开始的,并且(我猜)希望获得上传的大小,但随后转向询问AmazonEBS(AWS Lambda函数不使用)。您是否可以编辑您的问题,以澄清您实际想要实现的目标?这听起来像是一个XY问题(),Lambda函数无法将文件复制到EBS卷,因此我认为您需要重新考虑整个问题。我建议使用一个EC2实例,该实例具有相当大的EBS空间,可以从SQS队列中读取需要处理的文件。S3可以在新文件到达时向队列发送消息。如果您在EC2上进行处理,Lambda似乎根本不适合这里。