Bagikan melalui


Tutorial - Cara menggunakan cloud-init untuk menyesuaikan komputer virtual Linux di Azure pada boot pertama

Berlaku untuk: ✔️ Mesin Virtual Linux ✔️ Set skala fleksibel

Dalam tutorial sebelumnya, Anda belajar cara SSH ke komputer virtual (VM) dan menginstal NGINX secara manual. Untuk membuat VM dengan cepat dan konsisten, beberapa bentuk otomatisasi biasanya diinginkan. Pendekatan umum untuk menyesuaikan VM pada boot pertama adalah menggunakan cloud-init. Dalam tutorial ini, Anda akan mempelajari cara:

  • Membuat file konfigurasi cloud-init
  • Membuat VM yang menggunakan file cloud-init
  • Melihat aplikasi Node.js yang sedang berjalan setelah VM dibuat
  • Menggunakan Azure Key Vault untuk menyimpan sertifikat dengan aman
  • Mengotomatiskan penyebaran NGINX yang aman dengan cloud-init

Jika Anda memilih untuk menginstal dan menggunakan CLI secara lokal, tutorial ini mengharuskan Anda menjalankan Azure CLI versi 2.0.30 atau versi lebih baru. Jalankan az --version untuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.

Gambaran Umum cloud-init

Cloud-init adalah pendekatan yang digunakan secara luas untuk mengustomisasi Linux VM saat boot pertama kali. Anda dapat menggunakan cloud-init untuk memasang paket dan menulis file, atau untuk mengonfigurasi pengguna dan keamanan. Saat cloud-init berjalan selama proses booting awal, tidak ada langkah tambahan atau agen yang diperlukan untuk menerapkan konfigurasi Anda.

Cloud-init juga berjalan di seluruh distribusi. Misalnya, Anda tidak menggunakan apt-get install atau yum install untuk memasang paket. Sebagai gantinya, Anda dapat menentukan daftar paket yang akan dipasang. Cloud-init secara otomatis menggunakan alat manajemen paket asli untuk distro yang Anda pilih.

Kami bekerja sama dengan mitra kami untuk memasukkan cloud-init dan bekerja dalam gambar yang mereka berikan kepada Azure. Untuk informasi terperinci dukungan cloud-init untuk setiap distribusi, lihat Dukungan cloud-init untuk VM di Azure.

Membuat file konfigurasi cloud-init

Untuk melihat cloud-init beraksi, buat VM yang menginstal NGINX dan menjalankan aplikasi 'Hello World' Node.js sederhana. Konfigurasi cloud-init berikut menginstal paket yang diperlukan, membuat aplikasi Node.js, lalu menginisialisasi dan memulai aplikasi.

Di prompt bash Anda atau di Cloud Shell, buat file bernama cloud-init.txt dan tempelkan konfigurasi berikut. Misalnya, ketik sensible-editor cloud-init.txt untuk membuat file dan melihat daftar editor yang tersedia. Pastikan bahwa seluruh file cloud-init disalin dengan benar, terutama baris pertama:

#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

Untuk informasi selengkapnya tentang opsi konfigurasi cloud-init, lihat contoh konfigurasi cloud-init.

Membuat komputer virtual

Sebelum Anda dapat membuat VM, buat grup sumber daya dengan grup az buat. Contoh berikut membuat grup sumber daya. Dalam perintah ini, akhiran acak ditambahkan ke grup sumber daya dan nama VM untuk mencegah tabrakan nama selama penyebaran berulang.

export RANDOM_SUFFIX=$(openssl rand -hex 3)
export RESOURCE_GROUP="myResourceGroupAutomate$RANDOM_SUFFIX"
export REGION="eastus2"
az group create --name $RESOURCE_GROUP --location $REGION

Hasil:

{
  "id": "/subscriptions/xxxxx-xxxxx-xxxxx-xxxxx/resourceGroups/myResourceGroupAutomatexxx",
  "location": "eastus",
  "managedBy": null,
  "name": "myResourceGroupAutomatexxx",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}

Sekarang buat VM dengan az vm create. Gunakan parameter --custom-data untuk meneruskan file konfigurasi cloud-init Anda. Berikan jalur lengkap ke konfigurasi cloud-init.txt jika Anda menyimpan file di luar direktori kerja Anda saat ini. Contoh berikut membuat VM; perhatikan bahwa nama VM juga ditambahkan dengan akhiran acak.

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

Hasil:

{
  "fqdns": "",
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupAutomatexxx/providers/Microsoft.Compute/virtualMachines/myAutomatedVMxxx",
  "location": "eastus",
  "name": "myAutomatedVMxxx",
  "powerState": "VM running",
  "publicIpAddress": "x.x.x.x",
  "resourceGroup": "myResourceGroupAutomatexxx",
  "zones": ""
}

Dibutuhkan beberapa menit agar VM dibuat, paket untuk diinstal, dan aplikasi untuk memulai. Ada proses di latar belakang yang terus berjalan setelah Azure CLI mengembalikan Anda ke perintah. Mungkin beberapa menit lagi sebelum Anda dapat mengakses aplikasi. Ketika VM telah dibuat, perhatikan yang publicIpAddress ditampilkan oleh Azure CLI. Alamat ini digunakan untuk mengakses aplikasi Node.js melalui browser web.

Untuk mengizinkan lalu lintas web mencapai VM Anda, buka port 80 dari Internet dengan az vm open-port:

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

Hasil:

{
  "endpoints": [
    {
      "name": "80",
      "protocol": "tcp",
      "publicPort": 80,
      "privatePort": 80
    }
  ],
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupAutomatexxx/providers/Microsoft.Compute/virtualMachines/myAutomatedVMxxx",
  "location": "eastus",
  "name": "myAutomatedVMxxx"
}

Menguji aplikasi web

Sekarang Anda dapat membuka browser web dan memasukkan alamat IP publik di bilah alamat. Berikan alamat IP publik Anda sendiri dari proses pembuatan VM. Aplikasi Node.js Anda ditampilkan seperti yang ditunjukkan dalam contoh berikut:

Cuplikan layar yang memperlihatkan situs NGINX yang sedang berjalan.

Langkah berikutnya

Dalam tutorial ini, Anda mengonfigurasi VM pada boot pertama dengan cloud-init. Anda mempelajari cara untuk:

  • Membuat file konfigurasi cloud-init
  • Membuat VM yang menggunakan file cloud-init
  • Melihat aplikasi Node.js yang sedang berjalan setelah VM dibuat
  • Menggunakan Azure Key Vault untuk menyimpan sertifikat dengan aman
  • Mengotomatiskan penyebaran NGINX yang aman dengan cloud-init

Lanjutkan ke tutorial berikutnya untuk mempelajari cara membuat gambar VM kustom.