Kit*_*nde 10 amazon-web-services amazon-sns aws-lambda apex-framework
我有一个AWS lambda函数,我通过apex创建.我还通过terraform创建了一个SNS主题和一个订阅.
我的主题是: arn:aws:sns:ap-southeast-1:178284945954:fetch_realm_auctions
我有一个订阅:arn:aws:sns:ap-southeast-1:178284945954:fetch_realm_auctions:2da1d182-946d-4afd-91cb-1ed3453c5d86有一个lambda类型,端点是:arn:aws:lambda:ap-southeast-1:178284945954:function:wowauctions_get_auction_data
我已经确认这是ARN的正确功能.一切似乎正确连线:
我手动触发SNS:
aws sns publish
--topic-arn arn:aws:sns:ap-southeast-1:178284945954:fetch_realm_auctions
--message '{"endpoint": "https://us.api.battle.net", "realm": "spinebreaker"}'
Run Code Online (Sandbox Code Playgroud)
它返回消息ID但不会发生调用.为什么?
Phi*_*ßen 12
SNS 主题需要具有调用 Lambda 的权限。
以下是如何在 Terraform 中表达的示例:
# Assumption: both SNS topic and Lambda are deployed in the same region
# resource "aws_sns_topic" "instance" { ... }
# resource "aws_lambda_function" "instance" {... }
# Step 1: Allow the SNS topic to invoke the Lambda
resource "aws_lambda_permission" "allow_invocation_from_sns" {
statement_id = "AllowExecutionFromSNS"
action = "lambda:InvokeFunction"
function_name = "${aws_lambda_function.instance.function_name}"
principal = "sns.amazonaws.com"
source_arn = "${aws_sns_topic.instance.arn}"
}
# Step 2: Subscribe the Lambda to the SNS topic
resource "aws_sns_topic_subscription" "instance" {
topic_arn = "${aws_sns_topic.instance.arn}"
protocol = "lambda"
endpoint = "${aws_lambda_function.instance.arn}"
}
Run Code Online (Sandbox Code Playgroud)
解决此问题的一些一般提示(未触发 Lambda):
endpoint必须与Lambda的ARN完全匹配)一旦您确认了这些基本检查并且您仍然看不到调用,则必须是权限错误。当您在 AWS 控制台中打开 Lambda 时,您应该看到 SNS 列为触发器:
为了比较,如果权限缺失,您将看不到SNS:
如果您没有使用自动化部署(例如,使用 CloudFormation 或 Terraform),您还可以手动添加缺少的权限:
SNS下Add triggers(您需要在列表中向下滚动才能看到它)Configure triggers,选择 SNS 主题Add并保存 LambdaKit*_*nde 10
我添加了一个内联策略来允许调用lambda:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1474873816000",
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction"
],
"Resource": [
"arn:aws:lambda:ap-southeast-1:178284945954:function:wowauctions_get_auction_data"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
它现在正在运作.
| 归档时间: |
|
| 查看次数: |
7062 次 |
| 最近记录: |