Как создать S3 и запущенную лямбду в 2 разных шаблонах облачной информации - PullRequest
0 голосов
/ 08 июня 2019

Можно ли создать ведро s3 и запущенную лямбду в отдельных шаблонах облачной информации. Я хочу сохранить долго работающий стек ресурсов отдельно от таких, как лямбда, которые обновляются довольно часто

При попытке создать лямбду отдельно, он говорит, что сегмент, определенный в лямбда-событии, должен быть определен в том же шаблоне и на него нельзя ссылаться.

GetFileMetadata:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Properties:
      FunctionName: !Sub '${targetenv}-lambdaname'
      CodeUri: target-file-0.0.1-SNAPSHOT.jar
      Handler: LambdaFunctionHandler::handleRequest
      Runtime: java8
      Timeout: 30
      MemorySize: 512
      Environment: # More info about Env Vars: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#environment-object
        Variables:
          STAGE: !Sub '${targetenv}'

      Events:
        S3Event:
          Type: S3
          Properties:
            Bucket:
              Ref: MyS3Bucket
            Events:
              - 's3:ObjectCreated:*'

  MyS3Bucket:
      Type: 'AWS::S3::Bucket'
      DependsOn: BucketPermission
      Properties:
          BucketName: !Sub 'bucketname-${targetenv}'
         # LifecycleConfiguration: 
          #  Rules:
           # - ExpirationInDays: 14

Ответы [ 2 ]

0 голосов
/ 13 июня 2019

Это невозможно в SAM версии 2016-10-31. Скопировано из S3 источника типа в документации SAM:

ПРИМЕЧАНИЕ. Чтобы указать сегмент S3 в качестве источника события для лямбда-функции, оба ресурса должны быть объявлены в одном шаблоне. AWS SAM не поддерживает указание существующего сегмента в качестве источника события.

0 голосов
/ 08 июня 2019

Шаблон создает контейнер (MyS3Bucket).

Затем на него ссылается функция без сервера:

        Bucket:
          Ref: MyS3Bucket

Если вы хотите сослаться на этот контейнер из другого шаблонаВы можете экспортировать имя корзины из первого стека:

Outputs:

  S3Bucket:
    Description: Bucket that was created
    Value: !Ref MyS3Bucket
    Export:
      Name: Stack1-Bucket

Затем импортировать его во второй стек:

        Bucket:
            Fn::ImportValue:
              Stack1-Bucket

См .: Экспорт выходных значений стека - AWS CloudFormation

...