Un script de inicio es un archivo que realiza tareas durante el proceso de inicio de una instancia de máquina virtual (VM). Los scripts de inicio se pueden aplicar a todas las máquinas virtuales de un proyecto o a una sola máquina virtual. Los scripts de inicio especificados por metadatos a nivel de VM anulan los scripts de inicio especificados por metadatos a nivel de proyecto, y los scripts de inicio solo se ejecutan cuando hay una red disponible. Este documento describe cómo utilizar scripts de inicio en instancias de VM de Linux. Para obtener información sobre cómo agregar una secuencia de comandos de inicio a nivel de proyecto, consulta gcloud compute project-info add-metadata
.
Para los scripts de inicio de Linux, puede utilizar un archivo bash o no bash. Para utilizar un archivo que no sea bash, designe el intérprete agregando un #!
al principio del archivo. Por ejemplo, para utilizar un script de inicio de Python 3, agregue #! /usr/bin/python3
al principio del archivo.
Si especifica una secuencia de comandos de inicio mediante uno de los procedimientos de este documento, Compute Engine hace lo siguiente:
Copia el script de inicio a la VM
Establece permisos de ejecución en el script de inicio.
Ejecuta el script de inicio como usuario
root
cuando arranca la VM
Para obtener información sobre las diversas tareas relacionadas con los scripts de inicio y cuándo realizar cada una, consulte la Descripción general .
Antes de comenzar
- Lea la descripción general de los scripts de inicio .
- Lea sobre el servidor de metadatos .
- Si aún no lo has hecho, configura la autenticación. La autenticación es el proceso mediante el cual se verifica su identidad para acceder a Google Cloud servicios y API. Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:
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
-
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
- Set a default region and zone.
En la consola de Google Cloud, vaya a la página Crear una instancia .
Para utilizar un sistema operativo Linux, haga lo siguiente:
En el menú de navegación, haga clic en SO y almacenamiento .
Haga clic en Cambiar .
En el panel Disco de arranque que aparece, seleccione un sistema operativo Linux.
Para agregar directamente un script de inicio de Linux, haga lo siguiente:
En el menú de navegación, haga clic en Avanzado .
En la sección Automatización , ingrese lo siguiente en el campo Script de inicio :
#! /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
Opcional: especifique otras opciones de configuración. Para obtener más información, consulte Opciones de configuración durante la creación de instancias .
Para crear e iniciar la instancia, haga clic en Crear .
En la consola de Google Cloud, vaya a la página de instancias de VM .
Haga clic en el Nombre de la instancia.
Haga clic en Editar .
En Automatización , agregue el contenido de su script de inicio.
VM_NAME : el nombre de la VM
ZONE : la zona de la VM
PROJECT_ID : el ID del proyecto
ZONE : la zona para crear la VM en
Obtenga el valor
tags.fingerprint
de la VM mediante el métodoinstances.get
.GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
Reemplace lo siguiente:
PROJECT_ID : el ID del proyecto
ZONE : la zona de la VM
VM_NAME : la zona de la VM
Pase el script de inicio utilizando el valor
fingerprint
, junto con la clave de metadatos y el valor del script de inicio, en una llamada al métodoinstances.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" } ], ... }
Reemplace lo siguiente:
PROJECT_ID : el ID del proyecto
ZONE : la zona de la VM
VM_NAME : la zona de la VM
FINGERPRINT : el valor
tags.fingerprint
obtenido utilizando el métodoinstances.get
Cree un archivo local para almacenar el script de inicio.
Tenga en cuenta la ruta relativa desde la CLI de gcloud al script de inicio.
Agregue el siguiente script de inicio al archivo:
#! /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
VM_NAME : el nombre de la VM
FILE_PATH : la ruta relativa al archivo de script de inicio
VM_NAME : el nombre de la VM
ZONE : la zona de la VM
FILE_PATH : la ruta relativa al archivo de script de inicio
Cree un archivo para almacenar el script de inicio. Este ejemplo utiliza un archivo bash (
.sh
).Agregue lo siguiente al archivo bash, que instala Apache y crea una página web simple:
#! /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
De forma predeterminada, los propietarios y editores de proyectos pueden acceder a los archivos de Cloud Storage en el mismo proyecto, a menos que existan controles de acceso explícitos que no lo permitan.
Si el depósito u objeto de Cloud Storage es menos seguro que los metadatos, existe el riesgo de una escalada de privilegios si se modifica el script de inicio y se reinicia la VM. Esto se debe a que después de que la máquina virtual se reinicia, el script de inicio se ejecuta como
root
y luego puede usar los permisos de la cuenta de servicio adjunta para acceder a otros recursos.En la consola de Google Cloud, vaya a la página Crear una instancia .
Para utilizar un sistema operativo Linux, haga lo siguiente:
En el menú de navegación, haga clic en SO y almacenamiento .
En la sección Sistema operativo y almacenamiento , haga clic en Cambiar . Luego, seleccione un sistema operativo Linux.
Para permitir que la instancia acceda al depósito de Cloud Storage que contiene el script de inicio de Linux, haga lo siguiente:
En el menú de navegación, haga clic en Seguridad .
En la lista de cuentas de servicio , seleccione una cuenta de servicio que tenga la función de IAM de Visor de objetos de almacenamiento (
roles/storage.objectViewer
) en el depósito de Cloud Storage.
Para agregar una secuencia de comandos de inicio de Linux especificando un archivo en Cloud Storage, haga lo siguiente:
En el menú de navegación, haga clic en Avanzado .
En la sección Metadatos , haga clic en
Agregar elemento . Aparecen los campos Clave y Valor .En el campo Clave , ingrese
startup-script-url
.En el campo Valor , ingrese la ubicación de Cloud Storage del archivo de script de inicio usando uno de los siguientes formatos:
- URL autenticada
https://storage.googleapis.com/ BUCKET / FILE
URI de almacenamiento de gcloud :
gs:// BUCKET / FILE
Reemplace lo siguiente:
BUCKET : el nombre del depósito que contiene el archivo de secuencia de comandos de inicio
FILE : el nombre del archivo de script de inicio
- URL autenticada
Opcional: especifique otras opciones de configuración. Para obtener más información, consulte Opciones de configuración durante la creación de instancias .
Para crear e iniciar la instancia, haga clic en Crear .
En la consola de Google Cloud, vaya a la página de instancias de VM .
Haga clic en el Nombre de la instancia.
Haga clic en Editar .
En Metadatos , agregue los siguientes valores:
Clave :
startup-script-url
Valor : la ubicación de Cloud Storage del archivo de script de inicio usando uno de los siguientes formatos:
- URL autenticada
https://storage.googleapis.com/ BUCKET / FILE
- URI de almacenamiento de gcloud :
gs:// BUCKET / FILE
- URL autenticada
VM_NAME : el nombre de la VM.
CLOUD_STORAGE_URL : el valor de metadatos. Establezca la ubicación de Cloud Storage del archivo de script de inicio usando uno de los siguientes formatos:
- URL autenticada
https://storage.googleapis.com/ BUCKET / FILE
- URI de almacenamiento de gcloud :
gs:// BUCKET / FILE
- URL autenticada
VM_NAME : el nombre de la VM.
ZONE : la zona de la VM.
CLOUD_STORAGE_URL : el valor de metadatos. Establezca la ubicación de Cloud Storage del archivo de script de inicio usando uno de los siguientes formatos:
- URL autenticada
https://storage.googleapis.com/ BUCKET / FILE
- URI de almacenamiento de gcloud :
gs:// BUCKET / FILE
- URL autenticada
PROJECT_ID : el ID del proyecto.
ZONE : la zona para crear la nueva VM.
CLOUD_STORAGE_URL : el valor de metadatos. Establezca la ubicación de Cloud Storage del archivo de script de inicio usando uno de los siguientes formatos:
- URL autenticada
https://storage.googleapis.com/ BUCKET / FILE
- URI de almacenamiento de gcloud :
gs:// BUCKET / FILE
- URL autenticada
Obtenga el valor
tags.fingerprint
de la VM mediante el métodoinstances.get
.GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
Reemplace lo siguiente:
PROJECT_ID : el ID del proyecto
ZONE : la zona de la VM
VM_NAME : la zona de la VM
Pase el script de inicio utilizando el valor
fingerprint
, junto con la clave de metadatos y el valor del script de inicio, en una llamada al métodoinstances.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" } ], ... }
Reemplace lo siguiente:
PROJECT_ID : el ID del proyecto.
ZONE : la zona de la VM.
VM_NAME : la zona de la VM.
FINGERPRINT : el valor
tags.fingerprint
obtenido utilizando el métodoinstances.get
.CLOUD_STORAGE_URL : el valor de metadatos. Establezca la ubicación de Cloud Storage del archivo de script de inicio usando uno de los siguientes formatos:
- URL autenticada
https://storage.googleapis.com/ BUCKET / FILE
- URI de almacenamiento de gcloud :
gs:// BUCKET / FILE
- URL autenticada
Cree un script de inicio que consulte el valor de una clave de metadatos. Por ejemplo, el siguiente script de inicio del archivo bash (
.sh
) consulta el valor de la clave de metadatosfoo
.#! /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
Establece el valor de la clave de metadatos
foo
al crear una máquina virtual mediante el siguiente comandogcloud compute instances create
. Para este ejemplo, el script de inicio se pasa a la VM desde un archivo local.nube de 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
Reemplace lo siguiente:
VM_NAME : el nombre de la VM
FILE_PATH : la ruta relativa al archivo de script de inicio
Para obtener más información sobre cómo especificar un par clave/valor de metadatos, consulte Configuración de metadatos personalizados .
Desde su estación de trabajo local, vea la IP externa en un navegador web para verificar que el script de inicio genere el valor de
foo
. Es posible que deba esperar aproximadamente 1 minuto para que finalice el script de inicio de muestra.Ejecutando el siguiente comando:
sudo google_metadata_script_runner startup
Conectándose a la instancia y ejecutando el siguiente comando:
sudo journalctl -u google-startup-scripts.service
Ver el resultado a través del puerto serie 1 en la consola de Google Cloud y verificar los eventos
google_metadata_script_runner
.Aprenda a utilizar scripts de inicio en máquinas virtuales Windows .
Aprenda a solucionar problemas de scripts de inicio .
Aprenda cómo agregar un script de apagado .
Obtenga más información sobre cómo almacenar y recuperar metadatos .
REST
Para usar las muestras de la API de REST en esta página en un entorno de desarrollo local, debes usar las credenciales que proporcionas a la CLI de gcloud.
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
Para obtener más información, consulta Autentica para usar REST en la documentación de autenticación de Google Cloud .
Claves de metadatos para scripts de inicio de Linux
Se pasa un script de inicio a una máquina virtual desde una ubicación especificada mediante una clave de metadatos. Una clave de metadatos especifica si el script de inicio se almacena localmente, en Cloud Storage o se pasa directamente a la VM. La clave de metadatos que utilice también puede depender del tamaño del script de inicio.
La siguiente tabla muestra las claves de metadatos que puede usar para los scripts de inicio de Linux y proporciona información sobre qué clave usar según la ubicación de almacenamiento y el tamaño del script de inicio.
Clave de metadatos Usar para startup-script
Pasar un script de inicio bash o no bash que se almacena localmente o se agrega directamente y que tiene un tamaño de hasta 256 KB startup-script-url
Pasar un script de inicio bash o no bash que esté almacenado en Cloud Storage y que tenga un tamaño superior a 256 KB. La cadena que ingresas aquí se usa tal cual para ejecutar gcloud storage
. Si sustartup-script-url
contiene caracteres de espacio, no reemplace los espacios con%20
ni agregue comillas dobles (""
) a la cadenastartup-script-url
.Orden de ejecución de los scripts de inicio de Linux
Puede utilizar varios scripts de inicio. Los scripts de inicio almacenados localmente o agregados se ejecutan directamente antes que los scripts de inicio almacenados en Cloud Storage. La siguiente tabla muestra, según la clave de metadatos, el orden de ejecución de los scripts de inicio de Linux.
Clave de metadatos Orden de ejecución startup-script
Primero durante cada arranque después del arranque inicial startup-script-url
Segundo durante cada arranque después del arranque inicial Pasar un script de inicio de Linux directamente
Puede agregar el contenido de un script de inicio directamente a una VM cuando crea la VM. Los siguientes procedimientos muestran cómo crear una VM con un script de inicio que instala Apache y crea una página web básica.
Consola
Pasar un script de inicio de Linux directamente a una nueva VM
Pasar un script de inicio de Linux directamente a una máquina virtual existente
Verificando el script de inicio
Después de que se inicie la instancia, vea la IP externa en un navegador web para verificar que el script de inicio creó el sitio web. Es posible que deba esperar aproximadamente 1 minuto para que finalice el script de inicio de muestra.
nube de gcloud
Pasar un script de inicio de Linux directamente a una nueva VM
Pase el contenido de una secuencia de comandos de inicio directamente a una máquina virtual al crearla mediante el siguiente comando
gcloud compute instances create
.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'
Reemplace VM_NAME con el nombre de la VM.
Pasar un script de inicio de Linux directamente a una máquina virtual existente
Agrega la secuencia de comandos de inicio directamente a una VM existente mediante el siguiente comando
gcloud compute instances add-metadata
: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'
Reemplace lo siguiente:
Verificando el script de inicio
Después de que se inicie la máquina virtual, vea la IP externa en un navegador web para verificar que el script de inicio creó el sitio web. Es posible que deba esperar aproximadamente 1 minuto para que finalice el script de inicio de muestra.
DESCANSAR
Pasar un script de inicio de Linux directamente a una nueva VM
Pase el contenido de un script de inicio directamente a una máquina virtual al crearlo mediante el siguiente método
instances.insert
.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" } ] }, ... }
Reemplace lo siguiente:
Pasar un script de inicio de Linux directamente a una máquina virtual existente
Verificando el script de inicio
Después de que se inicie la máquina virtual, vea la IP externa en un navegador web para verificar que el script de inicio creó el sitio web. Es posible que deba esperar aproximadamente 1 minuto para que finalice el script de inicio de muestra.
Pasar un script de inicio de Linux desde un archivo local
Puede almacenar un script de inicio en un archivo local en su estación de trabajo y pasar el archivo local como metadatos a una VM cuando lo cree. No puede utilizar archivos almacenados en máquinas virtuales como scripts de inicio.
Antes de pasar un script de inicio de Linux desde un archivo local a una VM, haga lo siguiente:
nube de gcloud
Pasar un script de inicio de Linux desde un archivo local a una nueva máquina virtual
Cree una máquina virtual y pase el contenido de un archivo local para usarlo como secuencia de comandos de inicio mediante el comando
gcloud compute instances create
con la marca--metadata-from-file
.gcloud compute instances create VM_NAME \ --image-project=debian-cloud \ --image-family=debian-10 \ --metadata-from-file=startup-script=FILE_PATH
Reemplace lo siguiente:
Pasar un script de inicio de Linux desde un archivo local a una máquina virtual existente
Pase una secuencia de comandos de inicio a una máquina virtual existente desde un archivo local mediante el siguiente comando
gcloud compute instances add-metadata
:gcloud compute instances add-metadata VM_NAME \ --zone=ZONE \ --metadata-from-file startup-script=FILE_PATH
Reemplace lo siguiente:
Verificando el script de inicio
Vea la IP externa en un navegador web para verificar que el script de inicio creó el sitio web. Es posible que deba esperar aproximadamente 1 minuto para que finalice el script de inicio de muestra.
Pasar un script de inicio de Linux desde Cloud Storage
Puedes almacenar un script de inicio en Cloud Storage y pasarlo a una VM cuando lo creas. Después de agregar una secuencia de comandos de inicio a Cloud Storage, tiene una URL que puede usar para hacer referencia a la secuencia de comandos de inicio cuando crea una VM.
Antes de agregar una secuencia de comandos de inicio desde un depósito de Cloud Storage, haga lo siguiente:
Implicaciones de seguridad
Limitaciones
Consola
Pasar una secuencia de comandos de inicio almacenada en Cloud Storage a una nueva máquina virtual
Pasar una secuencia de comandos de inicio almacenada en Cloud Storage a una máquina virtual existente
Verificando el script de inicio
Vea la IP externa en un navegador web para verificar que el script de inicio creó el sitio web. Es posible que deba esperar aproximadamente 1 minuto para que finalice el script de inicio de muestra.
nube de gcloud
Pasar una secuencia de comandos de inicio almacenada en Cloud Storage a una nueva máquina virtual
Pase una secuencia de comandos de inicio almacenada en Cloud Storage a una máquina virtual cuando la cree mediante el siguiente comando
gcloud compute instances create
. Para el valor del indicador--scope
, usestorage-ro
para que la VM pueda acceder a 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
Reemplace lo siguiente:
Pasar una secuencia de comandos de inicio almacenada en Cloud Storage a una máquina virtual existente
Pasa una secuencia de comandos de inicio que está almacenada en Cloud Storage a una VM existente mediante el siguiente comando
gcloud compute instances add-metadata
:gcloud compute instances add-metadata VM_NAME \ --zone=ZONE \ --metadata startup-script-url=CLOUD_STORAGE_URL
Reemplace lo siguiente:
Verificando el script de inicio
Vea la IP externa en un navegador web para verificar que el script de inicio creó el sitio web. Es posible que deba esperar aproximadamente 1 minuto para que finalice el script de inicio de muestra.
DESCANSAR
Pasar una secuencia de comandos de inicio almacenada en Cloud Storage a una nueva máquina virtual
Pase una secuencia de comandos de inicio almacenada en Cloud Storage a una máquina virtual cuando la cree mediante el siguiente método
instances.insert
. En el camposcopes
, agreguehttps://www.googleapis.com/auth/devstorage.read_only
para que la VM pueda acceder a 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" } ] }, ... }
Reemplace lo siguiente:
Pasar una secuencia de comandos de inicio almacenada en Cloud Storage a una máquina virtual existente
Verificando el script de inicio
Vea la IP externa en un navegador web para verificar que el script de inicio creó el sitio web. Es posible que deba esperar aproximadamente 1 minuto para que finalice el script de inicio de muestra.
Acceder a metadatos desde un script de inicio de Linux
En un script de inicio puede acceder a los valores de metadatos. Por ejemplo, puede utilizar el mismo script para varias máquinas virtuales y parametrizar cada script individualmente pasando diferentes valores de metadatos a cada máquina virtual.
Para acceder a un valor de metadatos personalizado desde un script de inicio, haga lo siguiente:
Volver a ejecutar un script de inicio de Linux
Vuelva a ejecutar un script de inicio haciendo lo siguiente:
Ver el resultado de un script de inicio de Linux
Puede ver el resultado de un script de inicio de Linux realizando cualquiera de las siguientes acciones:
¿Qué sigue?
A menos que se indique lo contrario, el contenido de esta página está sujeto a la licencia Reconocimiento 4.0 de Creative Commons y las muestras de código están sujetas a la licencia Apache 2.0. Para obtener más información, consulta las políticas del sitio web de Google Developers. Java es una marca registrada de Oracle o sus afiliados.
Última actualización: 2025-04-17 (UTC).
-