ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [VM] cloud-init
    Azure 2025. 5. 12. 13:29

    Cloud-init

     

    클라우드 환경에서 Linux 인스턴스가 부팅될 때 자동으로 초기 설정을 수행하도록 도와주는 오픈소스 도구입니다.

    주로 AWS, Azure, GCP, OpenStack 등 다양한 클라우드 플랫폼에서 사용됩니다.

     

    💡 무엇을 할 수 있나?

    cloud-init을 통해 다음과 같은 작업을 자동화할 수 있습니다.

     

    사용자 생성 admin 계정 추가, SSH 키 등록
    패키지 설치 apt install, yum install 등
    명령 실행 쉘 스크립트 실행
    파일 생성/복사 설정 파일 배포
    호스트네임 설정 VM 이름 자동 설정
    시스템 설정 시간대, locale, 네트워크 등

     

    📌 참고사항

    • cloud-init은 인스턴스 최초 부팅 시 1회만 실행됩니다 (재부팅 시에는 재실행 안 함).
    • 다시 실행하려면: sudo cloud-init clean 후 sudo cloud-init init && sudo cloud-init apply
    • 상태 확인: cloud-init status --long

    실습

     

    cloud-init 구성 파일에는, Nginx를 설치하고 간단한 'Hello world'라는 Node.js 앱을 실행하게 끔 구성한다.

     

    cloud-init 구성 파일 생성

     

    # cloud-init.txt 파일 생성

    #cloud-config
    package_upgrade: true
    packages:
      - nginx
      - nodejs
      - npm
    write_files:
      - owner: www-data:www-data
        path: /etc/nginx/sites-available/default
        defer: true
        content: |
          server {
            listen 80;
            location / {
              proxy_pass http://localhost:3000;
              proxy_http_version 1.1;
              proxy_set_header Upgrade $http_upgrade;
              proxy_set_header Connection keep-alive;
              proxy_set_header Host $host;
              proxy_cache_bypass $http_upgrade;
            }
          }
      - owner: azureuser:azureuser
        path: /home/azureuser/myapp/index.js
        defer: true
        content: |
          var express = require('express')
          var app = express()
          var os = require('os');
          app.get('/', function (req, res) {
            res.send('Hello World from host ' + os.hostname() + '!')
          })
          app.listen(3000, function () {
            console.log('Hello world app listening on port 3000!')
          })
    runcmd:
      - service nginx restart
      - cd "/home/azureuser/myapp"
      - npm init
      - npm install express -y
      - nodejs index.js

     

     

    cloud-init 파일을 활용하여 VM 생성

     

    # VM 생성

    az vm create \
        --resource-group $RESOURCE_GROUP \
        --name $VM_NAME \
        --image Ubuntu2204 \
        --admin-username azureuser \
        --generate-ssh-keys \
        --custom-data cloud-init.txt

     

    $RESOURCE_GROUP과 $VM_NAME은 알아서 수정

     

    {
      "fqdns": "",
      "id": "/subscriptions/비공개",
      "location": "koreacentral",
      "macAddress": "00-22-48-0E-A8-03",
      "powerState": "VM running",
      "privateIpAddress": "xx.x.x.x",
      "publicIpAddress": "x.xxx.xx.xxx",
      "resourceGroup": "xxxx-rg",
      "zones": ""
    }

     

    생성 완료

     

    # 웹 테스트를 위한 port 80 오픈

    az vm open-port --port 80 --resource-group $RESOURCE_GROUP --name $VM_NAME

    'Azure' 카테고리의 다른 글

    [Proxy] 프록시란?  (0) 2025.05.16
    [Windows] NTP 서버 생성 및 동기화 (Windows 2022)  (0) 2025.05.13
    [Azure] Osdisk 크기 축소  (0) 2025.01.07
    [Azure] Azure SQL Server 및 SQL Database  (1) 2024.12.24
    [Azure] Azure Bastion에 NSG 설정  (0) 2024.12.21
Designed by Tistory.