AWS + Cloudformation + Elasticbeanstalk

Когда я создаю стек со следующим шаблоном облачной информации, используя входной параметр EnvironmentType «dev», он создает приложение ebs, создает среду внутри приложения и развертывает файл sample-app.war из корзины S3.

Затем я делаю стек обновления, используя тот же шаблон с входным параметром EnvironmentType "stage", на этот раз он удаляет существующую среду разработки и создает среду stage внутри приложения.

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

Мое требование - сохранить среду разработки и рабочую среду для создания внутри примера приложения с использованием облачной информации.

Любые предложения, пожалуйста ..

---
AWSTemplateFormatVersion: 2010-09-09

Description: 'Create an ElasticBeanstalk Application, Environment and deploy the war file from S3 bucket'

Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
      -
        Label:
          default: 'EBS Application Configuration'
        Parameters:
          - ApplicationName
          - ApplicationDescription
          - ApplicationVersion
      -
        Label:
          default: 'EBS Environment Configuration'
        Parameters:
          - EnvironmentName
          - EnvironmentType
          - EnvironmentDescription
          - EnvironmentCName
          - MinInstances
          - MaxInstances

Mappings:
  PropertiesMap:
    IntanceType:
      dev: 'SingleInstance'
      qa: 'SingleInstance'
      stage: 'LoadBalanced'
      prod: 'LoadBalanced'

Parameters:
  ApplicationName:
    Type: String
    Description: 'Name of the ElasticBeanstalk Application'

  ApplicationDescription:
    Type: String
    Description: 'ElasticBeanstalk Application Description'

  ApplicationVersion:
    Type: String
    Description: 'Application version description'

  EnvironmentName:
    Type: String
    Description: 'Name of the Environment'
    AllowedPattern: '^([A-Za-z]|[0-9]|-)+$'

  EnvironmentType:
    Type: String
    Description: 'Type of the Environment (dev, qa, stage, prod)'
    AllowedValues:
      - 'dev'
      - 'qa'
      - 'stage'
      - 'prod'

  EnvironmentCName:
    Type: String
    Description: 'CName Prefix for the ElasticBeanstalk environment'
    AllowedPattern: '^([A-Za-z]|[0-9]|-)+$'

  EnvironmentDescription:
    Type: String
    Description: 'Description of the ElasticBeanstalk environment'

  MinInstances:
    Type: Number
    Description: 'Minimum load balanced instances (Mandatory for stage/prod)'
    Default: 2
    MinValue: 2
    MaxValue: 10

  MaxInstances:
    Type: Number
    Description: 'Maximum load balanced instances (Mandatory for stage/prod)'
    Default: 2
    MinValue: 2
    MaxValue: 10

Conditions:
  IsStageOrProdEnvironment:
    !Or [!Equals [stage, !Ref EnvironmentType], !Equals [prod, !Ref EnvironmentType]]

Resources:
  EBSApplication:
    Type: AWS::ElasticBeanstalk::Application
    Properties:
      ApplicationName: !Ref ApplicationName
      Description: !Ref ApplicationDescription

  EBSApplicationVersion:
    Type: AWS::ElasticBeanstalk::ApplicationVersion  
    Properties:
      ApplicationName: !Ref EBSApplication
      Description: !Ref ApplicationVersion

      SourceBundle:
        S3Bucket: deployable
        S3Key: artifacts/sample-app.war

  EBSApplicationConfigurationTemplate:
    Type: AWS::ElasticBeanstalk::ConfigurationTemplate
    Properties:
      ApplicationName: !Ref EBSApplication
      Description: 'ElasticBeanstalk Configuration Template'
      SolutionStackName: '64bit Amazon Linux 2018.03 v3.0.2 running Tomcat 8.5 Java 8'
      OptionSettings:
        - Namespace: aws:elasticbeanstalk:environment
          OptionName: EnvironmentType
          Value: !FindInMap [PropertiesMap, IntanceType, !Ref EnvironmentType]
        - Namespace: aws:autoscaling:asg
          OptionName: MinSize
          Value: !If [IsStageOrProdEnvironment, !Ref MinInstances, !Ref 'AWS::NoValue']
        - Namespace: aws:autoscaling:asg
          OptionName: MaxSize
          Value: !If [IsStageOrProdEnvironment, !Ref MaxInstances, !Ref 'AWS::NoValue']

  EBSEnvironment:
    Type: AWS::ElasticBeanstalk::Environment
    Properties:
      ApplicationName: !Ref EBSApplication
      CNAMEPrefix: !Ref EnvironmentCName
      Description: !Ref EnvironmentDescription
      EnvironmentName: !Ref EnvironmentName
      TemplateName: !Ref EBSApplicationConfigurationTemplate
      VersionLabel: !Ref EBSApplicationVersion

Outputs:
  ApplicationURL:
    Description: 'ElasticBeanstalk environment endpoint'
    Value: !Join 
      - ''
      - - 'http://'
        - !GetAtt EBSEnvironment.EndpointURL

Вы используете aws cli для развертывания? Можете показать командную строку?

yorodm 20.08.2018 20:19

Нет, я использовал консоль aws для запуска этого шаблона и передал входные параметры в саму консоль.

Perumal Ramasamy 21.08.2018 18:29

Вы проверяли, что ваши стеки "dev" и "prod" имеют разные имена?

yorodm 21.08.2018 19:28

Да, я пробовал создать два стека с разными именами для «dev» и «prod». Поскольку приложение уже создано для среды разработки, оно показывает, что приложение уже существует, и откатывает создание стека.

Perumal Ramasamy 22.08.2018 08:07

Я также пробовал обновить стек my-project-dev, на этот раз он создает промежуточную среду и удаляет среду разработки.

Perumal Ramasamy 22.08.2018 08:08
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
860
0

Другие вопросы по теме