创建启动脚本

本页介绍了如何为 Web 服务创建启动脚本,然后验证该脚本。

为确保启动 Web 服务无需手动干预,您必须创建一个启动脚本。启动脚本会执行以下任务:

  • 读取虚拟机 (VM) 元数据,并为带有 CONNECTOR_ENV 前缀的元数据设置环境变量。在创建虚拟机期间,系统会从 Marketplace 获取使用方所需的所有数据,并将其设置为 docker 中的环境变量。然后,应用便可相应地读取和处理这些环境变量。
  • 使用适当的环境变量启动包含 Web 服务的 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. 后续步骤