Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
Nesta página, descrevemos quando e por que é necessário criar modelos deterministas de instância. Esses modelos deixam bastante claro quando o modelo de instância é implantado, em termos de tipo de serviços ou aplicativos de terceiros que precisam ser instalados em suas instâncias. Ao criá-los, você minimiza a ambiguidade e o comportamento inesperado de seus modelos de instância.
Por que criar modelos deterministas de instância?
Em geral, recomendamos que você defina as propriedades do modelo de instância da maneira mais explícita e determinista possível. Se você decidir empregar scripts de inicialização que instalem ou usem serviços de terceiros nos seus modelos de instância, verifique se informações explícitas, como a versão do aplicativo a ser instalado, são fornecidas. O Compute Engine depende das informações definidas no modelo. Ele não tem nenhum controle sobre os serviços de terceiros referenciados. O modelo de instância pode apresentar comportamentos inesperados quando ele é muito vago.
Por exemplo, pense no comando a seguir para criar um modelo de instância com um script de inicialização que instale o apache2 e use um arquivo hospedado em um servidor externo:
Há dois possíveis problemas nesse script de inicialização:
O script não define explicitamente qual versão do apache2 será instalada,
ele depende da versão atual disponível no repositório apt.
O script depende de um arquivo hospedado em um serviço de terceiros sem controle de versão. Esse arquivo pode ter sido alterado depois que o modelo de instância foi usado pela última vez.
Ao usar um escalonador automático com um modelo de instância não determinista, novas instâncias podem acabar sendo adicionadas a um grupo de instâncias gerenciadas com uma configuração diferente, como outra versão do apache2.
De maneira semelhante, se você aplica esse modelo a um grupo de instâncias gerenciadas, atualiza o grupo para um modelo diferente e decide revertê-lo ao modelo anterior, pode acabar com instâncias que usam uma versão do apache2 ou do arquivo index.php diferente daquela usada antes da atualização, já que na inicialização as instâncias sempre buscam a versão mais recente.
Como evitar comportamento ambíguo ou inesperado do modelo de instância
Para evitar comportamento inesperado do modelo, use um destes métodos:
Use imagens otimizadas para contêiner ou do Docker, com tags do Docker. Por exemplo, recomendamos que você atribua novas tags a cada versão nova da imagem do Docker. Além disso, use essas tags nos modelos de instância, em vez da tag padrão mais recente. Para imagens otimizadas para contêiner, faça uma referência explícita a uma versão específica da imagem no arquivo de manifesto. O exemplo abaixo usa a imagem do Docker "myimage" na versão com a tag "version_2_1_3":
Crie uma imagem personalizada para ser usada como a imagem do modelo. Dê preferência a essa opção, porque você consegue garantir que as instâncias sejam idênticas. Ao usar um script de inicialização, os resultados podem ser diferentes, dependendo das atualizações do pacote de distribuição. Use scripts de inicialização nos modelos de instância para criar protótipos e fazer um desenvolvimento rápido. Escolha as imagens personalizadas quando estiver tudo pronto para implantar os serviços de produção-qualidade.
Caso precise usar os scripts de inicialização, verifique se é possível torná-los deterministas. Por exemplo, crie uma nova versão do modelo anterior e especifique um script de inicialização determinista da seguinte maneira:
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Informações incorretas ou exemplo de código","incorrectInformationOrSampleCode","thumb-down"],["Não contém as informações/amostras de que eu preciso","missingTheInformationSamplesINeed","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 2025-06-16 UTC."],[[["\u003cp\u003eDeterministic instance templates ensure clarity on the third-party services or apps installed on instances during deployment, minimizing ambiguity.\u003c/p\u003e\n"],["\u003cp\u003eUsing explicit versioning in startup scripts, such as specifying the exact version of Apache2 to install, helps avoid unexpected behavior due to changes in third-party services.\u003c/p\u003e\n"],["\u003cp\u003eNon-deterministic templates can cause autoscalers to deploy instances with varying configurations, such as different software versions, potentially leading to inconsistencies.\u003c/p\u003e\n"],["\u003cp\u003eTo maintain consistency and predictability, use container-optimized images with specific Docker tags, or create custom images instead of relying heavily on startup scripts.\u003c/p\u003e\n"],["\u003cp\u003eWhen using startup scripts, make them deterministic by specifying exact versions of software and files, like \u003ccode\u003eapache2=2.2.20-1ubuntu1\u003c/code\u003e, and versioned directories for hosted files.\u003c/p\u003e\n"]]],[],null,["*** ** * ** ***\n\nThis page describes when and why to create deterministic instance\ntemplates. Deterministic instance templates make explicitly clear\nthe type of third-party services or apps to install on\nyour instances when the instance template is deployed. By creating deterministic\ninstance templates, you minimize ambiguity and unexpected behavior from your\ninstance templates.\n\nWhy create deterministic instance templates\n\nIn general, we recommend that the properties of your instance template be as\nexplicit and deterministic as possible. If you employ startup\nscripts in your instance templates that install or use third-party services,\nmake sure that these scripts provide explicit information, such as the\nversion of app to install. Compute Engine can only rely on\ninformation defined in the template and has no control over referenced\nthird-party services. If your template is too vague, your instance template\nmight behave unexpectedly.\n\nFor example, consider the following command to create an instance template with\na startup script that installs apache2 and uses a file that is hosted on an\nexternal server:\n**Note:** This is just an example snippet pointing to a non-existent server at 108.59.87.185. Copying this example directly fails when the script attempts to connect to 108.59.87.185. Instead, replace the last line with your own server information, if applicable. \n\n gcloud compute instance-templates create example-template-with-startup \\\n --image-family debian-9 \\\n --image-project debian-cloud \\\n --metadata startup-script='#! /bin/bash\n sudo apt install -y apache2\n scp myuser@108.59.87.185:index.php /var/www/'\n\nThere are two potential issues with this startup script:\n\n- The script does not explicitly define which version of apache2 to install, and relies on the current version available in the `apt` repository.\n- The script relies on a file hosted on a third-party that isn't versioned and could have been changed since the last time the instance template was used.\n\nIf you use an [autoscaler](/compute/docs/autoscaler), a non-deterministic\ninstance template can cause your autoscaler to add new instances to a\n[managed instance group](/compute/docs/instance-groups) with a different\nconfiguration, such as a different version of apache2.\n\nSimilarly, if you applied this template to a managed instance group, [updated\nthe group to a different template](/compute/docs/instance-groups/updating-migs)\nservice, and then decided to roll back to the previous template, you might end\nup with instances that use a different version of apache2 or index.php file\nthan before the update because your instances would always fetch the most recent\nversion at startup.\n\nAvoiding ambiguous or unexpected instance template behavior\n\nTo avoid unexpected template behavior, use the following methods:\n\n- Use [container-optimized images](/compute/docs/containers/container_vms) or\n Docker, with Docker tags. For example, we recommend that you assign new tags\n for every new build of your Docker image, and use these tags in your instance\n templates instead of the default latest tag. For a container-optimized image,\n you can explicitly reference a particular build of your image in your manifest\n file. The example below uses Docker image \"myimage\" at version tagged with\n \"version_2_1_3\":\n\n version: v1beta2\n containers:\n - name: simple-echo\n image: myimage:version_2_1_3\n [ rest of your manifest file ]\n\n- [Create a custom image](/compute/docs/images/create-delete-deprecate-private-images)\n to use as the image for the template. This is preferable to startup scripts\n because it guarantees that every instance is the same. Startup scripts might\n have different results after distribution package updates. Use startup scripts\n in your instance templates for prototyping and rapid development, and use\n custom images when you are ready to deploy production-quality services.\n\n- If you do use startup scripts, consider updating your scripts to be\n deterministic. For example, create a new version of the previous template, and\n specify a deterministic startup script as follows:\n\n gcloud compute instance-templates create example-template-with-startup-2-1-3 \\\n --image-family debian-9 \\\n --image-project debian-cloud \\\n --metadata startup-script='#! /bin/bash\n sudo apt install -y apache2=2.2.20-1ubuntu1\n scp myuser@108.59.87.185:version_2_1_3/index.php /var/www/'\n\n where \"version_2_1_3\" is a subdirectory containing PHP scripts for the\n version 2.1.3 of your service.\n- When specifying an instance template---for example when you are creating or\n updating a managed instance group---Google recommends that you specify the\n template's ID value instead of its name value. Although both values are valid,\n the ID is unique, which means that the instance template that you specify is\n the one that is used when creating VMs from that instance template. Using an\n ID instead of a name helps to mitigate potential security vulnerabilities---for\n example,\n [TOCTOU](https://en.wikipedia.org/wiki/Time_of_check_to_time_of_use_vulnerability)\n vulnerabilities, where an attacker can delete a template and recreate it with\n the same name prior to its use.\n\n To view the ID of an instance template, see\n [Get information about an instance template](/compute/docs/instance-templates/get-list-delete-instance-templates#get_information_about_an_instance_template).\n\nWhat's next\n\n- [Create an instance template](/compute/docs/instance-templates/create-instance-templates).\n- [Manage your instance templates](/compute/docs/instance-templates/get-list-delete-instance-templates)."]]