Ansible을 사용하여 수행할 수 있는 Amazon Linux 2의 중요 설정

Amazon Linux 2는 AWS에서 제공하는 Linux OS입니다. 그렇다면 다른 OS와 무엇이 다를까요? 우리 모두가 알고 있는 것은 이 OS를 통해 AWS 명령을 수행해야 할 때 AWS CLI를 설치할 필요가 없다는 것입니다. 다른 OS에서는 얻을 수 없는 가장 "놀라운 부분"이라고 생각합니다.

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

그런 다음 Amazon Linux 2에 대한 "중요 설정"을 설정하려고 했습니까? 여기서는 서버를 "실제로"프로덕션용으로 사용하거나 호스트 웹 서버와 같은 목적으로 사용하기 전에 수행해야 할 기본 구성을 의미합니다. 5가지로 요약해봤습니다.
  • 업데이트 중
  • 패키지를 설치합니다(업데이트 후 수행해야 함). 이것은 선택 사항이거나 마지막 단계에서 실행할 수 있지만 간단한 웹 서버를 설치하고 업데이트 후 실행할 것이기 때문에 2번에 배치했습니다.
  • 관리 사용자
  • 시간대 설정(Amazon이 기본적으로 Time Sync를 이미 제공했으므로 NTP 클라이언트 구성을 건너뛰겠습니다).
  • 호스트 이름 설정

  • 좋아, 내가 제목에서 언급했듯이. 이 5가지 모두 ansible로 수행할 수 있습니다. 우리 모두 알다시피 ansible은 구성 관리 도구이기도 합니다.

    전제 조건:

  • AWS CLIsetup at least one credential ;

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

  • 그 전에 인스턴스를 시작하여 나중에 구성하겠습니다.

    인벤토리: hosts.yml

    ---
    
    localhost:
      hosts:
        127.0.0.1:
    


    플레이북: ec2.yml

        - name: launch new instance
          amazon.aws.ec2_instance:
            name: amazonlinux2
            region: ap-southeast-3
            key_name: ec2-user
            instance_type: t3.micro
            security_group: ssh-web
            vpc_subnet_id: subnet-0276d466994fa3087
            network:
              assign_public_ip: true
              delete_on_termination: true
            image_id: ami-0de34ee5744189c60 
            volumes: 
              - device_name: /dev/xvda
                ebs: 
                  volume_size: 8
                  volume_type: gp2
                  delete_on_termination: true
          tags:
            - ec2_new
    


    플레이북을 실행하세요!

    $ ansible-playbook -i host.yml ec2.yml -t ec2_new
    
    PLAY [ec2] **************************************************************************************************************************************************************
    
    TASK [launch new instance] **********************************************************************************************************************************************
    changed: [127.0.0.1]
    
    PLAY RECAP **************************************************************************************************************************************************************
    127.0.0.1                  : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
    



    $ aws ec2 describe-instances --query 'Reservations[].Instances[].{ID:InstanceId, PrivateIP:PrivateIpAddress, PublicIP:PublicIpAddress, Name:Tags[?Key==`Name`].Value}'
    [
        {
            "ID": "i-0187e4bb5d2f2007c",
            "PrivateIP": "10.0.1.7",
            "PublicIP": "108.136.226.235",
            "Name": [
                "amazonlinux2a"
            ]
        },
        {
            "ID": "i-050cfb6ee36a57131",
            "PrivateIP": "10.0.1.5",
            "PublicIP": "108.136.225.50",
            "Name": [
                "amazonlinux2"
            ]
        },
        {
            "ID": "i-09c46dba004ed7bd8",
            "PrivateIP": "10.0.2.8",
            "PublicIP": "108.136.235.232",
            "Name": [
                "amazonlinux2b"
            ]
        },
        {
            "ID": "i-02c7573fff1215e65",
            "PrivateIP": "10.0.3.11",
            "PublicIP": "108.136.150.180",
            "Name": [
                "amazonlinux2c"
            ]
        }
    ]
    


    위에 나열된 인스턴스에서 IP 108.136.225.50의 amazonlinux2 인스턴스를 사용하겠습니다.

    1. 업데이트*를 이름으로 사용하면 yum -y update로 바뀝니다.

    - name: al2
      hosts: new
      become: true
      gather_facts: no
      tasks:
        - name: update
          yum:
            name: "*"
            state: latest
    


    2. 패키지 설치
    여기서는 간단한 웹 서버용 최신 httpd만 설치하겠습니다.

        - name: install web server
          yum:
            name: httpd
            state: latest
    
        - name: install web server
          service:
            name: httpd
            enabled: yes
    
        - name: modify home page
          shell: 'echo "Hello World!" >> /var/www/html/index.html'
    


    3. 관리 사용자
    ec2-user는 Amazon Linux 2의 기본 사용자입니다. 그렇다면 서버에 액세스하는 사람이 몇 명 있으면 어떨까요? 그들은 어떤 변경이든 할 수 있으며 우리는 누가 ec2-user라는 동일한 사용자 이름을 사용하는지 식별하기 어려울 것입니다. 따라서 이름에 따라 다른 사용자를 제공해야 합니다. 또한 ssh 키를 사용하여 EC2 인스턴스에 연결하고 sudo로 전환할 때 암호가 필요 없이 서버에서 모든 액세스 수준을 갖는 sysadmin이라고 가정하기 때문에 sudoer로 작동하도록 해야 할 수도 있습니다.

        - name: create user
          user:
            name: nurulramadhona
            shell: /bin/bash
    
        - name: copy pubkey
          authorized_key:
            user: nurulramadhona
            state: present
            key: "{{ lookup('file', '/home/nurulramadhona/.ssh/id_rsa.pub') }}"
    
        - name: set user as sudoers
          lineinfile: 
            path: /etc/sudoers.d/90-cloud-init-users
            line: 'nurulramadhona ALL=(ALL) NOPASSWD:ALL'
            insertafter: EOF
    


    4. 시간대 설정
    (지역으로 변경해주세요)

        - name: set timezone
          community.general.timezone:
            name: Asia/Jakarta
    


    5. 호스트 이름 설정
    (여기서는 localdomain에 대해서만 호스트 이름을 설정하는 데 사용합니다. 이미 가지고 있고 사용하려는 경우 공개 도메인으로 변경할 수 있습니다.)

        - name: preserve hostname
          lineinfile: 
            path: /etc/cloud/cloud.cfg
            line: 'preserve_hostname: true'
            insertafter: EOF
    
        - name: set hostname
          command: hostnamectl set-hostname {{ hostname }}.localdomain
    
        - name: replace localhost entry
          lineinfile: 
            path: /etc/hosts
            regexp: '^127\.0\.0\.1'
            line: '127.0.0.1   {{ hostname }}.localdomain {{ hostname }} localhost4 localhost4.localdomain4'
            owner: root
            group: root 
            mode: "0644"
    


    마지막으로 모든 작업이 준비되었을 때입니다. 인벤토리에 다음을 추가해야 합니다.

    new:
      hosts:
        108.136.225.50:
      vars:
        hostname: amazonlinux2
    


    이제 플레이북을 실행해 봅시다!

    $ ansible-playbook -i host.yml al2.yml -u ec2-user
    
    PLAY [al2] **************************************************************************************************************************************************************
    
    TASK [update] ***********************************************************************************************************************************************************
    changed: [108.136.225.50]
    
    TASK [install web server] ***********************************************************************************************************************************************
    changed: [108.136.225.50]
    
    TASK [install web server] ***********************************************************************************************************************************************
    changed: [108.136.225.50]
    
    TASK [modify home page] *************************************************************************************************************************************************
    changed: [108.136.225.50]
    
    TASK [create user] ******************************************************************************************************************************************************
    changed: [108.136.225.50]
    
    TASK [copy pubkey] ******************************************************************************************************************************************************
    changed: [108.136.225.50]
    
    TASK [set user as sudoers] **********************************************************************************************************************************************
    changed: [108.136.225.50]
    
    TASK [set timezone] *****************************************************************************************************************************************************
    changed: [108.136.225.50]
    
    TASK [preserve hostname] ************************************************************************************************************************************************
    changed: [108.136.225.50]
    
    TASK [set hostname] *****************************************************************************************************************************************************
    changed: [108.136.225.50]
    
    TASK [replace localhost entry] ******************************************************************************************************************************************
    changed: [108.136.225.50]
    
    PLAY RECAP **************************************************************************************************************************************************************
    108.136.225.50             : ok=11   changed=11   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
    


    기본 사용자를 지정하지 않고 서버를 원격으로 다시 확인하십시오. 이미 호스트 이름을 변경했으므로 재부팅도 수행합니다.

    $ ssh 108.136.225.50
    
           __|  __|_  )
           _|  (     /   Amazon Linux 2 AMI
          ___|\___|___|
    
    https://aws.amazon.com/amazon-linux-2/
    [nurulramadhona@amazonlinux2 ~]$ sudo reboot
    Connection to 108.136.225.50 closed by remote host.
    Connection to 108.136.225.50 closed.
    


    ansible ad-hoc을 사용하여 호스트 이름과 시간대를 확인하여 설정을 확인하자!

    $ ansible -i host.yml new -m shell -a "hostname && date"
    108.136.225.50 | CHANGED | rc=0 >>
    amazonlinux2.localdomain
    Sun Apr 24 15:35:24 WIB 2022
    


    이것이 Amazon Linux 2의 전부입니다! 다음 부분에서는 여기까지의 모든 게시물을 이미 팔로우한 경우 만든 게시물을 삭제하겠습니다. 다음 포스트로 넘어가자!

    참조:
    https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Instances.html

    좋은 웹페이지 즐겨찾기