Guia de início rápido do Packer

Nesta página explicamos como usar o Packer e o Cloud Build para criar uma imagem de VM para uso no Google Compute Engine. Você criará uma configuração da versão definindo instruções para o Packer e o Cloud Build. Em seguida, você usará a configuração para iniciar uma criação.

Antes de começar

  1. Faça login na sua Conta do Google.

    Se você ainda não tiver uma, inscreva-se.

  2. No Console do GCP, na página do seletor de projetos, selecione ou crie um projeto do GCP.

    Acesse a página do seletor de projetos

  3. Verifique se o faturamento foi ativado no projeto do Google Cloud Platform. Saiba como confirmar que o faturamento está ativado para seu projeto.

  4. Ative a(s) Cloud Build API necessária(s).

    Ativar a(s) API

  5. Instale e inicialize o SDK do Cloud..

Fazer login no Google Cloud Platform

  1. Autorize a ferramenta de linha de comando gcloud a acessar seu projeto:

    gcloud auth login
    
  2. Configure seu projeto para a ferramenta gcloud:

    gcloud config set project [PROJECT_ID]
    

    [PROJECT_ID] é o ID do projeto do GCP que você criou ou selecionou na seção anterior.

Configurar seu projeto

  1. Conclua uma das seguintes ações:

    • Se você ainda não criou uma configuração, consulte configurações de tópico do gcloud.

    • Se você já tiver criado uma configuração, ative-a:

      gcloud config configurations activate [CONFIGURATION NAME]

  2. Defina a variável do projeto:

    PROJECT=$(gcloud config get-value project)
    

    Depois que a variável do projeto for definida, o comando retornará a seguinte saída:

    Your active configuration is: [<your-config-name>]
    
  3. Verifique se a variável do projeto está definida corretamente:

    echo $PROJECT
    

Ativar serviços

Ative os serviços da API Cloud obrigatórios para seu projeto:

gcloud services enable sourcerepo.googleapis.com
gcloud services enable cloudapis.googleapis.com
gcloud services enable compute.googleapis.com
gcloud services enable servicemanagement.googleapis.com
gcloud services enable storage-api.googleapis.com
gcloud services enable cloudbuild.googleapis.com

Definir permissões

  1. Localize a conta de serviço do Cloud Build:

    CLOUD_BUILD_ACCOUNT=$(gcloud projects get-iam-policy $PROJECT --filter="(bindings.role:roles/cloudbuild.builds.builder)"  --flatten="bindings[].members" --format="value(bindings.members[])")
    
  2. Adicione o papel de editor à conta:

    gcloud projects add-iam-policy-binding $PROJECT \
      --member $CLOUD_BUILD_ACCOUNT \
      --role roles/editor
    

    Você verá o relatório de política do IAM atualizado para seu projeto.

Criar uma imagem do criador do Packer

Clone o repositório cloud-builders-community para criar uma imagem usando o criador de imagens do Packer. Em seguida, envie a imagem para o repositório do contêiner:

  1. Salve seu diretório de trabalho:

    project_dir=$(pwd)
    
  2. Navegue até o diretório temporário:

    cd /tmp
    
  3. Clone o repositório cloud-builders-community:

    git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.git
    
  4. Acesse a imagem do criador do Packer:

    cd cloud-builders-community/packer
    
  5. Envie o criador para seu projeto:

    gcloud builds submit .
    

    Quando a criação estiver concluída, você verá uma saída semelhante à seguinte:

    DONE
    --------------------------------------------------------------------------------
    
    ID                                    CREATE_TIME                DURATION  SOURCE                                                                                         IMAGES                                       STATUS
    e3d89cdd-924c-4539-bc9d-2c87e0e910e5  2019-06-14T19:06:44+00:00  1M11S     gs://[PROJECT_ID]_cloudbuild/source/1560539203.19-1d492a75515340f1bc92c0a8a6937308.tgz  gcr.io/[PROJECT_ID]/packer (+2 more)  SUCCESS
    

    Também é possível ver a versão na página do Cloud Build no Console do Google Cloud Platform.

    Abra a página do Cloud Build

    Você verá a página Histórico da versão com detalhes da sua criação:

    Captura de tela da imagem de criação do Packer

  6. Remova o repositório do seu diretório temporário:

    rm -rf /tmp/cloud-builders-community
    
  7. Volte para $project_dir.

    cd $project_dir
    

Preparar arquivos de origem

Você precisará de um código-fonte de amostra para criar. Nesta seção, você criará um exemplo simples do Hello World usando o criador do Packer.

  1. Crie um diretório chamado hello-world e o acesse:

    mkdir hello-world
    cd hello-world
    
  2. Crie um arquivo chamado cloudbuild.yaml com o seguinte conteúdo:

    steps:
    - name: 'gcr.io/$PROJECT_ID/packer'
      args:
      - build
      - -var
      - image_name=$_IMAGE_NAME
      - -var
      - project_id=$PROJECT_ID
      - -var
      - image_family=$_IMAGE_FAMILY
      - -var
      - image_zone=$_IMAGE_ZONE
      - packer.json
    
  3. Crie um arquivo chamado install-website.sh com o seguinte conteúdo:

    #!/bin/sh
    sudo yum install -y epel-release
    sudo yum install -y nginx
    sudo chkconfig nginx on
    LOCATION_OF_INDEX=/usr/share/nginx/html/index.html
    sudo bash -c "cat <<A_VERY_SPECIAL_MESSAGE>$LOCATION_OF_INDEX
    <html>
    <h2> Hello World! </h2>
    </html>
    
    A_VERY_SPECIAL_MESSAGE
    "
    
  4. Crie um arquivo chamado packer.json com o seguinte conteúdo:

    {
        "variables": {
            "image_name": "",
            "image_family": "",
            "image_zone": "",
            "project_id": ""
        },
    
        "builders": [
            {
                "image_name": "{{ user `image_name` }}",
                "type": "googlecompute",
                "project_id": "{{ user `project_id`}}",
                "source_image_family": "centos-7",
                "image_family": "{{ user `image_family` }}",
                "ssh_username": "packer",
                "zone": "{{ user `image_zone` }}",
                "startup_script_file": "install-website.sh",
                "scopes": [
                    "https://www.googleapis.com/auth/userinfo.email",
                    "https://www.googleapis.com/auth/compute",
                    "https://www.googleapis.com/auth/devstorage.full_control"
                ]
            }
        ]
    }
    

    Agora você tem os seguintes arquivos em seu diretório hello-world: cloudbuild.yaml, install-website.sh e packer.json.

  5. Verifique a criação:

    gcloud builds submit --substitutions=_IMAGE_NAME="hello-v1",_IMAGE_FAMILY="hello-world",_IMAGE_ZONE="us-east1-b"
    

    Depois que a criação for concluída, você verá uma saída semelhante à seguinte:

    DONE
    --------------------------------------------------------------------------------
    
    ID                                    CREATE_TIME                DURATION  SOURCE                                                                                         IMAGES  STATUS
    9a279714-e908-4033-9b46-25f8753e2cdc  2019-06-14T19:43:49+00:00  5M35S     gs://[PROJECT_ID]_cloudbuild/source/1560541428.62-64d0dc6fb01648d1be6fae9e045f6093.tgz  -       SUCCESS
    

Modificar a imagem

  1. Abra install-website.sh.

  2. Na tag <h2>, altere "Hello World" para "Hello Universe":

    #!/bin/sh
    sudo yum install -y epel-release
    sudo yum install -y nginx
    sudo chkconfig nginx on
    LOCATION_OF_INDEX=/usr/share/nginx/html/index.html
    sudo bash -c "cat <<A_VERY_SPECIAL_MESSAGE>$LOCATION_OF_INDEX
    <html>
    <h2> Hello Universe! </h2>
    </html>
    
    A_VERY_SPECIAL_MESSAGE
    "
    
  3. Verifique a versão com o novo nome da imagem:

    gcloud builds submit --substitutions=_IMAGE_NAME="hello-v2",_IMAGE_FAMILY="hello-world",_IMAGE_ZONE="us-east1-b"
    

    Depois que a criação for concluída, você verá uma saída semelhante à seguinte:

    DONE
    --------------------------------------------------------------------------------
    
    ID                                    CREATE_TIME                DURATION  SOURCE                                                                                         IMAGES  STATUS
    7787c289-cb07-4e14-91f0-c74055b527a0  2019-06-14T19:57:11+00:00  4M56S     gs://[PROJECT_ID]_cloudbuild/source/1560542231.04-89ff301824a348be9c524a90124488ff.tgz  -       SUCCESS
    
  4. Abra a página "Imagens" no Console do Google Cloud Platform para ver as duas imagens.

    Acesse a página "Imagens"

    Captura de tela da família de imagens do Packer

Limpar

Para evitar cobranças na sua conta do GCP pelos recursos usados neste guia de início rápido, siga estas etapas.

  1. Excluir a imagem do Packer:

    gcloud container images delete --quiet gcr.io/$PROJECT/packer  --force-delete-tags
    
  2. Exclua as imagens hello-world:

    gcloud compute images delete --quiet hello-v1 hello-v2
    

A seguir