web-dev-qa-db-ja.com

AWSCLIを使用してAWSLambda関数にトリガーを追加するにはどうすればよいですか?

AWS CLIを使用してこれを行う方法はありますか? Adding trigger using AWS Management Console

11

ラムダ独自のCLIAPI内で管理されるイベントソースは、KinesisStreamsとDynamoDbStreamsのみです。 aws lambda を使用してCLIでそれらを管理できます

S3バケットイベントは、SNSトピック、SQSキュー、またはLambda関数に送信できるため、S3内で管理されます。したがって、aws s3api cliコマンドを使用する必要があります。具体的には put-bucket-notification-configuration

--notification-configuration引数には、次のようなものがあります。

{
  "LambdaFunctionConfigurations": [
    {
      "Id": "string",
      "LambdaFunctionArn": "string",
      "Events": [events]
    }
  ]
}

ここで、eventsはs3のリストです events

11
Chris Simon

以下のAWSCLIを使用して、ラムダのSNSトリガーを追加できました

aws --region eu-west-1 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トピックは他の地域からのものでもかまいません。
お役に立てれば。

4
user1292364

@ user1292364が述べたように、ラムダにadd-permissionを使用する必要があります。

唯一の問題は、lambda to snsサブスクリプションが追加されているals oであることを確認する必要があることです。そうしないと、このエラーが発生します

A subscription for arn:aws:lambda:eu-west-1:276xxxxxx:function:HourlyLambdaFunction on the topic HourlyLambdaFunction could not be found.

このように、AWSCLIよりも使用したいと思います。

#!/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にあります

2
Gunay Anach