CloudFormation을 사용하여 VPC + 서브넷 + EC2 구성 만들기

SysOps 웹 문제 모음을 풀면 CloudFormation 문제가 발생했습니다.
"이것은 실제로 만져 보는 것이 좋을 것 같습니다."라고 느꼈기 때문에 시도했습니다.

CloudFormation이란 무엇인가요?
개요를 잡는 계기가 되면 매우 기쁩니다.
【AWS】CloudFormation에 대해 정리하기: 학습 메모

이 구성을 만듭니다.





이번은 여러 사정(※)에 의해 오하이오리전에서 작성합니다.
여러분 적당히 좋아하는 리전으로 해 보세요.
※자사의 sandbox 환경에서 도쿄 리전에 작성하려고 하면, VPC의 상한수에 이르고 있어 만들 수 없었다

사전 준비 ①: 템플릿 준비



YAML/JSON 두 형식 모두 대단합니다.
코멘트를 넣을 수 있다는 점에서 YAML 쪽이 좋을까라고 생각하기 때문에, 이번은 YAML로 했습니다.

test-template.yml
AWSTemplateFormatVersion: '2010-09-09'
Description: Test cfn Template

# ----------------------------------------------------------------
#     Parameters
# ----------------------------------------------------------------
Parameters:
  InstanceType:
    Type: String
    Default: t2.micro
    AllowedValues:
      - t2.micro
      - t2.small
      - t2.medium
    Description: Select EC2 instance type.
  KeyPair:
    Description: Select KeyPair Name.
    Type: AWS::EC2::KeyPair::KeyName


# ----------------------------------------------------------------
#     Resources
# ----------------------------------------------------------------

# --------------------  VPCの定義ここから --------------------
Resources:
  cfnVpc:
    Type: 'AWS::EC2::VPC'
    Properties:
      CidrBlock: '192.168.0.0/16'
      Tags:
        - Key: 'Name'
          Value: 'test-vpc'
# --------------------  VPCの定義ここまで --------------------

# --------------------  サブネットの定義ここから --------------------
  cfnSubnet:
    Type: 'AWS::EC2::Subnet'
    Properties:
      CidrBlock: '192.168.1.0/24'
      MapPublicIpOnLaunch: true
      Tags:
        - Key: 'Name'
          Value: 'test-cfn-subnet'
      VpcId: !Ref cfnVpc
# --------------------  サブネットの定義ここまで --------------------

# --------------------  ネットワーク周りの定義ここから --------------------
  cfnInternetGateway:
    Type: 'AWS::EC2::InternetGateway'
    Properties:
      Tags:
      - Key: 'Name'
        Value: 'test-cfn-igw'
  cfnAttachGateway:
    Type: 'AWS::EC2::VPCGatewayAttachment'
    Properties:
      VpcId: !Ref cfnVpc
      InternetGatewayId: !Ref cfnInternetGateway
  cfnRouteTable:
    Type: 'AWS::EC2::RouteTable'
    Properties:
      Tags:
        - Key: 'Name'
          Value: 'test-cfn-rt'
      VpcId: !Ref cfnVpc
  cfnRoute:
    Type: 'AWS::EC2::Route'
    DependsOn: cfnInternetGateway
    Properties:
      RouteTableId: !Ref cfnRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref cfnInternetGateway
  cfnSubnetRouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref cfnSubnet
      RouteTableId: !Ref cfnRouteTable
# --------------------  ネットワーク周りの定義ここまで --------------------

# --------------------  EC2の定義ここから --------------------
  cfnEC2Instance:
    Type: 'AWS::EC2::Instance'
    Properties:
      ImageId: "ami-07c8bc5c1ce9598c3" # オハイオリージョンの最新のAmazon Linux 2 AMI にしています
      InstanceType: !Ref InstanceType
      SubnetId: !Ref cfnSubnet
      BlockDeviceMappings:
        - DeviceName: '/dev/xvda'
          Ebs:
            VolumeType: 'gp2'
            VolumeSize: 8
      Tags:
        - Key: 'Name'
          Value: 'test-cfn-ec2-instance'
      SecurityGroupIds:
        - !Ref cfnSecurityGroup
      KeyName: !Ref KeyPair
  cfnSecurityGroup:
    Type: "AWS::EC2::SecurityGroup"
    Properties:
      GroupDescription: "cfnSecurityGroup"
      VpcId: !Ref cfnVpc
      Tags:
        - Key: 'Name'
          Value: 'test-cfn-ssh-sg'
      SecurityGroupIngress:
      - IpProtocol: tcp
        FromPort: '22'
        ToPort: '22'
        CidrIp: 0.0.0.0/0
# --------------------  EC2の定義ここまで --------------------

※ 상기라면 네트워크의 보안이 느슨해지므로 적절히 수정하여 사용하십시오.
※ 참고:AWS 공식 샘플 템플릿 가 다수 공개되고 있는 것 같습니다

사전 준비 ② : 키 페어 작성



이번에 작성하는 EC2 인스턴스에 SSH 접속할 수 있도록 하고 싶으므로, 미리 키 페어를 만들어 둡니다.
「키 페어 어디에서 만들까?」라고 되어 버렸으므로, 여기 를 보면서 만들었습니다.

작업 절차



1. AWS 콘솔에 로그인

2. [CloudFormation]을 입력하고 Enter 키를 누릅니다.

CloudFormation에서 스택 만들기



1. 스택 만들기를 클릭합니다.

2. 스택 만들기 > 새 리소스 사용(표준)을 클릭합니다.


1단계: 템플릿 지정



1. 다음을 설정하고 [다음]을 클릭합니다.

  • 템플릿 준비 : 템플릿 준비 완료
  • 템플릿 지정 : 템플릿 파일 업로드 (사전 준비한 템플릿을 선택합니다.)

  • 2단계: 스택 세부정보 지정



    이 템플릿에서 [Parameters]를 정의했기 때문에 매개 변수 필드가 표시됩니다.
    EC2 인스턴스 유형 · SSH 연결할 때 사용할 키 쌍을 선택합니다.

    1. 원하는 스택 이름을 입력하고 다음을 클릭합니다.


    3단계: 스택 옵션 설정



    1. 임의의 항목을 입력하고 [다음]을 클릭합니다.

    여기에 태그를 설정하면 이번에 작성한 모든 리소스에 동일한 태그가 붙어 있으므로 매우 유용합니다.
    (템플릿 내에서 하나 하나 쓰는 것보다 여기에서 설정하는 것이 편하다)
    내 사내 샌드박스 환경에서 실행했기 때문에 내가 알 수 있도록 아래 태그를 지정했습니다.
  • 키: [Owner]
  • 값: 자신의 이름


  • 4단계: 리뷰



    1. 설정값에 오류가 없는지 확인하고 스택 생성을 클릭합니다.


    스택 작성 중에는 이런 느낌



    이벤트 열에서 작성 진행 상황을 확인할 수 있습니다.


    상태가 [CREATE_COMPLETE]가되면 완성됩니다!

    EC2 인스턴스에 대한 SSH 로그인도 제대로



    다음 명령으로 SSH 로그인할 수 있습니다.
    ssh -i [秘密鍵のパス] ec2-user@[EC2のIPv4パブリックIP]
    



    이번에 만든 녀석을 다 지우고 싶은데?



    스택마다 삭제하면 모두 사라집니다.
    꾸준히 삭제해 나가지 않아도 좋기 때문에 베리.

    참고


  • 손을 움직이면서 2주 동안 배우기 AWS 기본부터 응용까지
  • Amazon EC2 키 쌍 및 Linux 인스턴스 - Amazon Elastic Compute Cloud
  • 샘플 템플릿 - AWS CloudFormation
  • 좋은 웹페이지 즐겨찾기