Как создать решение CloudFormation и Elastic Beanstalk, которое имеет только один экземпляр EC2? - PullRequest
0 голосов
/ 28 октября 2019

Этот прямой фрагмент кода CloudFormation является частью примера приложения ElasticBeanstalk, предоставленного в https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/sample-templates-services-ap-south-1.html

    "Mappings" : {
    "Region2Principal" : {
      "us-east-1"      : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" },
      "us-west-2"      : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" },
      "us-west-1"      : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" },
      "eu-west-1"      : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" },
      "eu-west-2"      : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" },
      "eu-west-3"      : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" },
      "ap-southeast-1" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" },
      "ap-northeast-1" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" },
      "ap-northeast-2" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" },
      "ap-northeast-3" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" },
      "ap-southeast-2" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" },
      "ap-south-1"     : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" },
      "us-east-2"      : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" },
      "ca-central-1"   : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" },
      "sa-east-1"      : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" },
      "cn-north-1"     : { "EC2Principal" : "ec2.amazonaws.com.cn", "OpsWorksPrincipal" : "opsworks.amazonaws.com.cn" },
      "cn-northwest-1" : { "EC2Principal" : "ec2.amazonaws.com.cn", "OpsWorksPrincipal" : "opsworks.amazonaws.com.cn" },
      "eu-central-1"   : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" },
      "eu-north-1"     : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" }
    }

  },

  "Conditions" : {
    "Is-EC2-VPC"     : { "Fn::Or" : [ {"Fn::Equals" : [{"Ref" : "AWS::Region"}, "eu-central-1" ]},
                                      {"Fn::Equals" : [{"Ref" : "AWS::Region"}, "cn-north-1" ]}]},
    "Is-EC2-Classic" : { "Fn::Not" : [{ "Condition" : "Is-EC2-VPC"}]}
  },

  "Resources": {
    "WebServerRole": {
      "Type": "AWS::IAM::Role",
      "Properties" : {
        "AssumeRolePolicyDocument" : {
          "Statement"  : [{
            "Effect"   : "Allow",
            "Principal": { "Service": [{ "Fn::FindInMap" : ["Region2Principal", {"Ref" : "AWS::Region"}, "EC2Principal"]}] },
            "Action"   : [ "sts:AssumeRole" ]
          } ]
        },
        "Path": "/"
      }
    },

    "WebServerRolePolicy": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyName" : "WebServerRole",
        "PolicyDocument" : {
          "Statement"  : [ {
            "Effect"    : "Allow",
            "NotAction" : "iam:*",
            "Resource"  : "*"
          } ]
        },
        "Roles": [ { "Ref": "WebServerRole" } ]
      }
    },

    "WebServerInstanceProfile": {
      "Type": "AWS::IAM::InstanceProfile",
      "Properties": {
        "Path": "/",
        "Roles": [ { "Ref": "WebServerRole" } ]
      }
    },

    "SampleApplication": {
      "Type": "AWS::ElasticBeanstalk::Application",
      "Properties": {
        "Description": "AWS Elastic Beanstalk Sample Application"
      }
    },

    "SampleApplicationVersion" : {
      "Type" : "AWS::ElasticBeanstalk::ApplicationVersion",
      "Properties" : {
        "Description" : "Version 1.0",
        "ApplicationName" : { "Ref" : "SampleApplication" },
        "SourceBundle" : {
          "S3Bucket": { "Fn::Join" : ["-", ["cloudformation-examples", {"Ref" : "AWS::Region" }]]},
          "S3Key": "CloudFormationBeanstalkRDSExample.war"
        }
      }
    },

У меня есть только учетная запись Free Tier на AWS, поэтому я не хочу разыгрывать деньги напроверить, как это ведет себя. Описание говорит:

ПРЕДУПРЕЖДЕНИЕ Этот шаблон создает один или несколько экземпляров Amazon EC2 и экземпляр базы данных Amazon Relational Database Service. Вам будет выставлен счет за используемые ресурсы AWS, если вы создадите стек из этого шаблона.

Моя проблема состоит в том, чтобы узнать, сколько экземпляров это создаст, если запустить ? Я не вижу каких-либо ограничений, но часть Mappings кажется настолько длинной, что я полагаю, что больше, чем один, по крайней мере там. Conditions имеет две записи, это также означает два экземпляра? Я хотел бы найти решение с работающим только одним экземпляром, достаточно ли будет просто ограничить регионы или как ограничить количество созданного EC2 только одним?

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

На самом деле, я нашел способ:

Я взял это решение за базовое:

AWSTemplateFormatVersion: '2010-09-09'
Resources:
  sampleApplication:
    Type: AWS::ElasticBeanstalk::Application
    Properties:
      Description: AWS Elastic Beanstalk Sample Application
  sampleApplicationVersion:
    Type: AWS::ElasticBeanstalk::ApplicationVersion
    Properties:
      ApplicationName:
        Ref: sampleApplication
      Description: AWS ElasticBeanstalk Sample Application Version
      SourceBundle:
        S3Bucket: !Sub "elasticbeanstalk-samples-${AWS::Region}"
        S3Key: php-newsample-app.zip
  sampleConfigurationTemplate:
    Type: AWS::ElasticBeanstalk::ConfigurationTemplate
    Properties:
      ApplicationName:
        Ref: sampleApplication
      Description: AWS ElasticBeanstalk Sample Configuration Template
      OptionSettings:
      - Namespace: aws:autoscaling:asg
        OptionName: MinSize
        Value: '2'
      - Namespace: aws:autoscaling:asg
        OptionName: MaxSize
        Value: '6'
      - Namespace: aws:elasticbeanstalk:environment
        OptionName: EnvironmentType
        Value: LoadBalanced
      SolutionStackName: 64bit Amazon Linux 2018.03 v2.8.15 running PHP 7.2
  sampleEnvironment:
    Type: AWS::ElasticBeanstalk::Environment
    Properties:
      ApplicationName:
        Ref: sampleApplication
      Description: AWS ElasticBeanstalk Sample Environment
      TemplateName:
        Ref: sampleConfigurationTemplate
      VersionLabel:
        Ref: sampleApplicationVersion

(найдено в https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-elasticbeanstalk.html)

Там, еслиЯ изменяю EnvironmentType на SingleInstance, я получаю решение для одного экземпляра, как я хочу.

(найдено в https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-options-general.html#command-options-general-elasticbeanstalkenvironment)

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

0 голосов
/ 28 октября 2019

Я думаю, что вы используете этот шаблон. https://s3 -ap-south-1.amazonaws.com / cloudformation-templates-ap-south-1 / ElasticBeanstalk_Simple.template

В этом случае создается база данных, которая является базой данных.t2.small. Уровень бесплатного пользования Amazon для RDS является исключительно db.t2.micro. Если вы измените шаблон на уровне бесплатного пользования, это предупреждение должно исчезнуть

Более подробная информация здесь: https://aws.amazon.com/rds/free/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...