-
[VM] cloud-initAzure 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