Menggunakan skrip startup di VM Linux


Skrip startup adalah file yang menjalankan tugas selama proses startup instance virtual machine (VM). Skrip startup dapat berlaku untuk semua VM dalam sebuah project atau berlaku untuk satu VM. Skrip startup yang ditentukan oleh metadata level VM akan menggantikan skrip startup yang ditentukan oleh metadata level project, dan skrip startup hanya dijalankan saat jaringan tersedia. Dokumen ini menjelaskan cara menggunakan skrip startup di instance VM Linux. Untuk mengetahui informasi tentang cara menambahkan skrip startup level project, lihat gcloud compute project-info add-metadata.

Untuk skrip startup Linux, Anda dapat menggunakan file bash atau non-bash. Untuk menggunakan file non-bash, tetapkan penafsir dengan menambahkan #! ke bagian atas file. Misalnya, untuk menggunakan skrip startup Python 3, tambahkan #! /usr/bin/python3 ke bagian atas file.

Jika Anda menentukan skrip startup menggunakan salah satu prosedur dalam dokumen ini, Compute Engine akan melakukan hal berikut:

  1. Menyalin skrip startup ke VM

  2. Menetapkan izin pengoperasian pada skrip startup

  3. Menjalankan skrip startup sebagai pengguna root saat VM melakukan booting

Untuk mengetahui informasi tentang berbagai tugas terkait skrip startup dan kapan harus melakukan setiap tugas, lihat Ringkasan.

Sebelum memulai

  • Baca ringkasan skrip startup.
  • Baca tentang server metadata.
  • Jika Anda belum melakukannya, siapkan autentikasi. Autentikasi adalah proses verifikasi identitas Anda untuk mengakses layanan dan API Google Cloud. Untuk menjalankan kode atau contoh dari lingkungan pengembangan lokal, Anda dapat mengautentikasi ke Compute Engine dengan memilih salah satu opsi berikut:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      Untuk menggunakan contoh REST API di halaman ini dalam lingkungan pengembangan lokal, gunakan kredensial yang Anda berikan ke gcloud CLI.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Untuk informasi selengkapnya, lihat Melakukan autentikasi untuk menggunakan REST dalam dokumentasi autentikasi Google Cloud.

Kunci metadata untuk skrip startup Linux

Skrip startup diteruskan ke VM dari lokasi yang ditentukan oleh kunci metadata. Kunci metadata menentukan apakah skrip startup disimpan secara lokal, disimpan di Cloud Storage, atau diteruskan langsung ke VM. Kunci metadata yang Anda gunakan mungkin juga bergantung pada ukuran skrip startup.

Tabel berikut menampilkan kunci metadata yang dapat Anda gunakan untuk skrip startup Linux, dan memberikan informasi tentang kunci yang akan digunakan berdasarkan lokasi penyimpanan dan ukuran skrip startup.

Kunci metadata Gunakan untuk
startup-script Meneruskan skrip startup bash atau non-bash yang disimpan secara lokal atau ditambahkan langsung, dan berukuran hingga 256 KB
startup-script-url Meneruskan skrip startup bash atau non-bash yang disimpan di Cloud Storage dan berukuran lebih dari 256 KB. String yang Anda masukkan di sini digunakan sebagaimana adanya untuk menjalankan gcloud storage. Jika startup-script-url Anda berisi karakter spasi, jangan ganti spasi dengan %20 atau menambahkan tanda kutip ganda ("") ke string startup-script-url.

Urutan eksekusi skrip startup Linux

Anda dapat menggunakan beberapa skrip startup. Skrip startup yang disimpan secara lokal atau ditambahkan langsung akan dieksekusi sebelum skrip startup yang disimpan di Cloud Storage. Tabel berikut menunjukkan urutan eksekusi skrip startup Linux berdasarkan kunci metadata.

Kunci metadata Urutan eksekusi
startup-script Pertama dalam setiap booting setelah booting awal
startup-script-url Kedua dalam setiap booting setelah booting awal

Meneruskan skrip startup Linux secara langsung

Anda dapat menambahkan konten skrip startup langsung ke VM saat membuat VM. Prosedur berikut menunjukkan cara membuat VM dengan skrip startup yang menginstal Apache dan membuat halaman web dasar.

Konsol

Meneruskan skrip startup Linux langsung ke VM baru

  1. Di Konsol Google Cloud, buka halaman Buat instance.

    Buka halaman Buat instance

  2. Untuk Boot disk, pilih Ubah, lalu pilih sistem operasi Linux.

  3. Luaskan bagian Opsi lanjutan, dan lakukan hal berikut:

    1. Luaskan bagian Pengelolaan.
    2. Di bagian Otomatisasi, tambahkan skrip startup berikut:

       #! /bin/bash
       apt update
       apt -y install apache2
       cat <<EOF > /var/www/html/index.html
       <html><body><p>Linux startup script added directly.</p></body></html>
       EOF
      
  4. Klik Buat.

Meneruskan skrip startup Linux langsung ke VM yang ada

  1. Di Konsol Google Cloud, buka halaman Instance VM.

    Buka Instance VM

  2. Klik Nama VM.

  3. Klik Edit.

  4. Di bagian Otomatisasi, tambahkan konten skrip startup Anda.

Memverifikasi skrip startup

Setelah VM dimulai, lihat IP eksternal di browser web untuk memastikan bahwa situs dibuat oleh skrip startup. Anda mungkin harus menunggu sekitar 1 menit hingga contoh skrip startup selesai.

gcloud

Meneruskan skrip startup Linux langsung ke VM baru

Teruskan konten skrip startup langsung ke VM saat membuatnya menggunakan perintah gcloud compute instances create berikut.

gcloud compute instances create VM_NAME \
  --image-project=debian-cloud \
  --image-family=debian-10 \
  --metadata=startup-script='#! /bin/bash
  apt update
  apt -y install apache2
  cat <<EOF > /var/www/html/index.html
  <html><body><p>Linux startup script added directly.</p></body></html>
  EOF'

Ganti VM_NAME dengan nama VM.

Meneruskan skrip startup Linux langsung ke VM yang ada

Tambahkan skrip startup langsung ke VM yang ada dengan menggunakan perintah gcloud compute instances add-metadata berikut:

gcloud compute instances add-metadata VM_NAME \
    --zone=ZONE \
    --metadata=startup-script='#! /bin/bash
    apt update
    apt -y install apache2
    cat <<EOF > /var/www/html/index.html
    <html><body><p>Linux startup script added directly.</p></body></html>
    EOF'

Ganti kode berikut:

  • VM_NAME: nama VM

  • ZONE: zona VM

Memverifikasi skrip startup

Setelah VM dimulai, lihat IP eksternal di browser web untuk memastikan bahwa situs dibuat oleh skrip startup. Anda mungkin harus menunggu sekitar 1 menit hingga contoh skrip startup selesai.

REST

Meneruskan skrip startup Linux langsung ke VM baru

Teruskan konten skrip startup langsung ke VM saat membuatnya menggunakan metode instances.insert berikut.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
  ...
  "networkInterfaces": [
    {
      "accessConfigs": [
        {
          "type": "ONE_TO_ONE_NAT"
        }
      ]
    }
  ],
  "metadata": {
    "items": [
      {
        "key": "startup-script",
        "value": "#! /bin/bash\napt update\napt -y install apache2\ncat <<EOF > /var/www/html/index.html\n<html><body><p>Linux startup script added directly.</p></body></html>\nEOF"
      }
    ]
  },
  ...
}

Ganti kode berikut:

  • PROJECT_ID: project ID

  • ZONE: zona untuk membuat VM

Meneruskan skrip startup Linux langsung ke VM yang ada

  1. Dapatkan nilai tags.fingerprint VM menggunakan metode instances.get.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
    

    Ganti kode berikut:

    • PROJECT_ID: project ID

    • ZONE: zona VM

    • VM_NAME: zona VM

  2. Teruskan skrip startup menggunakan nilai fingerprint, bersama dengan kunci dan nilai metadata untuk skrip startup, dalam panggilan ke metode instances.setMetadata:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata
    
    {
      "fingerprint": FINGERPRINT,
      "items": [
        {
          "key": "startup-script",
          "value": "#! /bin/bash\napt update\napt -y install apache2\ncat <<EOF > /var/www/html/index.html\n<html><body><p>Linux startup script added directly.</p></body></html>\nEOF"
        }
      ],
      ...
    }
    

    Ganti kode berikut:

    • PROJECT_ID: project ID

    • ZONE: zona VM

    • VM_NAME: zona VM

    • FINGERPRINT: nilai tags.fingerprint yang diperoleh menggunakan metode instances.get

Memverifikasi skrip startup

Setelah VM dimulai, lihat IP eksternal di browser web untuk memastikan bahwa situs dibuat oleh skrip startup. Anda mungkin harus menunggu sekitar 1 menit hingga contoh skrip startup selesai.

Meneruskan skrip startup Linux dari file lokal

Anda dapat menyimpan skrip startup dalam file lokal di workstation dan meneruskan file lokal sebagai metadata ke VM saat Anda membuatnya. Anda tidak dapat menggunakan file yang disimpan di VM sebagai skrip startup.

Sebelum meneruskan skrip startup Linux dari file lokal ke VM, lakukan hal berikut:

  1. Buat file lokal untuk menyimpan skrip startup.

  2. Perhatikan jalur relatif dari gcloud CLI ke skrip startup.

  3. Tambahkan skrip startup berikut ke file:

    #! /bin/bash
    apt update
    apt -y install apache2
    cat <<EOF > /var/www/html/index.html
    <html><body><p>Linux startup script from a local file.</p></body></html>
    EOF
    

gcloud

Meneruskan skrip startup Linux dari file lokal ke VM baru

Buat VM dan teruskan konten file lokal untuk digunakan sebagai skrip startup dengan menggunakan perintah gcloud compute instances create dengan flag --metadata-from-file.

gcloud compute instances create VM_NAME \
  --image-project=debian-cloud \
  --image-family=debian-10 \
  --metadata-from-file=startup-script=FILE_PATH

Ganti kode berikut:

  • VM_NAME: nama VM

  • FILE_PATH: jalur relatif ke file skrip startup

Meneruskan skrip startup Linux dari file lokal ke VM yang ada

Teruskan skrip startup ke VM yang ada dari file lokal dengan menggunakan perintah gcloud compute instances add-metadata berikut:

gcloud compute instances add-metadata VM_NAME \
  --zone=ZONE \
  --metadata-from-file startup-script=FILE_PATH

Ganti kode berikut:

  • VM_NAME: nama VM

  • ZONE: zona VM

  • FILE_PATH: jalur relatif ke file skrip startup

Memverifikasi skrip startup

Lihat IP eksternal di browser web untuk memverifikasi bahwa situs dibuat oleh skrip startup. Anda mungkin harus menunggu sekitar 1 menit hingga contoh skrip startup selesai.

Meneruskan skrip startup Linux dari Cloud Storage

Anda dapat menyimpan skrip startup di Cloud Storage dan meneruskannya ke VM saat membuatnya. Setelah menambahkan skrip startup ke Cloud Storage, Anda memiliki URL yang dapat digunakan untuk mereferensikan skrip startup saat Anda membuat VM.

Sebelum menambahkan skrip startup dari bucket Cloud Storage, lakukan langkah berikut:

  1. Buat file untuk menyimpan skrip startup. Contoh ini menggunakan file bash (.sh).

  2. Tambahkan kode berikut ke file bash, yang menginstal Apache dan membuat halaman web sederhana:

    #! /bin/bash
    apt update
    apt -y install apache2
    cat <<EOF > /var/www/html/index.html
    <html><body><p>Linux startup script from Cloud Storage.</p></body></html>
    EOF
    
  3. Buat bucket Cloud Storage.

  4. Tambahkan file ke bucket Cloud Storage.

Implikasi keamanan

  • Secara default, pemilik project dan editor project dapat mengakses file Cloud Storage dalam project yang sama, kecuali ada kontrol akses eksplisit yang melarangnya.

  • Jika bucket atau objek Cloud Storage kurang aman dibandingkan metadata, ada risiko eskalasi akses jika skrip startup diubah dan VM dimulai ulang. Hal ini karena setelah VM dimulai ulang, skrip startup akan berjalan sebagai root, lalu dapat menggunakan izin akun layanan yang terpasang untuk mengakses resource lainnya.

Batasan

Konsol

Meneruskan skrip startup yang disimpan di Cloud Storage ke VM baru

  1. Di Konsol Google Cloud, buka halaman Buat instance.

    Buka Create an instance

  2. Tentukan detail VM.

  3. Untuk Boot disk, pilih Ubah, lalu pilih sistem operasi Linux.

  4. Di bagian Identitas dan Akses API, pilih akun layanan yang memiliki peran Storage Object Viewer (roles/storage.objectViewer).

  5. Luaskan bagian Opsi lanjutan, lalu lakukan hal berikut:

    1. Luaskan bagian Pengelolaan.
    2. Di bagian Metadata, tambahkan nilai untuk hal berikut:

      • Kunci: kunci metadata. Tetapkan ke startup-script-url untuk menambahkan skrip startup dari Cloud Storage.

      • Nilai: nilai metadata. Tetapkan ke lokasi Cloud Storage dari file skrip startup menggunakan salah satu format berikut:

        • URL yang Diautentikasi: https://storage.googleapis.com/BUCKET/FILE
        • URI penyimpanan gcloud: gs://BUCKET/FILE

        Ganti kode berikut:

        • BUCKET: nama bucket yang berisi file skrip startup
        • FILE: nama file skrip startup
  6. Untuk membuat VM, klik Buat.

Meneruskan skrip startup yang disimpan di Cloud Storage ke VM yang ada

  1. Di Konsol Google Cloud, buka halaman Instance VM.

    Buka Instance VM

  2. Klik Nama VM.

  3. Klik Edit.

  4. Di bagian Metadata, tambahkan nilai berikut:

    • Kunci: startup-script-url

    • Nilai: lokasi Cloud Storage dari file skrip startup menggunakan salah satu format berikut:

      • URL yang Diautentikasi: https://storage.googleapis.com/BUCKET/FILE
      • URI penyimpanan gcloud: gs://BUCKET/FILE

Memverifikasi skrip startup

Lihat IP eksternal di browser web untuk memverifikasi bahwa situs dibuat oleh skrip startup. Anda mungkin harus menunggu sekitar 1 menit hingga contoh skrip startup selesai.

gcloud

Meneruskan skrip startup yang disimpan di Cloud Storage ke VM baru

Teruskan skrip startup yang disimpan di Cloud Storage ke VM saat Anda membuatnya menggunakan perintah gcloud compute instances create berikut. Untuk nilai flag --scope, gunakan storage-ro agar VM dapat mengakses Cloud Storage.

gcloud compute instances create VM_NAME \
  --image-project=debian-cloud \
  --image-family=debian-10 \
  --scopes=storage-ro \
  --metadata=startup-script-url=CLOUD_STORAGE_URL

Ganti kode berikut:

  • VM_NAME: nama VM.

  • CLOUD_STORAGE_URL: nilai metadata. Tetapkan ke lokasi Cloud Storage dari file skrip startup menggunakan salah satu format berikut:

    • URL yang Diautentikasi: https://storage.googleapis.com/BUCKET/FILE
    • URI penyimpanan gcloud: gs://BUCKET/FILE

Meneruskan skrip startup yang disimpan di Cloud Storage ke VM yang ada

Teruskan skrip startup yang disimpan di Cloud Storage ke VM yang ada dengan menggunakan perintah gcloud compute instances add-metadata berikut:

gcloud compute instances add-metadata VM_NAME \
    --zone=ZONE \
    --metadata startup-script-url=CLOUD_STORAGE_URL

Ganti kode berikut:

  • VM_NAME: nama VM.

  • ZONE: zona VM.

  • CLOUD_STORAGE_URL: nilai metadata. Tetapkan ke lokasi Cloud Storage dari file skrip startup menggunakan salah satu format berikut:

    • URL yang Diautentikasi: https://storage.googleapis.com/BUCKET/FILE
    • URI penyimpanan gcloud: gs://BUCKET/FILE

Memverifikasi skrip startup

Lihat IP eksternal di browser web untuk memverifikasi bahwa situs dibuat oleh skrip startup. Anda mungkin harus menunggu sekitar 1 menit hingga contoh skrip startup selesai.

REST

Meneruskan skrip startup yang disimpan di Cloud Storage ke VM baru

Teruskan skrip startup yang disimpan di Cloud Storage ke VM saat Anda membuatnya menggunakan metode instances.insert berikut. Di kolom scopes, tambahkan https://www.googleapis.com/auth/devstorage.read_only agar VM dapat mengakses Cloud Storage.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
  ...
  "networkInterfaces": [
    {
      "accessConfigs": [
        {
          "type": "ONE_TO_ONE_NAT"
        }
      ]
    }
  ],
  "serviceAccounts": [
    {
      "email": "default",
      "scopes": [
        "https://www.googleapis.com/auth/devstorage.read_only"
      ]
    }
  ],
  "metadata": {
    "items": [
      {
        "key": "startup-script-url",
        "value": "CLOUD_STORAGE_URL"
      }
    ]
  },
  ...
}

Ganti kode berikut:

  • PROJECT_ID: project ID.

  • ZONE: zona tempat membuat VM baru.

  • CLOUD_STORAGE_URL: nilai metadata. Tetapkan ke lokasi Cloud Storage dari file skrip startup menggunakan salah satu format berikut:

    • URL yang Diautentikasi: https://storage.googleapis.com/BUCKET/FILE
    • URI penyimpanan gcloud: gs://BUCKET/FILE

Meneruskan skrip startup yang disimpan di Cloud Storage ke VM yang ada

  1. Dapatkan nilai tags.fingerprint VM menggunakan metode instances.get.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
    

    Ganti kode berikut:

    • PROJECT_ID: project ID

    • ZONE: zona VM

    • VM_NAME: zona VM

  2. Teruskan skrip startup menggunakan nilai fingerprint, bersama dengan kunci dan nilai metadata untuk skrip startup, dalam panggilan ke metode instances.setMetadata:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata
    
    {
      "fingerprint": FINGERPRINT,
      "items": [
        {
            "key": "startup-script-url",
            "value": "CLOUD_STORAGE_URL"
        }
      ],
      ...
    }
    

    Ganti kode berikut:

    • PROJECT_ID: project ID.

    • ZONE: zona VM.

    • VM_NAME: zona VM.

    • FINGERPRINT: nilai tags.fingerprint yang diperoleh menggunakan metode instances.get.

    • CLOUD_STORAGE_URL: nilai metadata. Tetapkan ke lokasi Cloud Storage dari file skrip startup menggunakan salah satu format berikut:

      • URL yang Diautentikasi: https://storage.googleapis.com/BUCKET/FILE
      • URI penyimpanan gcloud: gs://BUCKET/FILE

Memverifikasi skrip startup

Lihat IP eksternal di browser web untuk memverifikasi bahwa situs dibuat oleh skrip startup. Anda mungkin harus menunggu sekitar 1 menit hingga contoh skrip startup selesai.

Mengakses metadata dari skrip startup Linux

Dalam skrip startup, Anda dapat mengakses nilai metadata. Misalnya, Anda dapat menggunakan skrip yang sama untuk beberapa VM, dan membuat parameter setiap skrip satu per satu dengan meneruskan nilai metadata yang berbeda ke setiap VM.

Untuk mengakses nilai metadata kustom dari skrip startup, lakukan hal berikut:

  1. Buat skrip startup yang meng-kueri nilai kunci metadata. Misalnya, skrip startup file bash berikut (.sh) meng-kueri nilai kunci metadata foo.

    #! /bin/bash
    METADATA_VALUE=$(curl http://metadata.google.internal/computeMetadata/v1/instance/attributes/foo -H "Metadata-Flavor: Google")
    apt update
    apt -y install apache2
    cat <<EOF > /var/www/html/index.html
    <html><body><p>Accessing metadata value of foo: $METADATA_VALUE</p></body></html>
    EOF
    
  2. Tetapkan nilai kunci metadata foo saat membuat VM menggunakan perintah gcloud compute instances create berikut. Untuk contoh ini, skrip startup diteruskan ke VM dari file lokal.

    gcloud

    gcloud compute instances create VM_NAME \
      --image-project=debian-cloud \
      --image-family=debian-10 \
      --metadata-from-file=startup-script=FILE_PATH \
      --metadata=foo=bar
    

    Ganti kode berikut:

    • VM_NAME: nama VM

    • FILE_PATH: jalur relatif ke file skrip startup

    Untuk informasi selengkapnya tentang cara menentukan key-value pair metadata, lihat Menetapkan metadata kustom.

  3. Dari workstation lokal, lihat IP eksternal di browser web untuk memastikan bahwa skrip startup menghasilkan nilai foo. Anda mungkin harus menunggu sekitar 1 menit hingga contoh skrip startup selesai.

Menjalankan kembali skrip startup Linux

Jalankan kembali skrip startup dengan melakukan hal berikut:

  1. Menghubungkan ke VM.

  2. Menjalankan perintah berikut:

    sudo google_metadata_script_runner startup

Melihat output skrip startup Linux

Anda dapat melihat output dari skrip startup Linux dengan melakukan salah satu hal berikut:

Langkah berikutnya