这个简短的帖子将告诉你如何在几个不同的例子中用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