Coz*_*man 3 aws-lambda aws-step-functions
我能够使用 lambda 函数执行将数据从源存储桶复制到目标存储桶的任务,但是,在 Step 函数中执行 lambda 函数时出现错误。以下是我从头开始遵循的步骤。
import json
import boto3
s3_client=boto3.client('s3')
# lambda function to copy file from 1 s3 to another s3
def lambda_handler(event, context):
#specify source bucket
source_bucket_name=event['Records'][0]['s3']['bucket']['name']
#get object that has been uploaded
file_name=event['Records'][0]['s3']['object']['key']
#specify destination bucket
destination_bucket_name='final.bucket'
#specify from where file needs to be copied
copy_object={'Bucket':source_bucket_name,'Key':file_name}
#write copy statement
s3_client.copy_object(CopySource=copy_object,Bucket=destination_bucket_name,Key=file_name)
return {
'statusCode': 3000,
'body': json.dumps('File has been Successfully Copied')
}
Run Code Online (Sandbox Code Playgroud)
- I deployed the code and it worked. Uploaded a csv file in start.bucket and it was copied to final.bucket.
Run Code Online (Sandbox Code Playgroud)
然后,我在 Step 函数中创建了一个状态机,其中包含以下信息:
当我尝试执行它时它显示错误。我知道我错过了一些东西。我非常感谢您的帮助。
Step 函数现在允许您直接使用 S3 Copy SDK,完全绕过 Lambda 和 boto3。请查看此处了解更多信息。
因此,在您的情况下,您需要一个如下所示的简单任务:
{
"Comment": "A description of my state machine",
"StartAt": "CopyObject",
"States": {
"CopyObject": {
"Type": "Task",
"End": true,
"Parameters": {
"ServerSideEncryption": "AES256",
"Bucket.$": "$.destination_bucket",
"CopySource.$": "$.source_path",
"Key.$": "$.key"
},
"Resource": "arn:aws:states:::aws-sdk:s3:copyObject"
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您的输入状态将需要输入通常用于通过复制命令复制文件的参数。源路径、目标存储桶和对象密钥与 boto3 命令完全相同。
注意:您的状态机 IAM 角色将需要直接 S3 权限,并且需要与存储桶位于同一区域。
| 归档时间: |
|
| 查看次数: |
3435 次 |
| 最近记录: |