• 『EC2』Cloud-init
    AWS/EC2 2022. 6. 20. 19:23

    Cloud-init란?

    Cloud-init는 클라우드 환경을 제공할때 사용되는 오픈소스 솔루션이다.

    인스턴스 초기화를 위해서 업계 표준으로 사용되는 다중 배포 오픈소스 솔루션으로 AWS와 같은 Public Cloud에서 사용된다.

    OS(Image)가 부팅이 될때 제공된 메타데이터를 읽는다. 그리고 그 데이터값에 의거하여 시스템 초기화를 진행한다.

     

    Cloud-init의 동작방식

    동작방식은 OS가 부팅이 될때 총 5가지 과정으로 이루어지게 된다.

    1. Generator

    2. Local

    3. Network

    4. Config

    5. Final

     

    인스턴스 재부팅시에는 /etc/cloud/cloud.cfg의 정보를 읽고 5단계를 걸친뒤에 모듈, 설정 정보를 실행하여 반영한다.

     

    아래의 코드내용은 CentOS기준으로 확인된 cloud.cfg 파일의 내용이다.

    # cat /etc/cloud/cloud.cfg
    
    users:
     - default
    
    disable_root: 1
    ssh_pwauth:   1
    
    mount_default_fields: [~, ~, 'auto', 'defaults,nofail,x-systemd.requires=cloud-init.service', '0', '2']
    resize_rootfs_tmp: /dev
    ssh_deletekeys:   0
    ssh_genkeytypes:  ~
    syslog_fix_perms: ~
    disable_vmware_customization: false
    
    cloud_init_modules:
     - disk_setup
     - migrator
     - bootcmd
     - write-files
     - growpart
     - resizefs
     - set_hostname
     - update_hostname
     - update_etc_hosts
     - rsyslog
     - users-groups
     - ssh
    
    cloud_config_modules:
     - mounts
     - locale
     - set-passwords
     - rh_subscription
     - yum-add-repo
     - package-update-upgrade-install
     - timezone
     - puppet
     - chef
     - salt-minion
     - mcollective
     - disable-ec2-metadata
     - runcmd
    
    cloud_final_modules:
     - rightscale_userdata
     - scripts-per-once
     - scripts-per-boot
     - scripts-per-instance
     - scripts-user
     - ssh-authkey-fingerprints
     - keys-to-console
     - phone-home
     - final-message
     - power-state-change
    
    system_info:
      default_user:
        name: centos
        lock_passwd: true
        gecos: Cloud User
        groups: [wheel, adm, systemd-journal]
        sudo: ["ALL=(ALL) NOPASSWD:ALL"]
        shell: /bin/bash
      distro: rhel
      paths:
        cloud_dir: /var/lib/cloud
        templates_dir: /etc/cloud/templates
      ssh_svcname: sshd
    
    # vim:syntax=yaml

    위 내용에 의거하여 초기화가 진행된다.

    Cloud-init 관련 예시 상황 및 솔루션

     

    OS상에서 Cloud-init 초기 모듈과 함께 Cloud 초기화 설정을 진행

    /usr/bin/cloud-init -d init

     

    OS상에서 모든 모듈을 실행

    /user/bin/cloud-init -d modules

     

    SSH Public Key를 분실하여 SSH에 접속하지 못하는 상황

    PublicKey를 생성하여 EC2-Userdata에 추가하는 방식이다.

    AWS에서 Keypair를 생성해 public key로 변환시켜 맨 밑 PublicKeyPair자리에 입력한다.

    Content-Type: multipart/mixed; boundary="//"
    MIME-Version: 1.0
    
    --//
    Content-Type: text/cloud-config; charset="us-ascii"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    Content-Disposition: attachment; filename="cloud-config.txt"
    
    #cloud-config
    cloud_final_modules:
    - [users-groups, once]
    users:
      - name: ec2-user
        ssh-authorized-keys:
        - PublicKeypair

    UserData를 수정하여 적용하는 법

    아래와 같은 양식을 사용한다.

    Content-Type: multipart/mixed; boundary="//"
    MIME-Version: 1.0
    
    --//
    Content-Type: text/cloud-config; charset="us-ascii"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    Content-Disposition: attachment; filename="cloud-config.txt"
    
    #cloud-config
    cloud_final_modules:
    - [scripts-user, always]
    
    --//
    Content-Type: text/x-shellscript; charset="us-ascii"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    Content-Disposition: attachment; filename="userdata.txt"
    
    #!/bin/bash
    chmod -R 755 /home/ec2-user/
    --//--

    chmod -R 755 /home/ec2-user/ 부분을 삭제하고 자신이 넣을 Userdata를 넣으면 된다.

    그 뒤 재부팅을하면 잘 작동한다.

     

    아래와 같이도  사용이 가능하다.

    #cloud-config
    #!/bin/bash
    chmod -R 755 /home/ec2-user/
    #cloud-boothook
    #!/bin/bash
    chmod -R 755 /home/ec2-user/

     

     

     

    댓글