当消息发布到AWS SNS主题时触发Lambda函数的命令代码

323 阅读1分钟

如果你想在SNS主题上发布新消息时触发Lambda函数,请使用以下命令。

设置

// Create lambda function
GOOS=linux CGO_ENABLED=0 go build -ldflags "-s -w" -o lambda/plain/main lambda/plain/main.go

zip lambda.zip lambda/plain/main

aws --profile localstack --endpoint-url http://localhost:4566 lambda create-function \
    --function-name test-lambda \
    --handler lambda/plain/main \
    --runtime go1.x \
    --role test-role \
    --zip-file fileb://lambda.zip

// Create SNS topic
aws --profile localstack --endpoint-url http://localhost:4566 sns create-topic \
    --name test-topic

// Add Lambda permissions for SNS topic
aws --profile localstack --endpoint-url http://localhost:4566 lambda add-permission \
    --function-name test-lambda \
    --source-arn arn:aws:sns:eu-west-1:000000000000:test-topic \
    --statement-id test-lambda \
    --action lambda:InvokeFunction \
    --principal sns.amazonaws.com

// Subscribe Lambda function to SNS topic
aws --profile localstack --endpoint-url http://localhost:4566 sns subscribe \
    --protocol lambda \
    --topic-arn arn:aws:sns:eu-west-1:000000000000:test-topic \
    --notification-endpoint arn:aws:lambda:eu-west-1:000000000000:function:test-lambda

测试

aws --profile localstack --endpoint-url http://localhost:4566 sns publish \
    --topic-arn arn:aws:sns:eu-west-1:000000000000:test-topic \
    --message Greeting \
    --subject Testing

这是你的Lambda事件的样子:

map[
    Records:[
        map[
            EventSource:aws:sns
            EventSubscriptionArn:arn:aws:sns:eu-west-1:000000000000:test-topic:bf5c62cc-6ad0-4d26-953d-24c46d484188
            EventVersion:1.0
            Sns:map[
                Message:Greeting
                MessageAttributes:map[]
                MessageId:8e9c2f18-57d3-45f4-abc8-f46d607a5469
                Signature:EXAMPLEpH+..
                SignatureVersion:1
                SigningCertUrl:https://sns.us-east-1.amazonaws.com/SimpleNotificationService-000000000.pem
                Subject:Testing
                Timestamp:2022-01-30T00:04:11.730Z
                TopicArn:arn:aws:sns:eu-west-1:000000000000:test-topic
                Type:Notification
                UnsubscribeUrl:http://localhost:4566/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:eu-west-1:000000000000:test-topic:bf5c62cc-6ad0-4d26-953d-24c46d484188
            ]
        ]
    ]
]