יצירת סקריפט לטעינה בזמן ההפעלה

בדף הזה מוסבר איך ליצור סקריפט לטעינה בזמן ההפעלה לשירות האינטרנט ואז לאמת את הסקריפט.

כדי לוודא שלא נדרשת התערבות ידנית כדי להפעיל את שירות האינטרנט, צריך ליצור סקריפט לטעינה בזמן ההפעלה.סקריפט לטעינה בזמן ההפעלה מבצע את המשימות הבאות:

  • קורא את המטא-נתונים של המכונה הווירטואלית ומגדיר את משתנה הסביבה למטא-נתונים עם התחילית CONNECTOR_ENV. כל הנתונים שנדרשים לצרכנים נלקחים במהלך יצירת מכונה וירטואלית מ-Marketplace ומוגדרים כמשתני סביבה ב-Docker. אחר כך האפליקציה יכולה לקרוא את משתני הסביבה האלה ולעבד אותם בהתאם.
  • מפעילים את קונטיינר Docker שמכיל את שירות האינטרנט עם משתני הסביבה המתאימים.

הקוד הבא הוא סקריפט לטעינה בזמן ההפעלה לדוגמה:

#!/bin/bash

# 1. Fetch Metadata Keys
metadata_keys_url="http://metadata.google.internal/computeMetadata/v1/instance/attributes/"
metadata_keys=$(curl -H "Metadata-Flavor: Google" "$metadata_keys_url")

# 2. Set Environment Variables for CONNECTOR_ENV Keys (with error handling)
for key in $metadata_keys; do
  if [[ $key == CONNECTOR_ENV_* ]]; then
    metadata_value_url="http://metadata.google.internal/computeMetadata/v1/instance/attributes/$key"

    # Fetch value with error handling
    value=$(curl -H "Metadata-Flavor: Google" "$metadata_value_url" 2>/dev/null)
    if [[ -z "$value" ]]; then
      echo "Warning: No value found for key '$key'. Skipping." >&2 # Log the warning to stderr
      continue  # Skip to the next iteration
    fi
    export "$key=$value"
  fi
done

# 3. Run Docker with Environment Variables
sudo docker stop connector-service || true
sudo docker run \
  --name connector-service \
 $(env | grep CONNECTOR_ENV_ | sed 's/=/="/;s/$/"/' | sed 's/^/-e /') \
 -d -p $CONNECTOR_ENV_PORT:$CONNECTOR_ENV_PORT \
 --restart=unless-stopped \
  connector-container

אימות הסקריפט לטעינה בזמן ההפעלה

  1. במכונה הווירטואלית, מוסיפים את המטא-נתונים של היציאה ושל כל הפרמטרים האחרים שנדרשים במהלך יצירת המכונה הווירטואלית.
    gcloud compute instances add-metadata VM_NAME \                                                   
        --zone=VM_ZONE \
        --project=PROJECT_NAME \
        --metadata=CONNECTOR_ENV_PORT=8081
  2. עורכים את המכונה הווירטואלית בממשק המשתמש ומוסיפים את הסקריפט לטעינה בזמן ההפעלה שמוזכר בקטע בנושא אוטומציה.

    אפשר גם להשתמש בפקודת gcloud הבאה:

    gcloud compute instances add-metadata VM_NAME \                                                   
        --zone=VM_ZONE \
        --project=PROJECT_NAME \
        --metadata-from-file startup-script=gcp-start.sh
  3. אחרי שמוסיפים את הסקריפט לטעינה בזמן ההפעלה, מתחברים למכונה הווירטואלית באמצעות SSH ומריצים את הפקודה הבאה:
    sudo google_metadata_script_runner startup
  4. מריצים את הפקודה הבאה כדי לוודא שקונטיינר Docker פועל ביציאה שצוינה.
    sudo docker ps
  5. מריצים את הפקודה הבאה כדי לעצור ולהסיר את שירות Docker. אחרי הבדיקה, השירות לא צריך לפעול במכונה הווירטואלית.
    sudo docker rm -f connector-service
  6. המאמרים הבאים