Como executar o Rails no ambiente do Cloud Run

Saiba como implantar um aplicativo Rails de exemplo no Cloud Run e como integrar bancos de dados gerenciados, armazenamento de objetos, secrets criptografados e pipelines de compilação com computação sem servidor.

A implantação de aplicativos do Rails envolve a integração de vários serviços para formar um projeto coeso. Para usar este tutorial, é necessário ter familiaridade com o desenvolvimento da Web com Rails.

Este tutorial requer o Ruby 3.0 ou mais recente e o Rails 8 ou mais recente.

Diagrama mostrando a arquitetura da implantação.
O site do Rails é veiculado pelo Cloud Run, que usa vários serviços de backup para armazenar diferentes tipos de dados (informações do banco de dados relacional, mídia recursos, secrets de configuração e imagens de contêiner). Os serviços de back-end são atualizados pelo Cloud Build como parte de uma tarefa de criação e migração.

Objetivos

  • Criar e conectar um banco de dados do Cloud SQL ao Active Record
  • Criar e usar o Secret Manager para armazenar e acessar uma chave mestra do Rails com segurança
  • Hospedar mídia e arquivos enviados pelo usuário do Active Storage no Cloud Storage
  • Usar o Cloud Build para automatizar migrações de builds e bancos de dados
  • Implantar um app Rails no Cloud Run

Custos

Antes de começar

  1. Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Run, Cloud SQL, Cloud Build, Secret Manager, and Compute Engine APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Instale a CLI do Google Cloud.

  6. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  7. Para inicializar a gcloud CLI, execute o seguinte comando:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Cloud Run, Cloud SQL, Cloud Build, Secret Manager, and Compute Engine APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Instale a CLI do Google Cloud.

  12. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  13. Para inicializar a gcloud CLI, execute o seguinte comando:

    gcloud init
  14. Verifique se as permissões suficientes estão disponíveis para a conta usada neste tutorial.

Preparar o ambiente

Neste tutorial, usamos vários serviços do Google Cloud para fornecer o banco de dados, o armazenamento de mídia e o armazenamento de secrets compatíveis com o aplicativo Rails implantado. Prepare seu ambiente configurando uma região para implantar os serviços e clonando o app Rails.

Definir o projeto e a região padrão

  1. Defina a configuração padrão do projeto para a CLI gcloud executando o seguinte comando:

    gcloud config set project PROJECT_ID
    

    Substitua PROJECT_ID pelo ID do projeto Google Cloud.

  2. Configure sua região:

    export REGION=REGION
    

    Substitua REGION por um local adequado. Para eficiência entre serviços, todos eles precisam ser implantados na mesma região. Para mais informações sobre a região mais próxima de você, consulte Produtos disponíveis por local.

Clonar o app Rails

O código do app de exemplo Rails está no repositório GoogleCloudPlatform/ruby-docs-samples no GitHub.

  1. Clone o repositório:

    git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git
    
  2. Acesse o diretório com o exemplo de código e execute os seguintes comandos para garantir que o aplicativo esteja configurado corretamente com gems e dependências necessárias:

    Linux/macOS

    cd ruby-docs-samples/run/rails
    bundle install
    

    Windows

    cd ruby-docs-samples\run\rails
    bundle install
    

Preparar os serviços de apoio

Neste tutorial, usamos vários serviços do Google Cloud para fornecer o banco de dados, o armazenamento de mídia e o armazenamento de secrets compatíveis com o projeto Rails implantado. Esses serviços são implantados em uma região específica. Para a eficácia entre serviços, é melhor que todos os serviços sejam implantados na mesma região. Para mais informações sobre a região mais próxima de você, consulte Produtos disponíveis por local.

Configurar uma instância do Cloud SQL para PostgreSQL

O Rails é compatível com vários bancos de dados relacionais, incluindo vários oferecidos pelo Cloud SQL. Neste tutorial, usamos o PostgreSQL, um banco de dados de código aberto muito usado por apps Rails.

Nas seções a seguir, descrevemos como criar uma instância, banco de dados e usuário de banco de dados do PostgreSQL para seu app Rails.

Criar uma instância do PostgreSQL

Console

  1. No console Google Cloud , acesse a página Instâncias do Cloud SQL.

    Acessar a página "Instâncias" do Cloud SQL

  2. Clique em Criar instância.

  3. Clique em Escolher PostgreSQL.

  4. No campo ID da instância, digite um nome para a instância (INSTANCE_NAME).

  5. No campo Senha, insira uma senha para o usuário postgres.

  6. Use os valores padrão dos outros campos.

  7. Clique em Criar instância.

gcloud

  • Crie a instância do PostgreSQL:

    gcloud sql instances create INSTANCE_NAME \
        --database-version POSTGRES_12 \
        --tier db-f1-micro \
        --region REGION
    

    Substitua:

    A instância leva alguns minutos para ser criar e para estar pronta para uso.

Crie um banco de dados

Console

  1. No console Google Cloud , acesse a página Instâncias do Cloud SQL.

    Acessar a página "Instâncias" do Cloud SQL

  2. Selecione a instância INSTANCE_NAME.

  3. Acesse a guia Bancos de dados.

  4. Clique em Create database.

  5. Na caixa de diálogo Nome do banco de dados, insira DATABASE_NAME.

  6. Clique em Criar.

gcloud

  • Crie o banco de dados na instância recém-criada:

    gcloud sql databases create DATABASE_NAME \
        --instance INSTANCE_NAME
    

    Substitua DATABASE_NAME por um nome para o banco de dados dentro da instância.

Criar um usuário

Gere uma senha aleatória para o usuário do banco de dados e grave-a em um arquivo chamado dbpassword:

cat /dev/urandom | LC_ALL=C tr -dc '[:alpha:]'| fold -w 50 | head -n1 > dbpassword

Console

  1. No console Google Cloud , acesse a página Instâncias do Cloud SQL.

    Acessar a página "Instâncias" do Cloud SQL

  2. Selecione a instância INSTANCE_NAME.

  3. Acesse a guia Usuários.

  4. Clique em Adicionar conta de usuário.

  5. Na caixa de diálogo Autenticação integrada:

    1. Digite o nome de usuário DATABASE_USERNAME.
    2. Insira o conteúdo do arquivo dbpassword como a senha PASSWORD.
  6. Clique em Adicionar.

gcloud

  • Crie o usuário na instância recém-criada e defina a senha como o conteúdo do dbpassword:

    gcloud sql users create DATABASE_USERNAME \
       --instance=INSTANCE_NAME --password=$(cat dbpassword)
    

    Substitua DATABASE_USERNAME por um nome para o usuário dentro da instância.

Configurar um repositório do Artifact Registry

Use o Artifact Registry para criar um repositório e armazenar a imagem do contêiner.

Console

  1. No console do Google Cloud , acesse a página Artifact Registry.

    Acessar o Artifact Registry

  2. Clique em Criar repositório.

  3. Digite o seguinte:

    • Em Nome, digite "cloud-run-source-deploy".
    • Em Formato, selecione "Docker".
    • Em Região, selecione REGION.
  4. Mantenha os valores padrão dos outros campos.

  5. Clique em Criar.

gcloud

  • Crie um repositório do Artifact Registry:

    gcloud artifacts repositories create cloud-run-source-deploy \
        --repository-format docker \
        --location REGION
    

Configurar um bucket do Cloud Storage

É possível usar o Cloud Storage para hospedar recursos estáticos e mídia do Rails enviados pelo usuário em um armazenamento de objeto altamente disponível.

Console

  1. No console do Google Cloud , acesse a página Buckets do Cloud Storage.

    Acessar buckets

  2. Clique em Criar.
  3. Na página Criar um bucket, insira as informações do seu bucket. Para ir à próxima etapa, clique em Continuar.
    1. Na seção Começar, faça o seguinte:
    2. Em Local, selecione o seguinte: us-central1
    3. Na seção Escolha como armazenar seus dados, faça o seguinte:
      1. Na seção Definir uma classe padrão, selecione o seguinte: Padrão.
      2. Para ativar o namespace hierárquico, na seção Otimizar o armazenamento para cargas de trabalho com uso intensivo de dados, selecione Ativar namespace hierárquico neste bucket.
    4. Na seção Escolha como controlar o acesso a objetos, selecione se o bucket aplica ou não a prevenção de acesso público e selecione um método de controle de acesso para os objetos do bucket.
    5. Na seção Escolha como proteger os dados do objeto, faça o seguinte:
      • Selecione qualquer uma das opções em Proteção de dados que você quer definir para o bucket.
        • Para ativar a exclusão reversível, clique na caixa de seleção Política de exclusão reversível (para recuperação de dados) e especifique o número de dias que você quer reter os objetos após a exclusão.
        • Para definir o controle de versões de objetos, clique na caixa de seleção Controle de versões de objetos (para controle de versões) e especifique o número máximo de versões por objeto e o número de dias após os quais as versões não atuais expiram.
        • Para ativar a política de retenção em objetos e buckets, clique na caixa de seleção Retenção (para compliance) e faça o seguinte:
          • Para ativar o bloqueio de retenção de objetos, clique na caixa de seleção Ativar retenção de objetos.
          • Para ativar o Bloqueio de buckets, clique na caixa de seleção Definir política de retenção de buckets e escolha uma unidade e um período de armazenamento para a retenção.
      • Para escolher como os dados do objeto serão criptografados, expanda a seção Criptografia de dados () e selecione um método de Criptografia de dados.
  4. Clique em Criar.

gcloud

  • Criar um bucket do Cloud Storage. Para criar um nome exclusivo de bucket do Cloud Storage, use PROJECT_ID e um sufixo de sua escolha, MEDIA_BUCKET_SUFFIX. No Cloud Storage, os nomes de buckets precisam ser exclusivos globalmente.

    gcloud storage buckets create gs://PROJECT_ID-MEDIA_BUCKET_SUFFIX \
        --location=REGION
    

Depois de criar um bucket, para tornar públicas as imagens enviadas, altere as permissões dos objetos de imagem para que possam ser lidas por todos.

Console

  1. No console do Google Cloud , acesse a página Buckets do Cloud Storage.

    Acessar buckets

  2. Na lista de buckets, clique no nome do bucket que você quer tornar público.

  3. Selecione a guia Permissões na parte superior da página.

  4. Clique no botão Adicionar membros.

    A caixa de diálogo Adicionar membros é exibida.

  5. No campo Novos membros, insira allUsers.

  6. No campo Selecionar uma função, selecione o submenu Cloud Storage e clique na opção Visualizador do objeto de armazenamento.

  7. Clique em Salvar.

Depois que o intervalo for compartilhado publicamente, aparecerá um ícone de link para cada objeto na coluna de acesso público. Clique nesse ícone para ver o URL do objeto.

Para saber como acessar informações detalhadas de erro sobre operações do Ruby com falha no Google Cloud console, consulte Solução de problemas.

gcloud

  • Use o comando gcloud storage buckets add-iam-policy-binding para tornar todos os objetos públicos. Use o valor de MEDIA_BUCKET_SUFFIX que você usou ao criar o bucket.

    gcloud storage buckets add-iam-policy-binding gs://PROJECT_ID-MEDIA_BUCKET_SUFFIX \
        --member=allUsers --role=roles/storage.objectViewer
    

Armazenar valores do secret no Secret Manager

Agora que os serviços de backup estão configurados, o Rails precisa de informações seguras, como senhas, para acessar esses serviços. Em vez de colocar esses valores diretamente no código-fonte do Rails, este tutorial usa o Rails Credentials e o Secret Manager para armazenar essas informações com segurança.

Criar um arquivo de credenciais criptografado e armazenar a chave como secret do Secret Manager

O Rails armazena secrets em um arquivo criptografado chamado "config/credentials.yml.enc". O arquivo pode ser descriptografado com o local config/master.key ou a variável de ambiente ENV["RAILS_MASTER_KEY"]. Nesse arquivo, é possível armazenar a senha do banco de dados da instância do Cloud SQL e outras chaves de acesso para APIs externas.

É possível armazenar essa chave com segurança no Secret Manager. Em seguida, conceda ao Cloud Run e ao Cloud Build acesso à chave que permite acessar as respectivas contas de serviço. As contas de serviço são identificadas por um endereço de e-mail que contém o número do projeto.

  1. Gere o arquivo config/credentials.yml.enc com o seguinte comando:

    bin/rails credentials:edit
    

    O comando criará um config/master.key se nenhuma chave mestra for definida, e um arquivo config/credentials.yml.enc se o arquivo não existir. Um arquivo temporário será aberto no $EDITOR padrão com o conteúdo descriptografado para adicionar os secrets.

  2. Copie e cole a senha do banco de dados da instância PostgreSQL recém-criada do arquivo dbpassword no arquivo de credenciais:

    secret_key_base: GENERATED_VALUE
    gcp:
        db_password: PASSWORD
    

    Os secrets podem ser acessados com Rails.application.credentials. Por exemplo, Rails.application.credentials.secret_key_base retorna a base da chave secreta do aplicativo e Rails.application.credentials.gcp[:db_password] retorna a senha do banco de dados.

  3. O config/credentials/yml.enc é armazenado criptografado, mas config/master.key pode ser armazenado no Secret Manager.

    Console

    1. No console do Google Cloud , acesse a página do Secret Manager.

      Acessar a página "Gerenciador de secrets"

    2. Clique em Criar secret.

    3. No campo Nome, insira um nome para o secret RAILS_SECRET_NAME.

    4. Na caixa de diálogo Valor secreto, cole o valor mater.key na caixa.

    5. Clique em Criar secret.

    6. Na página "Detalhes do secret", anote o número do projeto:

      projects/PROJECTNUM/secrets/RAILS_SECRET_NAME

    7. Na guia Permissões, clique em Adicionar membro.

    8. No campo Novos membros, digite PROJECTNUM-compute@developer.gserviceaccount.com e pressione Enter.

    9. No campo Novos membros, digite PROJECTNUM@cloudbuild.gserviceaccount.com e pressione Enter.

    10. No menu suspenso Papel, selecione Acessador de secrets do Secret Manager.

    11. Clique em Salvar.

    gcloud

    1. Crie um novo secret com o valor de config/master.key:

      gcloud secrets create RAILS_SECRET_NAME --data-file config/master.key
      

      Substitua RAILS_SECRET_NAME por um nome para o novo secret.

    2. Para confirmar a criação do secret, verifique-o:

      gcloud secrets describe RAILS_SECRET_NAME
      
      gcloud secrets versions access latest --secret RAILS_SECRET_NAME
      
    3. Encontre o valor do número do projeto:

      gcloud projects describe PROJECT_ID --format='value(projectNumber)'
      
    4. Conceda acesso ao secret para a conta de serviço do Cloud Run:

      gcloud secrets add-iam-policy-binding RAILS_SECRET_NAME \
          --member serviceAccount:PROJECTNUM-compute@developer.gserviceaccount.com \
          --role roles/secretmanager.secretAccessor
      

      Substitua PROJECTNUM pelo valor do número do projeto.

    5. Conceda acesso ao secret para a conta de serviço do Cloud Build:

      gcloud secrets add-iam-policy-binding RAILS_SECRET_NAME \
          --member serviceAccount:PROJECTNUM@cloudbuild.gserviceaccount.com \
          --role roles/secretmanager.secretAccessor
      

      Na saída, confirme se bindings lista as duas contas de serviço como membros.

Conectar o app Rails ao armazenamento e ao banco de dados produção

Neste tutorial, uma instância do PostgreSQL é usada como banco de dados de produção e o Cloud Storage como back-end de armazenamento. Para que o Rails se conecte ao banco de dados e ao bucket de armazenamento recém-criados, é necessário especificar todas as informações necessárias para acessá-los no arquivo .env. O arquivo .env contém a configuração das variáveis de ambiente do aplicativo. O aplicativo lerá esse arquivo usando a gem dotenv. Como os secrets são armazenados no credentials.yml.enc e no Secret Manager, o .env não precisa ser criptografado porque não contém nenhuma credencial confidencial.

  1. Para configurar o app Rails e se conectar ao banco de dados e ao bucket de armazenamento, abra o arquivo .env.
  2. Modifique a configuração do arquivo .env para o seguinte: Use o valor de MEDIA_BUCKET_SUFFIX que você usou ao criar o bucket.

    PRODUCTION_DB_NAME: DATABASE_NAME
    PRODUCTION_DB_USERNAME: DATABASE_USERNAME
    CLOUD_SQL_CONNECTION_NAME: PROJECT_ID:REGION:INSTANCE_NAME
    GOOGLE_PROJECT_ID: PROJECT_ID
    STORAGE_BUCKET_NAME: PROJECT_ID-MEDIA_BUCKET_SUFFIX
    

    Agora o app Rails está configurado para usar o Cloud SQL e o Cloud Storage na implantação no Cloud Run.

implantar o app no Cloud Run

Agora que os serviços de backup estão configurados, implante o app como um serviço do Cloud Run.

  1. Usando o cloudbuild.yaml fornecido, use o Cloud Build para criar a imagem, executar as migrações do banco de dados e preencher os recursos estáticos:

    gcloud builds submit --config cloudbuild.yaml \
        --substitutions _SERVICE_NAME=SERVICE_NAME,_INSTANCE_NAME=INSTANCE_NAME,_REGION=REGION,_SECRET_NAME=RAILS_SECRET_NAME
    

    Substitua SERVICE_NAME pelo nome do serviço. A primeira versão leva alguns minutos para ser concluída. Se o tempo limite da compilação expirou, aumente a duração do tempo limite inserindo --timeout=2000s no comando de compilação.

  2. Quando a criação for bem-sucedida, implante o serviço Cloud Run pela primeira vez, definindo a região de serviço, a imagem de base e a instância do Cloud SQL conectada:

    gcloud run deploy SERVICE_NAME \
            --region REGION \
            --image REGION-docker.pkg.dev/PROJECT_ID/cloud-run-source-deploy/SERVICE_NAME \
            --add-cloudsql-instances PROJECT_ID:REGION:INSTANCE_NAME \
            --allow-unauthenticated
    

    Será exibida a resposta que mostra a implantação bem-sucedida, com o URL de serviço.

  3. Para ver o serviço implantado, acesse o URL do serviço.

    Página de destino do álbum de gatos.
    Se o URL do serviço mostrar Álbum de fotos de gatos, você estará na página inicial do app.

  4. Tente fazer o upload de uma nova foto. Se o upload da foto for concluído, o aplicativo Rails foi implantado.

    Exemplo de item de álbum de gatos
    Se o URL do serviço mostrar Álbum de fotos de gatos, você estará na página inicial do app.

Atualizar o aplicativo

Embora as etapas iniciais de provisionamento e implantação tenham sido complexas, fazer atualizações é um processo mais simples:

  1. Execute o script de criação e migração do Cloud Build:

    gcloud builds submit --config cloudbuild.yaml \
            --substitutions _SERVICE_NAME=SERVICE_NAME,_INSTANCE_NAME=INSTANCE_NAME,_REGION=REGION,_SECRET_NAME=RAILS_SECRET_NAME
    
  2. Implante o serviço, especificando apenas a região e a imagem:

    gcloud run deploy SERVICE_NAME \
            --region REGION \
            --image REGION-docker.pkg.dev/PROJECT_ID/cloud-run-source-deploy/SERVICE_NAME
    

entenda o código

O app de exemplo do Rails foi criado usando comandos padrão do Rails. Os comandos a seguir criam o app cat_album e usam o comando scaffold para gerar um modelo, controlador e visualizações para o recurso de fotos:

rails new cat_album
rails generate scaffold Photo caption:text

Conexão com o banco de dados

O arquivo config/database.yml contém a configuração necessária para acessar seus bancos de dados em diferentes ambientes (desenvolvimento, teste, produção). Por exemplo, o banco de dados de produção é configurado para ser executado no Cloud SQL para PostgreSQL. O nome do banco de dados e o nome de usuário são definidos por meio de variáveis de ambiente no arquivo .env, enquanto a senha do banco de dados está armazenada no arquivo config/credentials.yml.enc, que requer o RAILS_MASTER_KEY para ser descriptografado.

Quando o aplicativo é executado no Cloud Run (totalmente gerenciado), ele se conecta à instância do PostgreSQL usando um soquete fornecido pelo ambiente do Cloud Run. Quando o aplicativo é executado na máquina local, ele se conecta à instância do PostgreSQL usando o proxy do Cloud SQL Auth.

production:
  <<: *default
  database: <%= ENV["PRODUCTION_DB_NAME"] %>
  username: <%= ENV["PRODUCTION_DB_USERNAME"] %>
  password: <%= Rails.application.credentials.gcp[:db_password] %>
  host: "<%= ENV.fetch("DB_SOCKET_DIR") { '/cloudsql' } %>/<%= ENV["CLOUD_SQL_CONNECTION_NAME"] %>"

Mídia enviada pelo usuário e armazenada na nuvem

O Rails usa o Active Storage para fazer upload de arquivos para provedores de armazenamento. Os arquivos config/storage.yml e config/environments/production.rb especificam o Cloud Storage como o provedor de serviços no ambiente de produção.

google:
  service: GCS
  project: <%= ENV["GOOGLE_PROJECT_ID"] %>
  bucket: <%= ENV["STORAGE_BUCKET_NAME"] %>
# Store uploaded files on the local file system (see config/storage.yml for options).
config.active_storage.service = :google

Automação com o Cloud Build

O arquivo cloudbuild.yaml executa não apenas as etapas comuns de criação de imagem (criação da imagem do contêiner e envio para o Artifact Registry), mas também as migrações de banco de dados do Rails. Essa migração é realizada usando jobs do Cloud Run, em que um comando personalizado é usado para que o contêiner faça a migração, em vez do servidor da Web padrão.

steps:
  - id: "build image"
    name: "gcr.io/cloud-builders/docker"
    entrypoint: 'bash'
    args: ["-c", "docker build --build-arg MASTER_KEY=$$RAILS_KEY -t ${_IMAGE_NAME} . "]
    secretEnv: ["RAILS_KEY"]

  - id: "push image"
    name: "gcr.io/cloud-builders/docker"
    args: ["push", "${_IMAGE_NAME}"]

  - id: "apply migrations"
    name: "gcr.io/google.com/cloudsdktool/cloud-sdk"
    entrypoint: /bin/bash
    secretEnv: ["RAILS_KEY"]
    args:
      - "-c"
      - |
        gcloud run jobs create migrate-job \
          --region ${_REGION} \
          --image ${_IMAGE_NAME} \
          --set-cloudsql-instances ${_CLOUD_SQL_CONNECTION_NAME} \
          --set-env-vars RAILS_MASTER_KEY=$$RAILS_KEY \
          --command bundle \
          --args exec,rails,db:migrate \
          --execute-now --wait && \
          gcloud run jobs delete  migrate-job --region ${_REGION} -q

options:
  dynamicSubstitutions: true

substitutions:
  _REGION: us-central1
  _SERVICE_NAME: rails-cat-album
  _INSTANCE_NAME: cat-album
  _SECRET_NAME: rails-master-key
  _AR_REPO_NAME: cloud-run-source-deploy
  _IMAGE_NAME: ${_REGION}-docker.pkg.dev/${PROJECT_ID}/${_AR_REPO_NAME}/${_SERVICE_NAME}
  _CLOUD_SQL_CONNECTION_NAME: ${PROJECT_ID}:${_REGION}:${_INSTANCE_NAME}

availableSecrets:
  secretManager:
  - versionName: projects/${PROJECT_ID}/secrets/${_SECRET_NAME}/versions/latest
    env: RAILS_KEY

images:
  - "${_IMAGE_NAME}"

Variáveis de substituição são usadas nessa configuração. Se você alterar os valores no arquivo, significa que a sinalização --substitutions pode ser descartada no momento da migração.

Nesta configuração, somente as migrações atuais do diretório db/migrate são aplicadas. Para criar arquivos de migração, consulte Migrações do Active Record.

Para criar a imagem e aplicar migrações, a configuração do Cloud Build precisa acessar o secret RAILS_MASTER_KEY do Secret Manager. O campo availableSecrets define a versão do secret e as variáveis de ambiente a serem usadas. O secret da chave mestra é transmitido como um argumento na etapa de imagem do build e, em seguida, é definido como o RAILS_MASTER_KEY no Dockerfile durante a criação da imagem.

ARG MASTER_KEY
ENV RAILS_MASTER_KEY=${MASTER_KEY}

Para estender a configuração do Cloud Build para incluir a implantação em uma configuração sem precisar executar dois comandos, consulte Implantação contínua do git usando o Cloud Build. Isso exige alterações no IAM, conforme descrito.

Limpeza

  1. No console Google Cloud , acesse a página Gerenciar recursos.

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.