Ansible을 사용하여 자체 기본 Amazon VPC(Virtual Private Cloud) 구축

8818 단어 cloudvpcansibleaws
인프라용 온프레미스 모델이 있을 때와 마찬가지로 퍼블릭 또는 프라이빗 클라우드 인프라용 네트워크도 필요합니다. 예, 안전하고 격리된 사설망을 구축할 수 있습니다. AWS 리소스를 사용할 계획이 있는 경우 EC2 인스턴스를 사용하여 서버를 호스팅하고 싶다고 가정해 보겠습니다. 그런 다음 이를 위해 자체 네트워크를 만들거나 AWS에서 기본 네트워크를 사용하는 대신 Virtual Private Cloud(VPC)라고 하는 네트워크를 만들 수 있습니다.

VPC에 대해 자세히 알아보려면 here을 클릭하십시오!

이 섹션에서는 서로 다른 AZ에 배치된 EC2 인스턴스를 연결하고 인터넷 연결을 제공하는 VPC를 생성합니다. 이 시나리오에서는 다음이 필요합니다.
  • 리전의 VPC(me: ap-southeast-3 또는 인도네시아)
  • 각 AZ의 서브넷(총 3개)
  • 인터넷 게이트웨이;
  • 경로 테이블;
  • 보안 그룹.

  • 그런 다음 콘솔을 거치지 않고 대신 ansible을 사용하겠습니다. 왜요? 제 이전 포스팅을 보신 분들이라면 그 이유를 아실거에요 :)

    좋아, 내 이전 게시물처럼. 여기에서는 아직 EC2 인스턴스를 건드리지 않기 때문에 localhost를 대상 호스트로 사용합니다. 다음을 설치했는지 확인하세요.

  • AWS CLIsetup at least one credential ;

  • Ansible ;
  • ansible-galaxy collection install community.aws를 실행하여 AWS에 대한 Ansible 수집.

  • 참고*: 아래의 모든 세부 정보는 이미 준비한 경우 자신의 값으로 대체할 수 있습니다.

    인벤토리: host.yml

    ---
    
    localhost:
      hosts:
        127.0.0.1:
    


    플레이북: vpc.yml

    - name: vpc
      hosts: localhost
      connection: local
      gather_facts: no
      tasks:
    


    1. VPC 생성

        - name: create vpc
          amazon.aws.ec2_vpc_net:
            name: custom_vpc
            cidr_block: 10.0.0.0/16
            region: ap-southeast-3
          register: vpc
    


    2. 서브넷 생성
    (모든 서브넷이 동일한 VPC 네트워크 범위에 포함되지만 서브넷 간에 다른 네트워크에 포함되는지 확인).
  • 가용 영역 A

  •     - name: create subnet for first az
          amazon.aws.ec2_vpc_subnet:
            vpc_id: "{{ vpc.vpc.id }}"
            state: present
            az: ap-southeast-3a
            cidr: 10.0.1.0/28
          register: az1_apse3
    

  • 가용 영역 B

  •     - name: create subnet for second az
          amazon.aws.ec2_vpc_subnet:
            vpc_id: "{{ vpc.vpc.id }}"
            state: present
            az: ap-southeast-3b
            cidr: 10.0.2.0/28
          register: az2_apse3
    

  • 가용 영역 C

  •     - name: create subnet for third az
          amazon.aws.ec2_vpc_subnet:
            vpc_id: "{{ vpc.vpc.id }}"
            state: present
            az: ap-southeast-3c
            cidr: 10.0.3.0/28
          register: az3_apse3
    

    참고*: "vpc"변수는 위의 VPC 생성(1단계)에서 등록할 때만 사용 가능하거나 정의됩니다.

    3. 인터넷 게이트웨이 생성

        - name: create internet gateway
          amazon.aws.ec2_vpc_igw:
            vpc_id: "{{ vpc.vpc.id }}"
            state: present
          register: igw
    


    4. 라우팅 테이블 생성
    VPC를 생성하면 (기본) 경로 테이블이 함께 생성되지만 로컬 경로만 생성됩니다. 그런 다음 인터넷에 연결하려면 인터넷 게이트웨이를 통해 목적지(어디서나)가 있는 경로를 추가해야 합니다.

    참고*: 인터넷 연결을 제공할 서브넷을 선택할 수 있습니다. 이 경우 모두 퍼블릭 서브넷으로 만듭니다.

        - name: create custom route table
          amazon.aws.ec2_vpc_route_table:
            vpc_id: "{{ vpc.vpc.id }}"
            region: ap-southeast-3
            subnets:
              - "{{ az1_apse3.subnet.id }}"
              - "{{ az2_apse3.subnet.id }}"
              - "{{ az3_apse3.subnet.id }}"
            routes:
              - dest: 0.0.0.0/0
                gateway_id: "{{ igw.gateway_id }}"
    


    5. 보안 그룹 생성
    EC2 인스턴스에 허용할 포트를 이미 결정했다면 VPC 아래에서도 만들어 보겠습니다. 기본이 기본 VPC 아래에 있기 때문입니다. 예를 들어 EC2 인스턴스를 사용하여 웹 서버를 호스팅합니다. 따라서 원격용 포트 22와 웹 서버 액세스용 포트 80을 허용하겠습니다.

        - name: create security group
          amazon.aws.ec2_group:
            name: ssh-web
            description: allow ssh and http
            vpc_id: "{{ vpc.vpc.id }}"
            region: ap-southeast-3
            rules:
              - proto: tcp
                ports: 22
                cidr_ip: 0.0.0.0/0
              - proto: tcp
                ports: 80
                cidr_ip: 0.0.0.0/0
    


    플레이북을 실행하세요!

    $ ansible-playbook -i host.yml vpc.yml
    
    PLAY [vpc] **************************************************************************************************************************************************************
    
    TASK [create vpc] *******************************************************************************************************************************************************
    changed: [127.0.0.1]
    
    TASK [create subnet for first az] ***************************************************************************************************************************************
    changed: [127.0.0.1]
    
    TASK [create subnet for second az] **************************************************************************************************************************************
    changed: [127.0.0.1]
    
    TASK [create subnet for third az] ***************************************************************************************************************************************
    changed: [127.0.0.1]
    
    TASK [create internet gateway] ******************************************************************************************************************************************
    changed: [127.0.0.1]
    
    TASK [create custom route table] ****************************************************************************************************************************************
    changed: [127.0.0.1]
    
    TASK [create security group] ********************************************************************************************************************************************
    changed: [127.0.0.1]
    
    PLAY RECAP **************************************************************************************************************************************************************
    127.0.0.1                  : ok=7    changed=7    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
    


    점검 해보자!

    $ aws ec2 describe-vpcs --query 'Vpcs[?Tags[?Value==`custom_vpc`]].{VPC:VpcId, CIDR:CidrBlock}'
    [
        {
            "VPC": "vpc-0a6bbb5ca26b09679",
            "CIDR": "10.0.0.0/16"
        }
    ]
    



    $ aws ec2 describe-subnets --query 'Subnets[?VpcId==`vpc-0a6bbb5ca26b09679`].{AZ:AvailabilityZone, CIDR:CidrBlock, SubnetID:SubnetId}'
    [
        {
            "AZ": "ap-southeast-3c",
            "CIDR": "10.0.3.0/28",
            "SubnetID": "subnet-00b4e72d63a2125de"
        },
        {
            "AZ": "ap-southeast-3a",
            "CIDR": "10.0.1.0/28",
            "SubnetID": "subnet-0276d466994fa3087"
        },
        {
            "AZ": "ap-southeast-3b",
            "CIDR": "10.0.2.0/28",
            "SubnetID": "subnet-07bb6501337e4f87b"
        }
    ]
    


    참고*: VPC는 ​​아직 사용되지 않고 네트워크 트래픽에 대한 가용성 위험이나 대역폭 제약을 유발하지 않으므로 위에서 생성한 것에 대해 비용을 청구하지 않습니다. 괜찮아요! 모두 삭제하려면 다음에 EC2 인스턴스에 여전히 필요하기 때문에 마지막에 삭제하겠습니다.

    그것이 VPC를 위한 것입니다! 이 VPC를 사용하여 EC2 인스턴스를 시작합니다. 다음 포스트로 넘어가자!

    참조:
    https://docs.ansible.com/ansible/latest/collections/amazon/aws/ec2_vpc_net_module.html
    https://docs.ansible.com/ansible/latest/collections/amazon/aws/ec2_vpc_subnet_module.html
    https://docs.ansible.com/ansible/devel/collections/amazon/aws/ec2_vpc_route_table_module.html
    https://docs.ansible.com/ansible/latest/collections/amazon/aws/ec2_vpc_igw_module.html
    https://docs.ansible.com/ansible/latest/collections/amazon/aws/ec2_group_module.html

    좋은 웹페이지 즐겨찾기