首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从CLI调用S3事件中的AWS函数

从CLI调用S3事件中的AWS函数
EN

Stack Overflow用户
提问于 2019-07-12 20:13:36
回答 2查看 1.5K关注 0票数 0

我使用CLI命令创建了Lambda函数。

代码语言:javascript
复制
aws lambda create-function 
   --function-name "functionName" 
   --runtime "java8" 
   --role "roleARN" 
   --handler "com.company.package.S3FileCreator::createFile"
   --zip-file "fileb://./filePath.zip"

现在我想要创建触发器这个函数--如果我把任何对象放在我的s3桶上,我可以从Amazon创建触发器,但是可以从创建触发器吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-29 16:13:51

通过以下步骤解决了问题:

在变量上分配函数名/s3桶名/rold ARN

代码语言:javascript
复制
FUNCTION_NAME=lambda-function-name
S3_BUCKE=s3_bucket_name
ROLE=AWS_role_ARN

创建Lambda函数并获得ARN

代码语言:javascript
复制
LAMBDA_ARN=$(aws lambda create-function --function-name "$FUNCTION_NAME" --runtime "java8"  --role "$ROLE" --handler "com.monsanto.aws.S3NotificationAgent::handleRequest"  --zip-file "fileb://./target/file_name.zip" | grep FunctionArn | cut -d'"' -f4)

获取当前AWS帐号

代码语言:javascript
复制
AWS_ACCOUNT_NUMBER=$(aws sts get-caller-identity --output text --query 'Account') 

生成唯一语句id

代码语言:javascript
复制
STATEMENT_ID="$(date +%s%3N)-stm-name" 

允许S3桶调用该lambda函数

代码语言:javascript
复制
aws lambda add-permission --function-name "$FUNCTION_NAME"
--principal "s3.amazonaws.com" --statement-id "$STATEMENT_ID" --action "lambda:InvokeFunction" --source-arn "arn:aws:s3:::$S3_BUCKET"
--source-account "$AWS_ACCOUNT_NUMBER"

为put-桶通知(之间没有空格)准备JSON参数

代码语言:javascript
复制
NOTIFICATION_CONFIGURATIONS='{"LambdaFunctionConfigurations":[{"Id":"'"$FUNCTION_NAME"'-event","LambdaFunctionArn":"'"$LAMBDA_ARN"'","Events":["s3:ObjectCreated:*"],"Filter":{"Key":{"FilterRules":[{"Name":"suffix","Value":"log"},{"Name":"prefix","Value":"logtest"}]}}}]}'

添加s3事件以调用Lambda函数

代码语言:javascript
复制
aws s3api put-bucket-notification-configuration --bucket "$S3_BUCKET" 
--notification-configuration "$NOTIFICATION_CONFIGURATIONS"
票数 0
EN

Stack Overflow用户

发布于 2019-07-12 20:36:37

我想您会想了解一下此页中关于在S3中使用Lambda的内容。

为了让您的lambda触发器每当文件上传到特定的S3桶时,您将需要在该S3桶上创建一个桶通知。此桶通知应该在S3:ObjectCreated:Put上激活,因为您说希望它在放置对象时随时激活。

下面是用CLI设置桶通知的一个例子,下面是一些更接近您想要尝试的内容。我还没测试过这个。

your-bucket-notification-config.json

代码语言:javascript
复制
 {
    "LambdaFunctionConfigurations": [
        {
            "Id": "your-chosen-id",
            "LambdaFunctionArn": "arn:aws:lambda:YOUR_REGION:ACCOUNT_ID:functionName",
            "Events": [
                "s3:ObjectCreated:Put"
            ]
        }
    ]
}

然后你会跑:

代码语言:javascript
复制
aws s3api put-bucket-notification-configuration --bucket your-bucket --notification-configuration file://your-bucket-notification-config.json
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57013540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档