ITPub博客

首页 > 数据库 > 数据库开发技术 > AWS Lambda专题四:如何利用Lambda重命名S3文件

AWS Lambda专题四:如何利用Lambda重命名S3文件

原创 数据库开发技术 作者:招牌鸡蛋面 时间:2020-05-21 07:30:00 0 删除 编辑


话说我们在上一篇已经搞定了如何获取S3 bucket中的文件名了,那么接下来的问题就是:当有新文件上传到指定的S3 bucket中时,通过lambda function如何重命名呢?


我查了一下,boto3里没有rename这个功能,所以我们就先copy这个文件,并以新名字命名,然后把原来的文件删除,同样可以实现文件重命名。具体代码如下:

import jsonimport boto3
s3 = boto3.resource('s3')
def lambda_handler(event, context): print(event) # print(event.get('Records'))    records_content = event.get('Records')    records_content_dict = records_content[0] s3_obj_dict = records_content_dict.get('s3')    s3_obj_buckt_info = s3_obj_dict.get('bucket')    s3_obj_buckt_name = s3_obj_buckt_info.get('name')    s3_obj_object_info = s3_obj_dict.get('object')    s3_obj_object_name = s3_obj_object_info.get('key')        #Rename new upload file    print("Try to rename the upload file: {}".format(s3_obj_object_name)) s3.Object(s3_obj_buckt_name, 'renamed_images1.png').copy_from(CopySource={'Bucket': s3_obj_buckt_name, 'Key': s3_obj_object_name})    #Delete original file s3.Object(s3_obj_buckt_name, s3_obj_object_name).delete() return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!')    }


保存代码之后,我们上传一个文件到我们的bucket里,测试一下。这里我上传了一个文件:images1.png,我代码里写的新文件的名字是:renamed_images1.png,然后删除了原来的文件。我们去bucket看一下,效果如下:


刚上传成功时的文件名和最后修改日期时间:


Lambda function被触发之后,刷新页面,显示时的文件名和最后修改日期时间:

从上图可以看到,文件已经被重命名了。


我们再去log详情页面看一下,有我们在Lambda function里定义打印的那一句话,实验成功。


有一个地方需要大家注意,就是Permissions,AWS有单独的服务,叫IAM = Identity and Access Management,先混个脸熟,因为基本上每个服务都需要用到这个IAM。针对AWS Lambda服务,是通过IAM中的role这个来管理的,不同的role有不同的权限,具体权限是怎么分配的呢?那就需要policy来具体管理了。


一般而言,如果你的lambda function不对任何其它服务做操作,那在你创建lambda function时,使用默认的就可以。但是如果你想要使用lambda function来操作其它AWS的服务,比如我们的例子是要操作AWS S3的bucket和object,那么我们的lambda function就需要有读写AWS S3 的权限,如果你没有给Lambda function对AWS S3服务的读写权限,运行上面代码时你会得到一个错误,而这个错误就是Access Deny,不信你可以试试。



说了这么多,Permissions在哪里呢?看下图:



点击Edit:


你可以使用以及存在的role作为AWS Lambda Execution role,也可以从AWS policy templates里创建一个新的。我这里是使用已经存在的role。那我们点击"View the lambda-demo-role-4p0mpjtq role"这个链接,来看看这个role上面到底有什么样的policy:


从上图可以看到有两个policy:

- AWSLambdaBasicExecutionRole-f8axxxxx:这个是创建lambda function时默认创建的

- AmazonS3FullAccess:这个是允许AWS Lambda服务对S3服务有full的access权限。刚开始学AWS Lambda,我们可以暂时就添加这个,以后熟悉之后,可以根据自己的需求创建新的policy。


本篇内容到此结束,希望能帮助大家理解AWS Lambda服务。


扫码关注微信公众号,都是干货哦!

本人微信号,欢迎骚扰!

~daling!点个在看呗!~


原文作者:BPShare;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
干过测试,做过运维,还兼职过售前+投标+实施+售后+客户培训。前两年入坑大数据开发,熟悉Azure + Databricks大数据相关产品。 喜欢研究技术,所以搞了一个公众号:BPShare,分享一些经验和心得。欢迎骚扰~~~

注册时间:2020-02-17

  • 博文量
    90
  • 访问量
    44238