如何用aws cliff复制文件到s3(附实例)

359 阅读2分钟

这个简短的帖子将告诉你如何在几个不同的例子中用aws cli复制文件或文件。它将涵盖几个不同的例子,例如:

  • 复制文件到本地
  • 从本地复制文件到aws ec2实例
  • aws lambda python复制s3文件

如果你需要在Linux Mint或Ubuntu上用S3客户端安装和下载文件,你可以查看这篇文章。如何在Linux Min上使用AWS CLI从S3 Bucket下载文件

第一步:用aws cli把文件复制到本地

一旦S3客户端安装完毕并正确配置(查看上面的链接)。你可以通过命令将文件从S3桶复制到你的本地机器:

aws s3 cp <S3 URI> <Local Path>

并举例说明如下

aws s3 cp s3://some-space_bucket/my-file.txt .

上面的命令将复制位于当前工作文件夹的bucket -s3://some-space_bucket/my-file.txt 上的文件。

第二步:用不同的AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY复制文件到本地

如果你想从一个有不同的AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY的桶中获取文件,怎么办?而且你不喜欢把它们存储在你的机器上。

在这种情况下,你可以使用下一个命令来复制带有自定义密钥的文件:

AWS_ACCESS_KEY_ID=xxx AWS_SECRET_ACCESS_KEY=xxx aws s3 cp s3://some-space_bucket/my-file.txt .

第三步:从本地复制文件到S3桶

如果你需要从你的本地机器复制一个本地文件到aws实例,那么你可以使用下一个语法:

aws s3 cp <Local Path> <S3 URI>

或作为例子:

aws s3 cp ./test.txt s3://some-space_bucket/my-file.txt

这将把本地文件test.txt ,从当前工作文件夹复制到桶的路径。s3://some-space_bucket/my-file.txt

第四步:Python aws lambda复制S3文件

如果你需要创建一个aws lambda来复制S3桶中的文件,你可以查看。使用Amazon S3触发器来调用Lambda函数

复制文件的Python lambda是:

import json
import urllib.parse
import boto3

print('Loading function')

s3 = boto3.client('s3')


def lambda_handler(event, context):
    #print("Received event: " + json.dumps(event, indent=2))

    # Get the object from the event and show its content type
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8')
    try:
        response = s3.get_object(Bucket=bucket, Key=key)
        print("CONTENT TYPE: " + response['ContentType'])
        return response['ContentType']
    except Exception as e:
        print(e)
        print('Error getting object {} from bucket {}. Make sure they exist and your bucket is in the same region as this function.'.format(key, bucket))
        raise e
              

第五步:Python aws lambda将S3文件从一个桶复制到另一个桶。

如果你需要用aws lambda将文件从一个桶复制到另一个桶,你可以使用下一个Python片段:

import boto3
import json
s3 = boto3.resource('s3')


def lambda_handler(event, context):
    bucket = s3.Bucket('some-space_bucket-1')
    dest_bucket = s3.Bucket('some-space_bucket-2')
    print(bucket)
    print(dest_bucket)

    for obj in bucket.objects():
        dest_key = obj.key
        print(dest_key)
        s3.Object(dest_bucket.name, dest_key).copy_from(CopySource = {'Bucket': obj.bucket_name, 'Key': obj.key})

这将把所有的文件从some-space_bucket-1 复制到bucket。some-space_bucket-2