Могут ли два стека облачной информации AWS совместно использовать одну AWS :: Serverless :: Function? - PullRequest
0 голосов
/ 23 апреля 2019

Вот мой шаблон SAM, у него есть параметр под названием CompanyParameter, поэтому при развертывании в стек я передам название компании, создаст очередь для каждой компании, но я хочу, чтобы все стеки для разных компаний указывалик той же самой лямбда-функции.

прямо сейчас, когда я создаю второй стек, произойдет сбой с сообщением:

batch-sqs-queue-process already exists in stack.....

Возможно ли это вообще?Причина, по которой я хочу сделать это, чтобы, если изменился какой-то код лямбда-функции, мне просто нужно обновить один раз для всех компаний.Это правильное направление?

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: Processing batch system messages on an SQS queue with Lambda
Parameters:
  CompanyParameter:
    Type: String
    Description: Company name
    AllowedPattern: "[A-Za-z0-9]+"
    ConstraintDescription: Company name must only contain uppercase and lowercase letters and numbers
Resources:
  BatchSQSQueueFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: ./index.js
      Description: process the batch data messages
      FunctionName: batch-sqs-queue-process
      Handler: index.handler
      Runtime: nodejs8.10
      Events:
        BatchSQSEvent:
          Type: SQS
          Properties:
            Queue: !GetAtt BatchSqsQueue.Arn
            BatchSize: 10

  BatchSqsQueue:
    Type: AWS::SQS::Queue
    Properties:       
      QueueName: !Sub batch-sqs-queue-${CompanyParameter}                   

1 Ответ

1 голос
/ 23 апреля 2019

Текущая реализация работает не так, как вы хотите, каждый развернутый шаблон CloudFormation создаст свою собственную очередь SQS и свою собственную функцию Lambda.Если исходный код Lambda изменяется, вы должны повторно развернуть стек для всех компаний.Альтернативой может быть создание лямбда-слоя AWS и размещение всего общего кода в слое, а затем настройка лямбда-адресов с каждым соответствующим SQS для использования уровня.Это решит повторное использование кода, однако есть одна оговорка.Скопировано из документации :

Вы выбираете конкретную версию слоя для использования.Если вы хотите использовать другую версию позже, обновите конфигурацию вашей функции.

Другими словами, код повторно используется между ресурсами Lambda, но вы все равно должны повторно развернуть все функции с помощьюновый номер версии слоя Lambda.


Другой альтернативой может быть реализация CloudFormation Macro .Взгляните на пример Count , но представьте, что он содержит множество ваших компаний вместо числа.Отказ от ответственности, я еще не пытался использовать макросы вместе с AWS SAM.


Примечание: проблема, с которой вы сталкиваетесь batch-sqs-queue-process already exists in stack...., заключается в том, что вы указали FunctionName как часть шаблона SAM.Имена лямбда-функций должны быть уникальными во всех стеках, подробнее о CloudFormation Name Type в руководстве пользователя.При удалении имени функции CloudFormation создаст уникальное имя (обычно на основе имени стека, имени ресурса и некоторых случайных символов), которое является уникальным.

...