웹사이트 검색

Cloud-Config 스크립팅 소개


소개

최신 배포판에서 사용할 수 있는 cloud-init 프로그램(이 글을 쓰는 시점에는 Ubuntu 14.04 및 CentOS 7만 해당)은 user-data 에서 데이터를 소비하고 실행할 수 있습니다. DigitalOcean 메타데이터 서비스의 필드입니다. 이 프로세스는 찾은 정보의 형식에 따라 다르게 동작합니다. user-data 내에서 가장 많이 사용되는 스크립트 형식 중 하나는 cloud-config 파일 형식입니다.

Cloud-config 파일은 cloud-init 프로세스에서 실행되도록 설계된 특수 스크립트입니다. 일반적으로 서버를 처음 부팅할 때 초기 구성에 사용됩니다. 이 가이드에서는 cloud-config 파일의 형식과 사용법에 대해 설명합니다.

Cloud-Config에 대한 일반 정보

cloud-config 형식은 많은 공통 구성 항목에 대한 선언적 구문을 구현하여 많은 작업을 쉽게 수행할 수 있도록 합니다. 또한 미리 정의된 선언적 기능을 벗어나는 모든 항목에 대해 임의의 명령을 지정할 수 있습니다.

이 "양쪽 세계의 최고\ 접근 방식을 사용하면 파일이 일반적인 작업에 대한 구성 파일처럼 작동하는 동시에 더 복잡한 기능에 대한 스크립트의 유연성을 유지할 수 있습니다.

YAML 포맷팅

파일은 YAML 데이터 직렬화 형식을 사용하여 작성됩니다. YAML 형식은 사람이 이해하기 쉽고 프로그램에서 쉽게 구문 분석할 수 있도록 만들어졌습니다.

YAML 파일은 일반적으로 파일을 읽을 때 이해하기 매우 직관적이지만 이를 제어하는 실제 규칙을 아는 것이 좋습니다.

YAML 파일에 대한 몇 가지 중요한 규칙은 다음과 같습니다.

  • 공백이 있는 들여쓰기는 항목 간의 구조 및 관계를 나타냅니다. 더 많이 들여쓰기된 항목은 그 위에 들여쓰기 수준이 낮은 첫 번째 항목의 하위 항목입니다.
  • 목록 구성원은 선행 대시로 식별할 수 있습니다.
  • 연관 배열 항목은 콜론(:) 다음에 공백 및 값을 사용하여 생성됩니다.
  • 텍스트 블록이 들여쓰기됩니다. 서식을 유지하면서 블록을 있는 그대로 읽어야 함을 나타내려면 블록 앞에 파이프 문자(|)를 사용하십시오.

이러한 규칙을 적용하고 형식에만 주의하면서 예제 cloud-config 파일을 분석해 보겠습니다.

#cloud-config
users:
  - name: demo
    groups: sudo
    shell: /bin/bash
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    ssh-authorized-keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDf0q4PyG0doiBQYV7OlOxbRjle026hJPBWD+eKHWuVXIpAiQlSElEBqQn0pOqNJZ3IBCvSLnrdZTUph4czNC4885AArS9NkyM7lK27Oo8RV888jWc8hsx4CD2uNfkuHL+NI5xPB/QT3Um2Zi7GRkIwIgNPN5uqUtXvjgA+i1CS0Ku4ld8vndXvr504jV9BMQoZrXEST3YlriOb8Wf7hYqphVMpF3b+8df96Pxsj0+iZqayS9wFcL8ITPApHi0yVwS8TjxEtI3FDpCbf7Y/DmTGOv49+AWBkFhS2ZwwGTX65L61PDlTSAzL+rPFmHaQBHnsli8U9N6E4XHDEOjbSMRX user@example.com
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDcthLR0qW6y1eWtlmgUE/DveL4XCaqK6PQlWzi445v6vgh7emU4R5DmAsz+plWooJL40dDLCwBt9kEcO/vYzKY9DdHnX8dveMTJNU/OJAaoB1fV6ePvTOdQ6F3SlF2uq77xYTOqBiWjqF+KMDeB+dQ+eGyhuI/z/aROFP6pdkRyEikO9YkVMPyomHKFob+ZKPI4t7TwUi7x1rZB1GsKgRoFkkYu7gvGak3jEWazsZEeRxCgHgAV7TDm05VAWCrnX/+RzsQ/1DecwSzsP06DGFWZYjxzthhGTvH/W5+KFyMvyA+tZV4i1XM+CIv/Ma/xahwqzQkIaKUwsldPPu00jRN user@desktop
runcmd:
  - touch /test.txt

이 파일을 보면 여러 가지 중요한 사실을 알 수 있습니다.

첫째, 각 cloud-config 파일은 맨 첫 줄에서 #cloud-config만으로 시작해야 합니다. 이는 이것이 cloud-config 파일로 해석되어야 함을 cloud-init 프로그램에 알립니다. 이것이 일반 스크립트 파일인 경우 첫 번째 줄은 파일을 실행하는 데 사용해야 하는 인터프리터를 나타냅니다.

위의 파일에는 usersruncmd라는 두 개의 최상위 지시문이 있습니다. 둘 다 키 역할을 합니다. 이러한 키의 값은 키 뒤에 들여쓰기된 모든 행으로 구성됩니다.

users 키의 경우 값은 단일 목록 항목입니다. 다음 수준의 들여쓰기가 목록 항목을 지정하는 대시(-)이고 이 들여쓰기 수준에는 대시가 하나만 있기 때문에 이를 알고 있습니다. users 지시문의 경우 이는 부수적으로 단일 사용자만 정의하고 있음을 나타냅니다.

목록 항목 자체에는 더 많은 키-값 쌍이 있는 연관 배열이 포함되어 있습니다. 이들은 모두 동일한 수준의 들여쓰기에 존재하기 때문에 형제 요소입니다. 각 사용자 속성은 위에서 설명한 단일 목록 항목에 포함되어 있습니다.

주목해야 할 몇 가지 사항은 표시되는 문자열에 인용 부호가 필요하지 않으며 연결을 정의하는 데 불필요한 대괄호가 없다는 것입니다. 인터프리터는 데이터 유형을 매우 쉽게 결정할 수 있으며 들여쓰기는 사람과 프로그램 모두에 대한 항목의 관계를 나타냅니다.

지금쯤이면 YAML 형식에 대한 작업 지식이 있어야 하며 위에서 논의한 규칙을 사용하여 정보 작업을 편안하게 해야 합니다.

이제 cloud-config에 대한 가장 일반적인 지시어 중 일부를 탐색할 수 있습니다.

사용자 및 그룹 관리

시스템에서 새 사용자를 정의하려면 위의 예제 파일에서 본 users 지시문을 사용할 수 있습니다.

사용자 정의의 일반적인 형식은 다음과 같습니다.

#cloud-config
users:
  - first_user_parameter
    first_user_parameter
    
  - second_user_parameter
    second_user_parameter
    second_user_parameter
    second_user_parameter

각각의 새 사용자는 대시로 시작해야 합니다. 각 사용자는 키-값 쌍으로 매개변수를 정의합니다. 다음 키를 정의에 사용할 수 있습니다.

  • 이름: 계정 사용자 이름입니다.
  • primary-group: 사용자의 기본 그룹입니다. 기본적으로 사용자 이름과 일치하는 그룹이 생성됩니다. 여기에 지정된 모든 그룹은 이미 존재하거나 명시적으로 생성되어야 합니다(이 섹션의 뒷부분에서 설명).
  • 그룹: 모든 보조 그룹을 쉼표로 구분하여 여기에 나열할 수 있습니다.
  • gecos: 사용자에 대한 추가 정보를 위한 필드입니다.
  • shell: 사용자에 대해 설정해야 하는 셸입니다. 이것을 설정하지 않으면 아주 기본적인 sh 셸이 사용됩니다.
  • 만료일: 계정이 만료되어야 하는 날짜(YYYY-MM-DD 형식)
  • sudo: 사용자 이름 필드 없이 sudo 권한을 정의하려는 경우 사용할 sudo 문자열입니다.
  • lock-passwd: 기본적으로 "True\로 설정되어 있습니다. 사용자가 암호로 로그인할 수 있도록 하려면 "False\로 설정하십시오.
  • passwd: 계정의 해시된 암호입니다.
  • ssh-authorized-keys: .ssh 디렉토리에 있는 이 사용자의 authorized_keys 파일에 추가해야 하는 완전한 SSH 공개 키 목록입니다.
  • 비활성: 계정을 비활성으로 설정하는 부울 값입니다.
  • 시스템: "True\이면 이 계정은 홈 디렉토리가 없는 시스템 계정이 됩니다.
  • homedir: 기본 /home/을 재정의하는 데 사용되며 그렇지 않으면 생성 및 설정됩니다.
  • ssh-import-id: LaunchPad에서 가져올 SSH ID입니다.
  • selinux-user: 이 계정의 로그인에 사용해야 하는 SELinux 사용자를 설정하는 데 사용할 수 있습니다.
  • no-create-home: 사용자를 위한 /home/ 디렉토리를 생성하지 않으려면 "True\로 설정합니다.
  • no-user-group: 사용자와 같은 이름으로 그룹을 만들지 않으려면 "True\로 설정합니다.
  • no-log-init: 사용자 로그인 데이터베이스를 시작하지 않으려면 "True\로 설정합니다.

name 키와 같은 일부 기본 정보 외에는 기본값에서 벗어나거나 필요한 데이터를 제공하는 영역만 정의하면 됩니다.

사용자가 인식해야 할 중요한 한 가지는 주어진 값을 즉시 수정하는 메커니즘이 없는 한 프로덕션 시스템에서 passwd 필드를 사용해서는 안 된다는 것입니다. 사용자 데이터로 제출된 모든 정보와 마찬가지로 해시는 서버의 전체 수명 동안 시스템의 모든 사용자가 액세스할 수 있는 상태로 유지됩니다. 최신 하드웨어에서 이러한 해시는 짧은 시간 안에 쉽게 해독될 수 있습니다. 해시조차 노출하는 것은 일회용이 아닌 기계에서 취해서는 안 되는 엄청난 보안 위험입니다.

예제 사용자 정의의 경우 위에서 본 예제 cloud-config의 일부를 사용할 수 있습니다.

#cloud-config
users:
  - name: demo
    groups: sudo
    shell: /bin/bash
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    ssh-authorized-keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDf0q4PyG0doiBQYV7OlOxbRjle026hJPBWD+eKHWuVXIpAiQlSElEBqQn0pOqNJZ3IBCvSLnrdZTUph4czNC4885AArS9NkyM7lK27Oo8RV888jWc8hsx4CD2uNfkuHL+NI5xPB/QT3Um2Zi7GRkIwIgNPN5uqUtXvjgA+i1CS0Ku4ld8vndXvr504jV9BMQoZrXEST3YlriOb8Wf7hYqphVMpF3b+8df96Pxsj0+iZqayS9wFcL8ITPApHi0yVwS8TjxEtI3FDpCbf7Y/DmTGOv49+AWBkFhS2ZwwGTX65L61PDlTSAzL+rPFmHaQBHnsli8U9N6E4XHDEOjbSMRX user@example.com
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDcthLR0qW6y1eWtlmgUE/DveL4XCaqK6PQlWzi445v6vgh7emU4R5DmAsz+plWooJL40dDLCwBt9kEcO/vYzKY9DdHnX8dveMTJNU/OJAaoB1fV6ePvTOdQ6F3SlF2uq77xYTOqBiWjqF+KMDeB+dQ+eGyhuI/z/aROFP6pdkRyEikO9YkVMPyomHKFob+ZKPI4t7TwUi7x1rZB1GsKgRoFkkYu7gvGak3jEWazsZEeRxCgHgAV7TDm05VAWCrnX/+RzsQ/1DecwSzsP06DGFWZYjxzthhGTvH/W5+KFyMvyA+tZV4i1XM+CIv/Ma/xahwqzQkIaKUwsldPPu00jRN user@desktop

그룹을 정의하려면 groups 지시문을 사용해야 합니다. 이 지시문은 만들고자 하는 그룹 목록만 취한다는 점에서 비교적 간단합니다.

이에 대한 선택적 확장은 만들고 있는 모든 그룹에 대한 하위 목록을 만드는 것입니다. 이 새 목록은 이 그룹에 배치되어야 하는 사용자를 정의합니다.

#cloud-config
groups:
  - group1
  - group2: [user1, user2]

기존 사용자의 비밀번호 변경

이미 존재하는 사용자 계정의 경우(root 계정이 가장 적절함) chpasswd 지시문을 사용하여 암호를 제공할 수 있습니다.

참고: 이 지시문은 디버깅 상황에서만 사용해야 합니다. 다시 한 번 서버 수명 동안 시스템의 모든 사용자가 값을 사용할 수 있기 때문입니다. 이 지시문과 함께 제출된 암호는 일반 텍스트로 제공되어야 하므로 이 섹션에서는 훨씬 더 관련이 있습니다.

기본 구문은 다음과 같습니다.

#cloud-config
chpasswd:
  list: |
    user1:password1
    user2:password2
    user3:password3
  expire: False

지시문에는 두 개의 연관 배열 키가 포함되어 있습니다. list 키에는 할당하려는 계정 이름 및 관련 비밀번호를 나열하는 블록이 포함됩니다. expire 키는 처음 부팅할 때 암호를 변경해야 하는지 여부를 결정하는 부울입니다. 기본값은 \True입니다.

한 가지 유의할 점은 비밀번호를 "RANDOM” 또는 "R”로 설정할 수 있으며, 그러면 임의의 비밀번호가 생성되어 /var/log/cloud-init-output.log 에 기록됩니다. . 이 파일은 시스템의 모든 사용자가 액세스할 수 있으므로 더 이상 안전하지 않습니다.

디스크에 파일 쓰기

디스크에 파일을 쓰려면 write_files 지시문을 사용해야 합니다.

작성해야 하는 각 파일은 지시어 아래의 목록 항목으로 표시됩니다. 이러한 목록 항목은 각 파일의 속성을 정의하는 연관 배열입니다.

이 배열에서 유일하게 필요한 키는 파일을 작성할 위치를 정의하는 경로와 파일에 포함할 데이터를 포함하는 콘텐츠입니다.

write_files 항목을 구성하는 데 사용할 수 있는 키는 다음과 같습니다.

  • 경로: 파일을 작성해야 하는 파일 시스템 위치의 절대 경로입니다.
  • 콘텐츠: 파일에 배치해야 하는 콘텐츠입니다. 여러 줄 입력의 경우 "content\ 줄에 파이프 문자(|)를 사용하여 블록을 시작하고 그 뒤에 콘텐츠가 포함된 들여쓰기된 블록이 옵니다. 바이너리 파일에는 "!!binary”와 앞의 공백이 포함되어야 합니다. 파이프 문자로.
  • 소유자: 파일의 소유권을 부여받아야 하는 사용자 계정 및 그룹입니다. "사용자 이름:그룹\ 형식으로 지정해야 합니다.
  • permissions: 이 파일에 부여되어야 하는 8진수 권한 집합입니다.
  • encoding: 파일에 대한 선택적 인코딩 사양입니다. Base64 파일의 경우 "b64\, Gzip 압축 파일의 경우 "gzip\ 또는 조합의 경우 "gz+b64\가 될 수 있습니다. 이 값을 그대로 두면 기본 파일 형식이 사용됩니다.

예를 들어 /test.txt에 다음 내용으로 파일을 작성할 수 있습니다.

Here is a line.
Another line is here.

이를 수행하는 cloud-config 부분은 다음과 같습니다.

#cloud-config
write_files:
  - path: /test.txt
    content: |
      Here is a line.
      Another line is here.

서버에서 패키지 업데이트 또는 설치

패키지를 관리하기 위해 염두에 두어야 할 몇 가지 관련 설정 및 지시문이 있습니다.

Debian 기반 배포판에서 apt 데이터베이스를 업데이트하려면 package_update 지시문을 "true”로 설정해야 합니다. 이는 명령줄에서 apt-get update를 호출하는 것과 같습니다. .

기본값은 실제로 "true\이므로 비활성화하려는 경우에만 이 지시문에 대해 걱정하면 됩니다.

#cloud-config
package_update: false

서버가 처음 부팅된 후 서버의 모든 패키지를 업그레이드하려면 package_upgrade 지시문을 설정할 수 있습니다. 이는 수동으로 실행되는 apt-get 업그레이드와 유사합니다.

기본적으로 "false\로 설정되어 있으므로 기능을 사용하려면 "true\로 설정해야 합니다.

#cloud-config
package_upgrade: true

추가 패키지를 설치하려면 "packages\ 지시문을 사용하여 패키지 이름을 나열하면 됩니다. 각 목록 항목은 패키지를 나타내야 합니다. 위의 두 명령과 달리 이 지시문은 yum 또는 apt 관리 배포판에서 작동합니다.

이러한 항목은 두 가지 형식 중 하나를 취할 수 있습니다. 첫 번째는 단순히 패키지 이름이 포함된 문자열입니다. 두 번째 형식은 두 항목이 있는 목록입니다. 이 새 목록의 첫 번째 항목은 패키지 이름이고 두 번째 항목은 버전 번호입니다.

#cloud-config
packages:
  - package_1
  - package_2
  - [package_3, version_num]

"packages\ 지시문은 apt_update를 true로 설정하여 이전 설정을 무시합니다.

사용자 계정 및 SSH 데몬에 대한 SSH 키 구성

users 지시문에서 SSH 키를 관리할 수 있지만 전용 ssh_authorized_keys 섹션에서 지정할 수도 있습니다. 이들은 첫 번째로 정의된 사용자의 authorized_keys 파일에 추가됩니다.

이것은 users 지시문 내에서 키 사양의 동일한 일반 형식을 사용합니다.

#cloud-config
ssh_authorized_keys:
  - ssh_key_1
  - ssh_key_2

SSH 서버의 개인 키를 미리 생성하여 파일 시스템에 배치할 수도 있습니다. 이 기능은 클라이언트에 이 서버에 대한 정보를 미리 제공하여 온라인 상태가 되는 즉시 서버를 신뢰할 수 있도록 하려는 경우에 유용할 수 있습니다.

이를 위해 ssh_keys 지시문을 사용할 수 있습니다. 이것은 rsa_private, rsa_public, dsa_private, dsa_public 를 사용하여 RSA, DSA 또는 ECDSA 키에 대한 키 쌍을 가져올 수 있습니다. , ecdsa_privateecdsa_public 하위 항목입니다.

개인 키는 서식 지정 및 줄 바꿈이 중요하므로 이를 지정할 때 파이프 키가 있는 블록을 사용해야 합니다. 또한 키가 유효하려면 시작 키 및 종료 키 행을 포함해야 합니다.

#cloud-config
ssh_keys:
  rsa_private: |
    -----BEGIN RSA PRIVATE KEY-----
    your_rsa_private_key
    -----END RSA PRIVATE KEY-----

  rsa_public: your_rsa_public_key

신뢰할 수 있는 CA 인증서 설정

인프라가 내부 인증 기관에서 서명한 키에 의존하는 경우 인증서 정보를 삽입하여 CA 인증서를 신뢰하도록 새 시스템을 설정할 수 있습니다. 이를 위해 ca-certs 지시문을 사용합니다.

이 지시문에는 두 개의 하위 항목이 있습니다. 첫 번째는 remove-defaults로, true로 설정하면 기본적으로 포함된 일반 인증서 신뢰 정보를 모두 제거합니다. 이것은 일반적으로 필요하지 않으며 수행 중인 작업을 모르는 경우 몇 가지 문제가 발생할 수 있으므로 주의하여 사용하십시오.

두 번째 항목은 각각 신뢰할 수 있는 CA 인증서를 포함하는 목록인 trusted입니다.

#cloud-config
ca-certs:
  remove-defaults: true
  trusted:
    - |
      -----BEGIN CERTIFICATE-----
      your_CA_cert
      -----END CERTIFICATE-----

특정 DNS 서버를 사용하도록 resolv.conf 구성

사용하려는 자체 DNS 서버를 구성한 경우 resolv_conf 지시문을 사용하여 서버의 resolv.conf 파일을 관리할 수 있습니다. 이것은 현재 RHEL 기반 배포판에서만 작동합니다.

resolv_conf 지시문에서 nameservers, searchdomains, domain로 설정을 관리할 수 있습니다. 옵션 항목.

nameservers 지시문은 이름 서버의 IP 주소 목록을 가져와야 합니다. searchdomains 지시문은 사용자가 도메인이 아닌 호스트를 지정하는 경우 검색할 도메인 및 하위 도메인 목록을 가져옵니다.

domain은 확인할 수 없는 요청에 사용해야 하는 도메인을 설정하고 options에는 resolv.conf 파일에서 정의할 수 있는 옵션 세트가 포함되어 있습니다.

resolv_conf 지시문을 사용하는 경우 manage-resolv-conf 지시문도 true로 설정되어 있는지 확인해야 합니다. 그렇게 하지 않으면 설정이 무시됩니다.

#cloud-config
manage-resolv-conf: true
resolv_conf:
  nameservers:
    - 'first_nameserver'
    - 'second_nameserver'
  searchdomains:
    - first.domain.com
    - second.domain.com
  domain: domain.com
  options:
    option1: value1
    option2: value2
    option3: value3

더 많은 제어를 위해 임의 명령 실행

cloud-config에서 제공하는 관리 작업이 수행하려는 작업에 대해 작동하지 않는 경우 임의의 명령을 실행할 수도 있습니다. runcmd 지시문을 사용하여 이 작업을 수행할 수 있습니다.

이 지시문은 실행할 항목 목록을 사용합니다. 이러한 항목은 처리 방법에 영향을 미치는 두 가지 방법으로 지정할 수 있습니다.

목록 항목이 단순 문자열인 경우 전체 항목이 실행할 sh 셸 프로세스로 전달됩니다.

다른 옵션은 execve가 명령을 처리하는 방식과 유사한 방식으로 각 항목이 실행되는 목록을 전달하는 것입니다. 첫 번째 항목은 실행할 명령 또는 스크립트로 해석되며 다음 항목은 해당 명령의 인수로 전달됩니다.

대부분의 사용자는 이러한 형식 중 하나를 사용할 수 있지만 유연성을 통해 특별한 요구 사항이 있는 경우 최상의 옵션을 선택할 수 있습니다. 모든 출력은 표준 출력 및 /var/log/cloud-init-output.log 파일에 기록됩니다.

#cloud-config
runcmd:
  - [ sed, -i, -e, 's/here/there/g', some_file]
  - echo "modified some_file"
  - [cat, some_file]

서버 종료 또는 재부팅

경우에 따라 다른 항목을 실행한 후 서버를 종료하거나 재부팅해야 할 수도 있습니다. power_state 지시문을 설정하여 이를 수행할 수 있습니다.

이 지시문에는 설정할 수 있는 4개의 하위 항목이 있습니다. delay, timeout, messagemode입니다.

지연은 다시 시작 또는 종료가 발생할 미래의 시간을 지정합니다. 기본적으로 이것은 절차가 즉시 시작됨을 의미하는 "지금\입니다. 지연을 추가하려면 사용자는 +를 사용하여 경과해야 하는 시간을 분 단위로 지정해야 합니다. 체재.

timeout 매개변수는 지연 카운트다운을 시작하기 전에 cloud-init가 완료될 때까지 대기하는 시간(초)을 나타내는 단위 없는 값을 사용합니다.

message 필드를 사용하면 시스템의 모든 사용자에게 보낼 메시지를 지정할 수 있습니다. mode는 시작할 전원 이벤트 유형을 지정합니다. 이는 서버를 종료하는 "poweroff\, 서버를 다시 시작하는 "reboot\ 또는 시스템이 최선의 조치(일반적으로 종료)를 결정하도록 하는 "halt\일 수 있습니다.

#cloud-config
power_state:
  timeout: 120
  delay: "+5"
  message: Rebooting in five minutes. Please save your work.
  mode: reboot

결론

위의 예는 cloud-config 파일을 실행할 때 사용할 수 있는 보다 일반적인 구성 항목 중 일부를 나타냅니다. 이 가이드에서 다루지 않은 추가 기능이 있습니다. 여기에는 구성 관리 설정, 추가 리포지토리 구성, 서버 초기화 시 외부 URL 등록이 포함됩니다.

/usr/share/doc/cloud-init/examples 디렉터리를 확인하여 이러한 옵션 중 일부에 대해 자세히 알아볼 수 있습니다. cloud-config 파일에 익숙해지는 데 도움이 되는 실용적인 가이드를 보려면 여기에서 cloud-config를 사용하여 기본 서버 구성을 완료하는 방법에 대한 자습서를 따르십시오.