从CodeStar项目定制产品部署

问题描述 投票:0回答:1

我正在参考此文档:https://docs.aws.amazon.com/codestar/latest/userguide/customize-ec2-multi-endpoints.html#customize-ec2-multi-endpoints-newstage

[当前,我们有一个类型为“ Java Spring,Web Service”的Beanstalk模板创建的CodeStar项目。但是,使用CloudFormation生成的项目仅包含用于部署我们的API的单个环境。

问题:如何正确修改此模板,以便同时运行两个不同的环境?

就Beanstalk而言:我们的SingleInstance实例需要一个dev类型,并且我们的LoadBalanced实例想要一个prod类型(使用两个EC2实例进行冗余)。

参考的教程提到awscodestar-<project_name>-infrastructure-prod用作CloudFormation集合的堆栈名称,但是如果没有创建要部署的实际实例,那该如何工作?我很困惑。

并且为什么还没有一个模板文件可以提供类似于上述两种环境的CodePipeline / Beanstalk设置?对于CI / CD来说,这似乎是一种相当主流的方法。


这是我们的template.yml文件:

AWSTemplateFormatVersion: 2010-09-09
Transform:
- AWS::CodeStar

Conditions:
  UseSubnet: !Not [!Equals [!Ref 'SubnetId', subnet-none]]

Parameters:
  ProjectId:
    Type: String
    Description: AWS CodeStar project ID used to name project resources and create roles.
  InstanceType:
    Type: String
    Description: The type of Amazon EC2 Linux instances that will be launched for this project.
  KeyPairName:
    Type: String
    Description: The name of an existing Amazon EC2 key pair in the region where the project is created, which you can use to SSH into the new Amazon EC2 Linux instances.
  VpcId:
    Type: String
    Description: The ID of the Amazon Virtual Private Cloud (VPC) used for the new Amazon EC2 Linux instances.
  SubnetId:
    Type: String
    Description: The name of the VPC subnet used for the new Amazon EC2 Linux instances launched for this project.
  SolutionStackName:
    Type: String
    Description: The software stack used to launch environments and configure instances in AWS Elastic Beanstalk.
  EBTrustRole:
    Type: String
    Description: The service role in IAM for AWS Elastic Beanstalk to be created for this project.
  EBInstanceProfile:
    Type: String
    Description: The IAM role that will be created for the Amazon EC2 Linux instances.
  Stage:
    Type: String
    Description: The name for a project pipeline stage, such as Staging or Prod, for which resources are provisioned and deployed.
    Default: ''
Resources:
  EBApplication:
    Description: The AWS Elastic Beanstalk application, which is a container used to deploy the correct application configuration.
    Type: AWS::ElasticBeanstalk::Application
    Properties:
      ApplicationName: !Sub '${ProjectId}app${Stage}'
      Description: The name of the AWS Elastic Beanstalk application to be created for this project.
  EBApplicationVersion:
    Description: The version of the AWS Elastic Beanstalk application to be created for this project.
    Type: AWS::ElasticBeanstalk::ApplicationVersion
    Properties:
      ApplicationName: !Ref 'EBApplication'
      Description: The application version number.
      SourceBundle: 'target/ROOT'
  EBConfigurationTemplate:
    Description: The AWS Elastic Beanstalk configuration template to be created for this project, which defines configuration settings used to deploy different versions of an application.
    Type: AWS::ElasticBeanstalk::ConfigurationTemplate
    Properties:
      ApplicationName: !Ref 'EBApplication'
      Description: The name of the sample configuration template.
      OptionSettings:
      - Namespace: aws:elasticbeanstalk:environment
        OptionName: EnvironmentType
        Value: SingleInstance
      - Namespace: aws:elasticbeanstalk:environment
        OptionName: ServiceRole
        Value: !Ref 'EBTrustRole'
      - Namespace: aws:elasticbeanstalk:healthreporting:system
        OptionName: SystemType
        Value: enhanced
      SolutionStackName: !Ref 'SolutionStackName'
  EBEnvironment:
    Description: The AWS Elastic Beanstalk deployment group where the application is deployed, which is made up of the Amazon EC2 Linux instances launched for this project.
    Type: AWS::ElasticBeanstalk::Environment
    Properties:
      ApplicationName: !Ref 'EBApplication'
      EnvironmentName: !Ref 'EBApplication'
      Description: The application to be deployed to the environment.
      TemplateName: !Ref 'EBConfigurationTemplate'
      VersionLabel: !Ref 'EBApplicationVersion'
      OptionSettings:
      - Namespace: aws:autoscaling:launchconfiguration
        OptionName: IamInstanceProfile
        Value: !Ref 'EBInstanceProfile'
      - Namespace: aws:autoscaling:launchconfiguration
        OptionName: InstanceType
        Value: !Ref 'InstanceType'
      - Namespace: aws:autoscaling:launchconfiguration
        OptionName: EC2KeyName
        Value: !Ref 'KeyPairName'
      - Namespace: aws:ec2:vpc
        OptionName: VPCId
        Value: !Ref 'VpcId'
      - !If
        - UseSubnet
        - Namespace: 'aws:ec2:vpc'
          OptionName: Subnets
          Value: !Ref 'SubnetId'
        - !Ref "AWS::NoValue"
amazon-web-services amazon-elastic-beanstalk amazon-cloudformation aws-codepipeline aws-codestar
1个回答
0
投票

您可以创建一个主模板,并将生产和开发模板称为嵌套堆栈。在这种情况下,您要做的就是复制template.yaml文件两次,将副本重命名为适当的名称,然后将其上传到S3存储桶。然后,您的template.yaml文件将引用这两个模板。像这样的东西:

AWSTemplateFormatVersion: 2010-09-09
Transform:
- AWS::CodeStar

Description: Master stack which creates all required nested stacks

Resources:
  ProdStack:
    Type: "AWS::CloudFormation::Stack"
    Properties:
      TemplateURL: https://your-bucket/templates/production-stack.yml"
      Parameters:
        InstanceType: t2.micro
        EBInstanceProfile: eg
        KeyPairName: eg
        VpcId: eg
        ProjectId: eg
        SubnetId: eg
        SolutionStackName: eg
        EBTrustRole: eg
      Tags:
        - Key: Environment
          Value: Production
  DevStack:
    Type: "AWS::CloudFormation::Stack"
    Properties:
      TemplateURL: https://your-bucket/templates/development-stack.yml"
      Parameters:
        InstanceType: t2.nano
        EBInstanceProfile: eg
        KeyPairName: eg
        VpcId: eg
        ProjectId: eg
        SubnetId: eg
        SolutionStackName: eg
        EBTrustRole: eg
      Tags:
        - Key: Environment
          Value: Dev

这将创建两个堆栈,并允许您为每个堆栈输入适当的参数。在这里看看:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stack.html

您的管道可能会保留在主文件中,并且两种环境都需要保留任何其他参数,这取决于您构造项目的方式。

© www.soinside.com 2019 - 2024. All rights reserved.