ラムダ独自の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
以下の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トピックは他の地域からのものでもかまいません。
お役に立てれば。
@ 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にあります