присоединение экземпляров ec2, созданных вложенным стеком, к стеку балансировки нагрузки с использованием облачной информации - PullRequest
0 голосов
/ 31 октября 2019

Я создал два веб-сервера, используя вложенный стек. Также создан отдельный вложенный стек для балансировщика нагрузки. Я хочу прикрепить два веб-сервера, созданные с помощью Load balancder. Я действительно не очень разбираюсь во вложенном стеке. Было бы здорово, если бы кто-нибудь оказал им помощь. вот код, используемый для создания моей архитектуры с использованием вложенного стека

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

AWSTemplateFormatVersion: 2010-09-09
Description: AWS CloudFormation Sample Template for creating EC2 instance
Parameters:
  InstanceType:
    Description: WebServer EC2 instance type
    Type: String
    Default: t2.micro
    ConstraintDescription: must be a valid EC2 instance type.
  KeyName:
    Description: Key pair name
    Type: 'AWS::EC2::KeyPair::KeyName'
    Default: muneeshlab
  AMIid:
    Description: Image ID
    Type: 'AWS::EC2::Image::Id'
    Default: ami-00eb20669e0990cb4
  SSHLocation:
    Description: The IP address range that can be used to SSH to the EC2 instances
    Type: String
    MinLength: '9'
    MaxLength: '18'
    Default: 0.0.0.0/0
Resources:
  WebInstanceOne:
    Type: 'AWS::EC2::Instance'
    Properties:
      InstanceType: !Ref InstanceType
      SecurityGroups:
        - !Ref InstanceSecurityGroup
      KeyName: !Ref KeyName
      ImageId: !Ref AMIid
  InstanceSecurityGroup:
    Type: 'AWS::EC2::SecurityGroup'
    Properties:
      GroupDescription: Enable SSH access via port 22
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: '22'
          ToPort: '22'
          CidrIp: !Ref SSHLocation
Outputs:
  InstanceId:
    Value:
      Ref: WebInstanceOne
    Description: ID of virtual server

**code for Load balancer**

AWSTemplateFormatVersion: 2010-09-09
Description: AWS CloudFormation Sample Template for creating LoadBalancer
Resources:
  ElasticLoadBalancer:
    Type: AWS::ElasticLoadBalancing::LoadBalancer
    Properties:
      AvailabilityZones: !GetAZs ''
      CrossZone: 'true'
      Listeners:
      - LoadBalancerPort: '80'
        InstancePort: '80'
        Protocol: HTTP
      HealthCheck:
        Target: TCP:80
        HealthyThreshold: '3'
        UnhealthyThreshold: '5'
        Interval: '30'
        Timeout: '5'
      ConnectionDrainingPolicy:
        Enabled: 'true'
        Timeout: '300'  

**code for final nested stack**

AWSTemplateFormatVersion: '2010-09-09'
Description: EC2 instance with functions
Parameters:
  KeyName:
    Description: Key pair name
    Type: AWS::EC2::KeyPair::KeyName
    Default: muneeshlab
Resources:
  MyWebserverstack1:
    Type: AWS::CloudFormation::Stack
    Properties:
        Parameters:
          KeyName: !Ref KeyName
        TemplateURL: https://s3.amazonaws.com/cloudstack-buck/cloud_web_server.yaml
        TimeoutInMinutes: '5'
  MyWebserverstack2:
    Type: AWS::CloudFormation::Stack
    Properties:
        Parameters:
          KeyName: !Ref KeyName
        TemplateURL: https://s3.amazonaws.com/cloudstack-buck/cloud_web_server.yaml
        TimeoutInMinutes: '5'
  ElasticLoadBalancer:
    Type: 'AWS::CloudFormation::Stack'
    DependsOn:
      - MyWebserverstack2
      - MyWebserverstack1
    Properties:
        TemplateURL:  https://s3.amazonaws.com/cloudstack-buck/LB.yaml

Примечание: Я могу создать три стека без каких-либо проблем. Единственное, что мне нужно, это прикрепить экземпляры с помощью Load Balancer

.

1 Ответ

1 голос
/ 31 октября 2019

Что вы хотите сделать:

  • Вывести ссылку на ресурс ELB в стеке балансировщика нагрузки
  • Перейдите на использование AWS :: AutoScaling :: AutoScalingGroup вместоAWS :: EC2 :: Instance. Вы можете использовать минимальное / максимальное значение / желаемое для имитации поведения отдельного экземпляра.
  • В родительском стеке передайте вывод стека балансировки нагрузки в качестве параметра в стек EC2, например: LoadBalancerName: !GetAtt 'ElasticLoadBalancer.Outputs.LoadBalancerOutputName'
  • Используйте ссылку на параметр LoadBalancerName для свойства LoadBalancerNames вашего AWS :: AutoScaling :: AutoScalingGroup
...