Добавьте триггер SNS в указанную c лямбда-версию, используя стек облачной информации - PullRequest
0 голосов
/ 03 марта 2020

Я могу добавить SNS в качестве источника событий для моей лямбда-функции. Но я не могу добавить триггер SNS к указанной c лямбда-версии ie к определенному имени функции.

Вот мой фрагмент кода формирования облака:

LambdaCore:
    Type: 'AWS::Lambda::Function'
    Properties:
      Code:
        S3Bucket: !Ref S3Bucket
        S3Key: !Ref S3Key
      Description: Lambda Core with X-ray
      FunctionName: !Ref LambdaCore
      Handler: !Ref LambdaCoreHandler
      MemorySize: '512'
      DeadLetterConfig:
        TargetArn: !GetAtt 
          - DeadLetterQueue
          - Arn
      Role: !GetAtt 
        - LambdaRoleForCore
        - Arn
      Runtime: java8
      Timeout: '300'
      TracingConfig:
        Mode: Active
      VpcConfig:
        SecurityGroupIds: !Ref SecurityGroups
        SubnetIds: !Ref Subnets
  Version:
    Type: AWS::Lambda::Version
    DependsOn: 
      - LambdaCore
    Properties: 
      FunctionName: !Ref LambdaCore
      Description: v1
 InputEventLambdaSubscription:
    Type: 'AWS::SNS::Subscription'
    DependsOn:
      - SNSTopic
      - LambdaCore
    Properties:
      Endpoint: !Ref
        - LambdaCore
        - Arn
      Protocol: lambda
      TopicArn: !Ref SNSTopic
 PermissionForSNSToInvokeCore:
    Type: 'AWS::Lambda::Permission'
    DependsOn:
      - LambdaCore
      - SNSTopic
    Properties:
      FunctionName: !GetAtt 
        - LambdaCore
        - Arn
      Action: 'lambda:InvokeFunction'
      Principal: sns.amazonaws.com
      SourceArn: !Ref SNSTopic

1 Ответ

1 голос
/ 03 марта 2020

Если вы хотите, чтобы подписка указывала на версию, вам нужно использовать версию ARN в подписке. ARN AWS::Lambda::Version будет выглядеть как лямбда-ARN, за исключением того, что он включает :<version> в конце.

Пара других вещей.

  1. Вы не делаете нужно сделать DependsOn, когда вы включаете в ресурс Ref или GetAtt в ресурсе.
  2. Краткая форма GetAtt намного проще для понимания .
  LambdaCore:
    Type: 'AWS::Lambda::Function'
    Properties:
      Code:
        S3Bucket: !Ref S3Bucket
        S3Key: !Ref S3Key
      Description: Lambda Core with X-ray
      FunctionName: !Ref LambdaCore
      Handler: !Ref LambdaCoreHandler
      MemorySize: '512'
      DeadLetterConfig:
        TargetArn: !GetAtt DeadLetterQueue.Arn
      Role: !GetAtt LambdaRoleForCore.Arn
      Runtime: java8
      Timeout: '300'
      TracingConfig:
        Mode: Active
      VpcConfig:
        SecurityGroupIds: !Ref SecurityGroups
        SubnetIds: !Ref Subnets
  Version:
    Type: AWS::Lambda::Version
    Properties: 
      FunctionName: !Ref LambdaCore
      Description: v1
 InputEventLambdaSubscription:
    Type: 'AWS::SNS::Subscription'
    Properties:
      # this will return the ARN of the lambda with the version on it
      Endpoint: !Ref Version
      Protocol: lambda
      TopicArn: !Ref SNSTopic
 PermissionForSNSToInvokeCore:
    Type: 'AWS::Lambda::Permission'
    Properties:
      FunctionName: !GetAtt LambdaCore.Arn
      Action: 'lambda:InvokeFunction'
      Principal: sns.amazonaws.com
      SourceArn: !Ref SNSTopic
...