AWS CloudFormation에서 인프라를 구축해 보았습니다.

12793 단어 CloudFormationAWS
최근 AWS에 접하는 것이 늘어나고 여러가지 배울 수 있었습니다.
그 배운 것 중에서도 AWS CloudFormation이 앞으로 다양한 도움이 될 것 같아서,
비망록적인 느낌으로 남기고 싶습니다.

AWS CloudFormation이란?



AWS 리소스를 모델링하고 설정하는 데 도움이 되는 서비스입니다.
자세한 내용은 공식을 참조하십시오.
htps : // / cs. 아 ws. 아마존. 이 m / 그럼 _ jp / 아 WSC ぉ う ふぉ r 마치 온 / ㄱ st / うせ r ぐ で / うぇ 1 め. HTML

AWS에서 구축한 인프라를 코드로 남길 수 있을 뿐만 아니라,
그 코드를 바탕으로 다시 환경을 구축할 수 있으므로 복제하거나 관리하는 것이 간단해집니다.

AWS CloudFormation을 사용하여 인프라 구축



인프라 환경을 코드로 떨어뜨리려면 JSON 또는 YAML 형식의 파일을 준비합니다.
이번은 인터넷에 접속하는 것을 상정한 가상 서버의 환경을 YAML 형식으로 구축해 보고 싶습니다.
사용할 리소스는 EC2 인스턴스가 됩니다.
시작하기 전에 VPC 주변을 설정하고 마지막으로 EC2를 설정합니다.
VPC 등의 용어에 대한 설명은 공식을 참조하십시오.
htps : // / cs. 아 ws. 아마존. 이 m / 그럼 _ jp / vpc / ㅁ st / 우세 r 굿이 / ぁ t - s - 아마 존 - vpc. HTML

CloudFormation.yaml
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
  EC2KeyName:
    Type: AWS::EC2::KeyPair::KeyName
    Description: SSH public key
    Default: MyKey

Resources:
  # -------------------------
  # VPC
  # -------------------------
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.100.0.0/16
      EnableDnsSupport: true
      EnableDnsHostnames: true
      InstanceTenancy: default
      Tags:
        - Key: Name
          Value: VPC

  GatewayAttachment:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
        InternetGatewayId: !Ref InternetGW
        VpcId: !Ref VPC

  # -------------------------
  # Route
  # -------------------------
  RouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref VPC
      Tags:
        - Key: Name
          Value: RouteTable

  Route: 
    Type: AWS::EC2::Route
    Properties: 
      RouteTableId: !Ref RouteTable
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref InternetGW

  # ---------------------------
  # RouteTable Associate
  # ---------------------------
  PubSubnetRouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref PubSubnet
      RouteTableId: !Ref RouteTable

  # ---------------------------
  # Security Group
  # ---------------------------
  SecGrpEC2:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Web Server Rule
      VpcId: !Ref VPC
      Tags:
        - Key: Name
          Value: EC2-Sec
      SecurityGroupIngress:
        - { IpProtocol: tcp, FromPort: 80, ToPort: 80, CidrIp: 0.0.0.0/0 }
        - { IpProtocol: tcp, FromPort: 22, ToPort: 22, CidrIp: 255.255.255.254/32, Description: MyIP}

  # ---------------------------
  # Subnet
  # ---------------------------
  PubSubnet:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 10.100.1.0/24
      VpcId: !Ref VPC
      MapPublicIpOnLaunch: True
      AvailabilityZone: ap-northeast-1a
      Tags:
        - Key: Name
          Value: PubSubnet

  # ---------------------------
  # InternetGW
  # ---------------------------
  InternetGW:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
          Value: InternetGW

  # ---------------------------
  # EC2 instance
  # ---------------------------
  EC2Instance:
    Type: AWS::EC2::Instance
    DeletionPolicy: Delete
    Properties:
      AvailabilityZone: ap-northeast-1a
      ImageId: ami-068a6cefc24c301d2
      InstanceType: t2.micro
      KeyName: !Ref EC2KeyName
      SubnetId: !Ref PubSubnet
      BlockDeviceMappings:
        - DeviceName: /dev/sdb
          Ebs:
            VolumeSize: 20
            VolumeType: gp2
      SecurityGroupIds: 
        - !Ref SecGrpEC2
      UserData:
        Fn::Base64: |-
          #!/bin/bash
          yum -y update
          yum install -y httpd
          systemctl start httpd.service
          yum install -y docker
          service docker start
          usermod -a -G docker ec2-user
          curl -L "https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
          chmod +x /usr/local/bin/docker-compose
      Tags:
        - Key: Name
          Value: EC2Instance

※AMI에 대해서는 AWS측에서 준비되어 있는 것이 됩니다.
이상의 설정으로 인터넷에 접속 가능한 EC2 인스턴스를 구축할 수 있었습니다.
실제로 URL에서 전환하면 Apache 화면이 표시됩니다.


또한 CloudFormation의 디자이너 기능으로 이번에 구축한 환경을 확인할 수도 있습니다.


CloudFormation에서는 EC2 인스턴스를 만들 때 실행할 명령을
사용자 데이터로 설정할 수 있습니다.
이번에는 EC2 인스턴스를 세울 때 Docker를 넣도록 설정하고 있습니다.
또한 DeletionPolicy : Delete를 클릭하여
CloudFormation에서는 구축한 파일을 삭제했을 때 사용한 모든 리소스를 삭제할 수 있기 때문에 리소스를 지우는 것을 잊어버린 과금을 막을 수 있다는 점에서도 편리하다고 느낍니다.

오리지널 페이지는 이쪽

좋은 웹페이지 즐겨찾기