GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So verwenden Sie Cloudformation zum Erstellen einer VPC auf AWS

Mit Cloudformation können wir AWS-Ressourcen sehr einfach erstellen und verwalten. Cloudformation kann verwendet werden, um alle AWS-Ressourcen mithilfe einer Textdatei zu verwalten. Cloudformation ermöglicht es uns, unsere Infrastruktur und Anwendungen zu erstellen und zu modellieren, ohne manuell Aktionen ausführen zu müssen. Cloudformation hilft uns, unsere komplette Infrastruktur in einer Textdatei oder Vorlage zu verwalten. Die Cloudformation-Vorlage ist eine formatierte Textdatei in JSON- oder YAML-Sprache, die unsere AWS-Infrastruktur beschreibt.

In diesem Artikel sehen wir eine Cloudformation zum Erstellen einer VPC mit 2 öffentlichen und 2 privaten Subnetzen.

Voraussetzungen

  1. AWS-Konto (erstellen, falls Sie noch keins haben).
  2. Grundlegendes Verständnis von Cloudformation-Vorlagen.

Was werden wir tun?

  1. Melden Sie sich bei AWS an.
  2. Erstellen Sie eine Vorlage.
  3. Erstellen Sie einen Wolkenformationsstapel 

Melden Sie sich bei AWS an

  1. Klicken Sie hier, um zur AWS-Anmeldeseite zu gelangen.

Wenn wir auf den obigen Link klicken, sehen wir eine Webseite wie folgt, auf der wir uns mit unseren Anmeldedaten anmelden müssen.

Sobald wir uns erfolgreich bei AWS angemeldet haben, sehen wir die Hauptkonsole mit allen Diensten, die wie folgt aufgelistet sind.

Vorlage erstellen

Bevor wir mit der Erstellung eines Stacks fortfahren, sollten wir eine Vorlage haben, die zum Erstellen einer VPC verwendet wird. Kopieren Sie den folgenden Code und speichern Sie ihn auf einem lokalen Computer.

---
AWSTemplateFormatVersion: 2010-09-09
Description: >
  This Templates creates a VPC with 3 public and 3 private subnets.
Parameters:
  VpcCIDR:
    Type: String
    Description: VPC CIDR (Do Not Change if no customization is required). 
    Default: 10.10.0.0/16
  PrivateAZ1SubnetCIDR:
    Type: String
    Description: Subnet CIDR for 1st Availability Zone (Do Not Change if no customization is required).
    Default: 10.10.80.0/21
  PrivateAZ2SubnetCIDR:
    Type: String
    Description: Subnet CIDR for 2nd Availability Zone (Do Not Change if no customization is required).
    Default: 10.10.88.0/21
  PrivateAZ3SubnetCIDR:
    Type: String
    Description: Subnet CIDR for 3rd Availability Zone (Do Not Change if no customization is required).
    Default: 10.10.96.0/21
  PublicAZ1SubnetCIDR:
    Type: String
    Description: Subnet CIDR for 1st Availability Zone (Do Not Change if no customization is required).
    Default: 10.10.0.0/21
  PublicAZ2SubnetCIDR:
    Type: String
    Description: Subnet CIDR for 2nd Availability Zone (Do Not Change if no customization is required).
    Default: 10.10.8.0/21
  PublicAZ3SubnetCIDR:
    Type: String
    Description: Subnet CIDR for 3rd Availability Zone (Do Not Change if no customization is required). 
    Default: 10.10.16.0/21
Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
      - Label:
          default: VPC
        Parameters:
          - VpcCIDR
      - Label:
          default: Availabilty Zone 1
        Parameters:
          - PublicAZ1SubnetCIDR
          - PrivateAZ1SubnetCIDR
      - Label:
          default: Availabilty Zone 1
        Parameters:
          - PublicAZ2SubnetCIDR
          - PrivateAZ2SubnetCIDR
      - Label:
          default: Availabilty Zone 1
        Parameters:
          - PublicAZ3SubnetCIDR
          - PrivateAZ3SubnetCIDR
Resources:
  Vpc:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: !Ref VpcCIDR
      Tags:
        - Key: Name
          Value: !Sub ${AWS::StackName}
  InternetGateway:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
          Value: !Sub ${AWS::StackName}
  VPCGatewayAttachment:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      InternetGatewayId: !Ref InternetGateway
      VpcId: !Ref Vpc
  # Public Subnets - Route Table
  PublicRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref Vpc
      Tags:
        - Key: Name
          Value: !Sub ${AWS::StackName}-public
        - Key: Type
          Value: public
  PublicSubnetsRoute:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId: !Ref PublicRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref InternetGateway
    DependsOn: VPCGatewayAttachment
  # Public Subnets
  PublicAZ1Subnet:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref Vpc
      CidrBlock: !Ref PublicAZ1SubnetCIDR
      AvailabilityZone: !Select [0, !GetAZs ""]
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: !Sub
            - ${AWS::StackName}-public-${AZ}
            - { AZ: !Select [0, !GetAZs ""] }
        - Key: Type
          Value: public
  PublicAZ1SubnetRouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref PublicAZ1Subnet
      RouteTableId: !Ref PublicRouteTable
  PublicAZ2Subnet:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref Vpc
      CidrBlock: !Ref PublicAZ2SubnetCIDR
      AvailabilityZone: !Select [1, !GetAZs ""]
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: !Sub
            - ${AWS::StackName}-public-${AZ}
            - { AZ: !Select [1, !GetAZs ""] }
        - Key: Type
          Value: public
  PublicAZ2SubnetRouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref PublicAZ2Subnet
      RouteTableId: !Ref PublicRouteTable
  PublicAZ3Subnet:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref Vpc
      CidrBlock: !Ref PublicAZ3SubnetCIDR
      AvailabilityZone: !Select [2, !GetAZs ""]
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: !Sub
            - ${AWS::StackName}-public-${AZ}
            - { AZ: !Select [2, !GetAZs ""] }
        - Key: Type
          Value: public
  PublicAZ3SubnetRouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref PublicAZ3Subnet
      RouteTableId: !Ref PublicRouteTable
  # Private Subnets - NAT Gateways
  AZ1NatGatewayEIP:
    Type: AWS::EC2::EIP
    Properties:
      Domain: vpc
    DependsOn: VPCGatewayAttachment
  AZ1NatGateway:
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId: !GetAtt AZ1NatGatewayEIP.AllocationId
      SubnetId: !Ref PublicAZ1Subnet
  AZ2NatGatewayEIP:
    Type: AWS::EC2::EIP
    Properties:
      Domain: vpc
    DependsOn: VPCGatewayAttachment
  AZ2NatGateway:
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId: !GetAtt AZ2NatGatewayEIP.AllocationId
      SubnetId: !Ref PublicAZ2Subnet
  AZ3NatGatewayEIP:
    Type: AWS::EC2::EIP
    Properties:
      Domain: vpc
    DependsOn: VPCGatewayAttachment
  AZ3NatGateway:
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId: !GetAtt AZ3NatGatewayEIP.AllocationId
      SubnetId: !Ref PublicAZ3Subnet
  # Private Subnets
  PrivateAZ1Subnet:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref Vpc
      CidrBlock: !Ref PrivateAZ1SubnetCIDR
      AvailabilityZone: !Select [0, !GetAZs ""]
      Tags:
        - Key: Name
          Value: !Sub
            - ${AWS::StackName}-private-${AZ}
            - { AZ: !Select [0, !GetAZs ""] }
        - Key: Type
          Value: private
  PrivateAZ1RouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref Vpc
      Tags:
        - Key: Name
          Value: !Sub
            - ${AWS::StackName}-private-${AZ}
            - { AZ: !Select [0, !GetAZs ""] }
        - Key: Type
          Value: private
  PrivateAZ1Route:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId: !Ref PrivateAZ1RouteTable
      DestinationCidrBlock: 0.0.0.0/0
      NatGatewayId: !Ref AZ1NatGateway
  PrivateAZ1RouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref PrivateAZ1Subnet
      RouteTableId: !Ref PrivateAZ1RouteTable
  PrivateAZ2Subnet:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref Vpc
      CidrBlock: !Ref PrivateAZ2SubnetCIDR
      AvailabilityZone: !Select [1, !GetAZs ""]
      Tags:
        - Key: Name
          Value: !Sub
            - ${AWS::StackName}-private-${AZ}
            - { AZ: !Select [1, !GetAZs ""] }
        - Key: Type
          Value: private
  PrivateAZ2RouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref Vpc
      Tags:
        - Key: Name
          Value: !Sub
            - ${AWS::StackName}-private-${AZ}
            - { AZ: !Select [1, !GetAZs ""] }
        - Key: Type
          Value: private
  PrivateAZ2Route:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId: !Ref PrivateAZ2RouteTable
      DestinationCidrBlock: 0.0.0.0/0
      NatGatewayId: !Ref AZ2NatGateway
  PrivateAZ2RouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref PrivateAZ2Subnet
      RouteTableId: !Ref PrivateAZ2RouteTable
  PrivateAZ3Subnet:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref Vpc
      CidrBlock: !Ref PrivateAZ3SubnetCIDR
      AvailabilityZone: !Select [2, !GetAZs ""]
      Tags:
        - Key: Name
          Value: !Sub
            - ${AWS::StackName}-private-${AZ}
            - { AZ: !Select [2, !GetAZs ""] }
        - Key: Type
          Value: private
  PrivateAZ3RouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref Vpc
      Tags:
        - Key: Name
          Value: !Sub
            - ${AWS::StackName}-private-${AZ}
            - { AZ: !Select [2, !GetAZs ""] }
        - Key: Type
          Value: private
  PrivateAZ3Route:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId: !Ref PrivateAZ3RouteTable
      DestinationCidrBlock: 0.0.0.0/0
      NatGatewayId: !Ref AZ3NatGateway
  PrivateAZ3RouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref PrivateAZ3Subnet
      RouteTableId: !Ref PrivateAZ3RouteTable
  
Outputs:
  VpcId:
    Description: VPC Id
    Value: !Ref Vpc
    Export:
      Name: !Sub "${AWS::StackName}-VPC-ID"

Erstellen Sie einen Cloudformation-Stack

Um einen Cloudformation Stack zu erstellen, klicken Sie oben links auf „Services“ und suchen Sie nach „Cloudformation“.

Klicken Sie im Haupt-Dashboard auf „Stack erstellen“ -> „Mit neuen Ressourcen (Standard)“.

Der Stack benötigt eine Vorlagendatei, die eine lokale Datei oder eine Objektdatei im S3-Bucket sein kann. Da wir eine lokale Vorlage haben werden, klicken Sie auf „Vorlage ist fertig“ -> „Vorlagendatei hochladen“, klicken Sie auf „Datei auswählen“ und wählen Sie die lokale Vorlagendatei aus und fahren Sie fort.

Geben Sie dem Stack einen Namen, lassen Sie alle anderen Parameter unverändert.

Geben Sie bei Bedarf Tags an.

Scrollen Sie auf der Seite nach unten und klicken Sie auf „Stack erstellen“

Dies wird einige Zeit dauern, warten Sie bis dahin.

Sie können den Status oder das stattfindende Ereignis auf der Registerkarte "Ereignisse" sehen.

Jetzt können Sie zu VPC gehen und nach der erstellten VPC suchen. Um zu VPC zu gelangen, klicken Sie oben auf „Dienste“ und suchen Sie links nach VPC.

Im Haupt-Dashboard sehen Sie die Anzahl der erstellten VPCs, Subnetze, Routing-Tabellen, Internet-Gateways und Nat-Gateways.

Sie können die VPC löschen, indem Sie einfach den Stack löschen, wenn Sie ihn nicht mehr benötigen.

Schlussfolgerung

In diesem Artikel haben wir die Schritte zum Erstellen eines Cloudformation Stacks zum Erstellen einer VPC mit 2 öffentlichen und 2 privaten Subnetzen gesehen.


Linux
  1. So verwenden Sie den mkdir-Befehl zum Erstellen oder Erstellen eines Linux-Verzeichnisses

  2. So erstellen und verwenden Sie Subdomains

  3. Erstellen Sie mit Terraform eine Virtual Private Cloud (VPC) auf AWS

  4. So erstellen Sie eine IAM-Rolle in AWS mit Terraform

  5. So verwenden Sie AWS CLI zum Verwalten von Amazon S3

So erstellen Sie ein VPC-Peering zwischen 2 VPCs auf AWS

So erstellen Sie einen S3-Bucket mit Python Boto3 auf AWS

So erstellen Sie ein SNS-Thema und einen Abonnenten auf AWS

So erstellen Sie eine DynamoDB-Tabelle in AWS

So verwenden Sie Cloudformation zum Erstellen von SQS-Warteschlangen auf AWS

So erstellen und verwenden Sie eine Auslagerungsdatei unter Linux