我需要将压缩文件从一个AWS S3文件夹复制到另一个文件夹,并希望将其作为预定的AWS Glue作业。我找不到这么简单的任务的例子。如果你知道答案,请帮忙。可能是AWS Lambda或其他AWS工具的答案。
非常感谢!
答案 0 :(得分:2)
我认为你可以用Glue做到这一点,但是使用CLI会不会更容易?
您可以执行以下操作:
aws s3 sync s3://bucket_1 s3://bucket_2
答案 1 :(得分:1)
你可以用胶水做到这一点,但它不适合这项工作。
更简单的方法是让S3创建对象事件触发Lambda作业。甚至还有一篇关于AWS Docs的教程(几乎)正在做这件事。
http://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html
答案 2 :(得分:1)
我们最终使用Databricks来做所有事情。
胶水尚未准备好。它返回没有意义的错误消息。我们创建了门票并等了五天仍然没有回复。
答案 3 :(得分:1)
通过S3 API,您可以执行COPY命令(实际上是带有标头以指示源URL的PUT)以在存储桶内或存储桶之间复制对象。它曾经经常伪造rename(),但您可以自己发起呼叫,而不管任何事情。
无需D / L任何数据;在同一S3区域内,副本的带宽约为6-10 MB / s。
AWS CLI cp command可以执行此操作。
答案 4 :(得分:1)
您可以做到这一点,有可能是一个理由使用AWS胶水:如果您链接胶作业和glue_job_#2
被触发的顺利完成glue_job_#1
。
下面的简单Python脚本使用source
库将文件从一个S3文件夹(target
)移到另一个文件夹(boto3
),并有选择地删除{{ 1}}目录。
source
Reference: Boto3 Docs on S3 Client Copy
注意:我将使用import boto3
bucketname = "my-unique-bucket-name"
s3 = boto3.resource('s3')
my_bucket = s3.Bucket(bucketname)
source = "path/to/folder1"
target = "path/to/folder2"
for obj in my_bucket.objects.filter(Prefix=source):
source_filename = (obj.key).split('/')[-1]
copy_source = {
'Bucket': bucketname,
'Key': obj.key
}
target_filename = "{}/{}".format(target, source_filename)
s3.meta.client.copy(copy_source, bucketname, target_filename)
# Uncomment the line below if you wish the delete the original source file
# s3.Object(bucketname, obj.key).delete()
来生成f-strings
,但是> = Python3.6仅支持f字符串,并且我相信默认的AWS Glue Python解释器仍为2.7。
答案 5 :(得分:0)
您可以通过将zip文件从s3下载到tmp/
目录,然后将其重新上传到s3来实现。
s3 = boto3.resource('s3')
s3.Bucket(bucket_name).download_file(DATA_DIR+file,'tmp/'+file)
s3.meta.client.upload_file('tmp/'+file,bucket_name,TARGET_DIR+file)
答案 6 :(得分:0)
现在,您可以用胶水编写python shell作业来做到这一点。只需在粘胶作业创建向导中选择Type
即可。您可以在其中运行普通的python脚本。
答案 7 :(得分:0)
不需要任何内容。我相信AWS数据管道是最佳选择。只需使用命令行选项即可。预定运行也是可能的。我已经尝试过了工作成功。