Aws lambda &引用;无效输入“;添加SNS主题作为Lambda目的地
Lambda添加SNS主题(以及其他内容)作为目的地。这可以通过用户界面进行设置 但我不能让它工作。我有一个简单的Lambda,它返回一个JSON,我希望它推送到SNS主题。我打开Lambda的目的地并在目的地粘贴主题。这导致“输入无效” 为了让目的地能够识别主题ARN,我首先授予Lambda SNS完全访问权限,然后还将我的Lambda角色添加到SNS主题访问策略中Aws lambda &引用;无效输入“;添加SNS主题作为Lambda目的地,aws-lambda,amazon-sns,amazon-vpc,Aws Lambda,Amazon Sns,Amazon Vpc,Lambda添加SNS主题(以及其他内容)作为目的地。这可以通过用户界面进行设置 但我不能让它工作。我有一个简单的Lambda,它返回一个JSON,我希望它推送到SNS主题。我打开Lambda的目的地并在目的地粘贴主题。这导致“输入无效” 为了让目的地能够识别主题ARN,我首先授予Lambda SNS完全访问权限,然后还将我的Lambda角色添加到SNS主题访问策略中 "Resource": [topic arn], "Condition":
"Resource": [topic arn],
"Condition": {
"StringEquals": {
"AWS:SourceOwner": [topic owner],
"Role": [Lambda role arn] <---single added line
}
}
“资源”:[主题arn],
“条件”:{
“StringEquals”:{
“AWS:SourceOwner”:[主题所有者],
“角色”:[Lambda Role arn]环顾四周,有一个关于Lambda目的地的部分。该部分似乎表明您需要的唯一权限是向您的Lambda授予sns:Publish
。您能否确认它确实收到发布权限
如果不是这个问题,我会尝试使用他们的Cloudformation模板(下面引用-来自上面的链接),并将其与通过控制台进行设置时在您的帐户中生成的Cloudformation进行比较
Resources:
EventInvokeConfig:
Type: AWS::Lambda::EventInvokeConfig
Properties:
FunctionName: “YourLambdaFunctionWithEventInvokeConfig”
Qualifier: "$LATEST"
MaximumEventAgeInSeconds: 600
MaximumRetryAttempts: 0
DestinationConfig:
OnSuccess:
Destination: “arn:aws:sns:us-east-1:123456789012:YourSNSTopicOnSuccess”
OnFailure:
Destination: “arn:aws:lambda:us-east-1:123456789012:function:YourLambdaFunctionOnFailure”
请注意,从文档中,您可以在控制台中通过两次过程依次定义OnSuccess
和OnFailure
。我不会完全忽略它们,例如,隐式要求同时提供OnSuccess
和OnFailure
。可能与您的cas不同e、 但我发现,我之所以会出现这个错误,仅仅是因为SNS与lambda位于不同的区域。确保它是同一个区域,如下面的示例所示。希望这里的错误更清楚
service: errorhandlingdemo
frameworkVersion: '2'
configValidationMode: error
plugins:
- serverless-dotenv-plugin
provider:
name: aws
runtime: python3.7
lambdaHashingVersion: 20201221
profile: ${opt:profile, env:PROFILE}
stage: ${opt:stage, env:STAGE}
timeout: 5 # seconds, which is 5 seconds
iamRoleStatements:
- Effect: "Allow"
Action:
- sns:*
Resource:
- arn:aws:sns:us-east-1:540160934250:genesis-alerts
functions:
helloworld:
handler: handler.hello
destinations:
onFailure: helloFailure
helloFailure:
handler: failure_handler.handler
destinations:
onFailure: arn:aws:sns:us-east-1:540160934250:genesis-alerts
onSuccess: arn:aws:sns:us-east-1:540160934250:genesis-alerts
custom:
dotenv:
basePath: ./env/
logging: true
确认我的Lambda有sns:Publish。我过火了,授予了它Allow:sns:*。对于顺序授予,我无法保存第一个,因此我不怀疑我可以通过流两次并坚持任何尝试。我在哪里可以找到我的Cloudformation?你可以使用现有资源生成Cloudformation,但看起来你可以“根本无法通过该流程,或者2.尝试使用上面的Cloudformation创建目标规则,然后在控制台中检查该规则,看看结果如何。您是否尝试过对您的SNS主题策略进行等效更改,即授予更大的访问权限?可能在此处看到相同的问题;您找到解决方案了吗?回头看,我最终发现了直接用lambda代码调用SNS