Aws lambda &引用;无效输入“;添加SNS主题作为Lambda目的地

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":

Lambda添加SNS主题(以及其他内容)作为目的地。这可以通过用户界面进行设置

但我不能让它工作。我有一个简单的Lambda,它返回一个JSON,我希望它推送到SNS主题。我打开Lambda的目的地并在目的地粘贴主题。这导致“输入无效”

为了让目的地能够识别主题ARN,我首先授予Lambda SNS完全访问权限,然后还将我的Lambda角色添加到SNS主题访问策略中

"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