如何使用 AWS CLI 将触发器添加到 AWS Lambda 函数?
How do I add trigger to an AWS Lambda function using AWS CLI?
有没有使用 AWS CLI 执行此操作的方法?
在 lambda 自己的 cli api 中管理的唯一事件源是 Kinesis Streams 和 DynamoDb Streams。您可以使用 aws lambda
通过 cli 管理它们
S3 存储桶事件在 S3 中进行管理,因为它们可以发送到 SNS 主题、SQS 队列或 Lambda 函数。所以你需要使用 aws s3api
cli 命令,特别是 put-bucket-notification-configuration
在 --notification-configuration
arg 中,您将得到类似的内容:
{
"LambdaFunctionConfigurations": [
{
"Id": "string",
"LambdaFunctionArn": "string",
"Events": [events]
}
]
}
其中事件是 s3 的列表 events
我能够使用以下 AWS CLI 为 lambda 添加 SNS 触发器
aws lambda add-permission \
--function-name {{LAMBDA-FUNCTION-NAME}} \
--statement-id {{UNIQUE-ID}} \
--action "lambda:InvokeFunction" \
--principal sns.amazonaws.com \
--source-arn arn:aws:sns:us-east-1:77889900:{{SNS-TOPIC-ARN}}
SNS话题也可以来自其他地区。
希望这有帮助。
如@user1292364 所述,我们需要对 lambda 使用添加权限。
唯一的问题是您需要确保添加 lambda 到 sns 订阅 also。否则会出现这个错误
A subscription for arn:aws:lambda:eu-west-1:276xxxxxx:function:HourlyLambdaFunction on the topic HourlyLambdaFunction could not be found.
我更愿意以这种方式在 AWS CLI 上使用它:
#!/usr/bin/env bash
# Add Lambda to SNS as subscription
aws sns subscribe \
--topic-arn arn:aws:sns:eu-west-1:276xxxxxx:HourlyLambdaFunction \
--protocol lambda \
--notification-endpoint arn:aws:lambda:eu-west-1:276xxxxxx:function:HourlyLambdaFunction
# Give permissions to Lambda to access that subscription i.e. Add it through triggers
aws lambda add-permission \
--function-name HourlyLambdaFunction \
--statement-id 276xxxxxx\
--action "lambda:InvokeFunction" \
--principal sns.amazonaws.com \
--source-arn arn:aws:sns:eu-west-1:276xxxxxx:HourlyLambdaFunction
# Send message to publish and trigger lamda
aws sns publish \
--topic-arn arn:aws:sns:eu-west-1:276xxxxxx:HourlyLambdaFunction \
--subject "HourlyLambdaFunction" \
--message "{datawarehouse:banana_wh, database:banana_db, schema:banana. query:'select count(*) from banana.banana_loads;'}"
ps:代码中的 \ 是 bash 脚本的新行(如果有人想知道的话)
可以在 Cloudwatch 上找到 lambda 函数的日志
有没有使用 AWS CLI 执行此操作的方法?
在 lambda 自己的 cli api 中管理的唯一事件源是 Kinesis Streams 和 DynamoDb Streams。您可以使用 aws lambda
S3 存储桶事件在 S3 中进行管理,因为它们可以发送到 SNS 主题、SQS 队列或 Lambda 函数。所以你需要使用 aws s3api
cli 命令,特别是 put-bucket-notification-configuration
在 --notification-configuration
arg 中,您将得到类似的内容:
{
"LambdaFunctionConfigurations": [
{
"Id": "string",
"LambdaFunctionArn": "string",
"Events": [events]
}
]
}
其中事件是 s3 的列表 events
我能够使用以下 AWS CLI 为 lambda 添加 SNS 触发器
aws lambda add-permission \
--function-name {{LAMBDA-FUNCTION-NAME}} \
--statement-id {{UNIQUE-ID}} \
--action "lambda:InvokeFunction" \
--principal sns.amazonaws.com \
--source-arn arn:aws:sns:us-east-1:77889900:{{SNS-TOPIC-ARN}}
SNS话题也可以来自其他地区。
希望这有帮助。
如@user1292364 所述,我们需要对 lambda 使用添加权限。
唯一的问题是您需要确保添加 lambda 到 sns 订阅 also。否则会出现这个错误
A subscription for arn:aws:lambda:eu-west-1:276xxxxxx:function:HourlyLambdaFunction on the topic HourlyLambdaFunction could not be found.
我更愿意以这种方式在 AWS CLI 上使用它:
#!/usr/bin/env bash
# Add Lambda to SNS as subscription
aws sns subscribe \
--topic-arn arn:aws:sns:eu-west-1:276xxxxxx:HourlyLambdaFunction \
--protocol lambda \
--notification-endpoint arn:aws:lambda:eu-west-1:276xxxxxx:function:HourlyLambdaFunction
# Give permissions to Lambda to access that subscription i.e. Add it through triggers
aws lambda add-permission \
--function-name HourlyLambdaFunction \
--statement-id 276xxxxxx\
--action "lambda:InvokeFunction" \
--principal sns.amazonaws.com \
--source-arn arn:aws:sns:eu-west-1:276xxxxxx:HourlyLambdaFunction
# Send message to publish and trigger lamda
aws sns publish \
--topic-arn arn:aws:sns:eu-west-1:276xxxxxx:HourlyLambdaFunction \
--subject "HourlyLambdaFunction" \
--message "{datawarehouse:banana_wh, database:banana_db, schema:banana. query:'select count(*) from banana.banana_loads;'}"
ps:代码中的 \ 是 bash 脚本的新行(如果有人想知道的话)
可以在 Cloudwatch 上找到 lambda 函数的日志