如何使用 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 函数的日志