Chr*_*mon 11

在lambda自己的cli api中管理的唯一事件源是Kinesis Streams和DynamoDb Streams.您可以使用cli管理它们aws lambda

S3存储桶事件在S3中进行管理,因为它们可以发送到SNS主题,SQS队列或Lambda功能.所以你需要特别使用aws s3apicli命令put-bucket-notification-configuration

--notification-configurationarg中,你会有类似的东西:

{
  "LambdaFunctionConfigurations": [
    {
      "Id": "string",
      "LambdaFunctionArn": "string",
      "Events": [events]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

事件是s3 事件的列表


小智 7

我能够使用下面的 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}}
Run Code Online (Sandbox Code Playgroud)

SNS 主题也可以来自其他地区。
希望这可以帮助。


Gun*_*ach 5

正如@user1292364 提到的,我们需要对 lambda 使用添加权限。

唯一的问题是您需要确保将lambda 添加到 sns 订阅。否则会出现这个错误

A subscription for arn:aws:lambda:eu-west-1:276xxxxxx:function:HourlyLambdaFunction on the topic HourlyLambdaFunction could not be found.
Run Code Online (Sandbox Code Playgroud)

我更愿意以这种方式在 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;'}"
Run Code Online (Sandbox Code Playgroud)

ps:代码中的\是bash脚本的新行(如果有人想知道的话)

可以在 Cloudwatch 上找到 lambda 函数的日志