Checkpoints
Provision infrastructure
/ 50
Upload files to the bucket
/ 50
Interagir com os módulos do Terraform
Este laboratório foi desenvolvido com nossa parceira, a Hashicorp. Suas informações pessoais podem ser compartilhadas com a Hashicorp, patrocinadora do laboratório, caso você tenha aceitado receber atualizações de produtos, anúncios e ofertas em seu perfil de conta.
GSP751
Visão geral
Quando você gerencia sua infraestrutura com o Terraform, configurações cada vez mais complexas são criadas. Não há limite intrínseco para a complexidade de um único arquivo ou diretório de configuração do Terraform. Portanto, é possível continuar gravando e atualizando seus arquivos de configuração em um único diretório. Porém, se você faz isso, pode se deparar com um ou mais dos seguintes problemas:
- Entender e navegar pelos arquivos de configuração vai ficar cada vez mais difícil.
- Atualizar a configuração vai ser mais arriscado, porque a atualização de um bloco pode causar consequências não intencionais nos outros blocos da sua configuração.
- Por exemplo, a duplicação de blocos de configuração semelhantes pode aumentar quando você configurar ambientes separados de desenvolvimento/preparo/produção, o que vai causar uma carga crescente ao atualizar essas partes da sua configuração.
- Se quiser compartilhar partes da sua configuração entre projetos e equipes, pode ser difícil recortar e colar blocos de configuração entre projetos, aumentando a chance de erros.
Neste laboratório, vamos aprender como os módulos podem resolver esses problemas, a estrutura de um módulo do Terraform e as práticas recomendadas ao usar e criar módulos.
Para que servem os módulos?
Os módulos podem ajudar a resolver os problemas listados acima de algumas formas, por exemplo:
-
Organizar configuração: os módulos facilitam a navegação, o entendimento e a atualização da configuração, mantendo juntas as partes da configuração relacionadas. Mesmo infraestruturas moderadamente complexas podem exigir centenas ou milhares de linhas de configuração para serem implementadas. Com os módulos, você pode organizar sua configuração em componentes lógicos.
-
Encapsular configuração: outro benefício de usar módulos é encapsular a configuração em componentes lógicos distintos. O encapsulamento pode ajudar a evitar consequências não intencionais, como uma alteração em uma parte de sua configuração causando acidentalmente alterações em outra infraestrutura, e a reduzir as chances de erros simples, como usar o mesmo nome para dois recursos diferentes.
-
Reutilizar configuração: escrever toda sua configuração sem usar códigos existentes pode ser demorado e propenso a erros. Com o uso de módulos, é possível poupar tempo e reduzir erros caros ao reutilizar uma configuração escrita por você, por outros membros da sua equipe ou por profissionais do Terraform que tenham publicado módulos para uso. Você também pode compartilhar módulos que tiver criado com sua equipe ou com o público em geral, para que possam aproveitar seu trabalho.
-
Fornecer consistência e garantir as práticas recomendadas: os módulos também ajudam a fornecer consistência nas suas configurações. A consistência facilita o entendimento de configurações complexas e ajuda a garantir que as práticas recomendadas sejam aplicadas em toda sua configuração. Por exemplo, os provedores de nuvem oferecem muitas opções para configurar serviços de armazenamento de objetos, como Amazon S3 (Simple Storage Service) ou buckets do Cloud Storage do Google. Muitos incidentes graves de segurança envolvem o armazenamento de objetos com proteção incorreta e, devido à quantidade de opções de configuração complexas envolvidas, é comum configurar esses serviços de maneira incorreta por acidente.
Usar módulos pode ajudar a reduzir esses erros. Por exemplo, você pode criar um módulo para descrever como todos os buckets de sites públicos da sua organização são configurados, e outro módulo para buckets privados usados para aplicativos de geração de registros. Além disso, se uma configuração para um tipo de recurso precisar ser atualizada, o uso de módulos possibilita que você faça essa atualização em apenas um local e depois a aplique a todos os casos em que o módulo seja usado.
Objetivos
Neste laboratório, você vai aprender a fazer o seguinte:
- Usar um módulo do Registry
- Criar um módulo
Configuração e requisitos
Antes de clicar no botão Start Lab
Leia estas instruções. Os laboratórios são cronometrados e não podem ser pausados. O timer é iniciado quando você clica em Começar o laboratório e mostra por quanto tempo os recursos do Google Cloud vão ficar disponíveis.
Este laboratório prático permite que você realize as atividades em um ambiente real de nuvem, não em uma simulação ou demonstração. Você vai receber novas credenciais temporárias para fazer login e acessar o Google Cloud durante o laboratório.
Confira os requisitos para concluir o laboratório:
- Acesso a um navegador de Internet padrão (recomendamos o Chrome).
- Tempo para concluir o laboratório---não se esqueça: depois de começar, não será possível pausar o laboratório.
Como iniciar seu laboratório e fazer login no console do Google Cloud
-
Clique no botão Começar o laboratório. Se for preciso pagar, você verá um pop-up para selecionar a forma de pagamento. No painel Detalhes do laboratório à esquerda, você vai encontrar o seguinte:
- O botão Abrir console do Google Cloud
- O tempo restante
- As credenciais temporárias que você vai usar neste laboratório
- Outras informações, se forem necessárias
-
Se você estiver usando o navegador Chrome, clique em Abrir console do Google Cloud ou clique com o botão direito do mouse e selecione Abrir link em uma janela anônima.
O laboratório ativa os recursos e depois abre a página Fazer login em outra guia.
Dica: coloque as guias em janelas separadas lado a lado.
Observação: se aparecer a caixa de diálogo Escolher uma conta, clique em Usar outra conta. -
Se necessário, copie o Nome de usuário abaixo e cole na caixa de diálogo Fazer login.
{{{user_0.username | "Nome de usuário"}}} Você também encontra o Nome de usuário no painel Detalhes do laboratório.
-
Clique em Seguinte.
-
Copie a Senha abaixo e cole na caixa de diálogo de boas-vindas.
{{{user_0.password | "Senha"}}} Você também encontra a Senha no painel Detalhes do laboratório.
-
Clique em Seguinte.
Importante: você precisa usar as credenciais fornecidas no laboratório, e não as da sua conta do Google Cloud. Observação: se você usar sua própria conta do Google Cloud neste laboratório, é possível que receba cobranças adicionais. -
Acesse as próximas páginas:
- Aceite os Termos e Condições.
- Não adicione opções de recuperação nem autenticação de dois fatores (porque essa é uma conta temporária).
- Não se inscreva em testes gratuitos.
Depois de alguns instantes, o console do Google Cloud será aberto nesta guia.
Ativar o Cloud Shell
O Cloud Shell é uma máquina virtual com várias ferramentas de desenvolvimento. Ele tem um diretório principal permanente de 5 GB e é executado no Google Cloud. O Cloud Shell oferece acesso de linha de comando aos recursos do Google Cloud.
- Clique em Ativar o Cloud Shell
na parte de cima do console do Google Cloud.
Depois de se conectar, vai notar que sua conta já está autenticada, e que o projeto está configurado com seu PROJECT_ID. A saída contém uma linha que declara o projeto PROJECT_ID para esta sessão:
gcloud
é a ferramenta de linha de comando do Google Cloud. Ela vem pré-instalada no Cloud Shell e aceita preenchimento com tabulação.
- (Opcional) É possível listar o nome da conta ativa usando este comando:
-
Clique em Autorizar.
-
A saída será parecida com esta:
Saída:
- (Opcional) É possível listar o ID do projeto usando este comando:
Saída:
Exemplo de saída:
gcloud
, acesse o guia com informações gerais sobre a gcloud CLI no Google Cloud.
O que é um módulo do Terraform?
Um módulo do Terraform é um conjunto de arquivos de configuração do Terraform em um único diretório. Mesmo uma configuração simples, que consiste em um único diretório com um ou mais arquivos .tf
, corresponde a um módulo. Quando você executa comandos do Terraform diretamente de um diretório desses, ele é considerado o módulo raiz. Nesse sentido, toda configuração do Terraform é parte de um módulo. É possível ter um conjunto simples de arquivos de configuração do Terraform, como esse:
Nesse caso, quando você executa comandos do Terraform de dentro do diretório minimal-module
, o conteúdo dele é considerado o módulo raiz.
Como chamar módulos
Os comandos do Terraform só usam diretamente os arquivos de configuração em um diretório, que geralmente é o diretório de trabalho atual. No entanto, sua configuração pode usar blocos de módulo para chamar módulos em outros diretórios. Quando o Terraform encontra um bloco de módulo, ele carrega e processa os arquivos de configuração daquele módulo.
Um módulo que é chamado por outra configuração às vezes é chamado de "módulo filho" dessa configuração.
Módulos locais e remotos
Os módulos podem ser carregados do sistema de arquivos local ou de uma fonte remota. O Terraform oferece suporte a diversas fontes remotas, incluindo o Terraform Registry, a maioria dos sistemas de controle de versões, URLs HTTP e registros de módulo privado do Terraform Cloud ou do Terraform Enterprise.
Melhores práticas dos módulos
De muitas maneiras, os módulos do Terraform se assemelham aos conceitos de bibliotecas, pacotes ou módulos presentes na maioria das linguagens de programação e oferecem muitos benefícios semelhantes. Assim como quase qualquer programa de computador não trivial, as configurações reais do Terraform geralmente precisam usar módulos para fornecer os benefícios mencionados acima.
Recomenda-se que todos os usuários do Terraform usem módulos seguindo estas práticas recomendadas:
-
Crie sua configuração com um plano para os módulos. Mesmo para configurações levemente complexas do Terraform gerenciadas por apenas uma pessoa, os benefícios do uso de módulos compensam o tempo necessário para usá-los corretamente.
-
Use módulos locais para organizar e encapsular seu código. Mesmo que você não esteja usando ou publicando módulos remotos, organizar sua configuração em termos de módulos desde o início vai reduzir significativamente o trabalho de manutenção e atualização da sua configuração à medida que sua infraestrutura ficar mais complexa.
-
Encontre módulos úteis no Terraform Registry público. Assim é possível implementar sua configuração com rapidez e confiança, contando com o trabalho de outras pessoas.
-
Publique e compartilhe módulos com sua equipe. A maior parte das infraestruturas é gerenciada por uma equipe de pessoas, e os módulos são uma ferramenta importante que as equipes podem usar para criar e manter infraestruturas. Como já mencionado, você pode publicar módulos de maneira pública ou privada. Vamos examinar como fazer isso em um laboratório mais adiante.
Tarefa 1. Usar módulos do Registry
Nesta seção, vamos usar módulos do Terraform Registry para provisionar um ambiente de exemplo no Google Cloud. Os conceitos usados aqui podem ser aplicados a qualquer módulo, de qualquer fonte.
- Abra a página do Terraform Registry do módulo Terraform Network em uma nova guia ou janela do navegador. A aparência da página vai ser a seguinte:
A página inclui informações sobre o módulo e um link para o repositório de origem. O lado direito da página inclui uma interface suspensa para selecionar a versão do módulo e instruções de uso do módulo a fim de provisionar a infraestrutura.
Quando você chama um módulo, o argumento source
é exigido. Neste exemplo, o Terraform procura um módulo no Terraform Registry que corresponda à string fornecida. Também é possível usar um URL ou caminho de arquivo local para a origem dos seus módulos. Confira a documentação do Terraform para uma lista de possíveis fontes de módulo.
O outro argumento mostrado aqui é version
. Para fontes com suporte, o argumento version permite que você defina quais versões do módulo serão carregadas. Neste laboratório, você vai especificar um número exato de versão para os módulos que usar. Descubra mais maneiras de especificar versões na documentação do módulo.
Outros argumentos para blocos de módulos são tratados como variáveis de entrada para os módulos.
Criar uma configuração do Terraform
- Para começar, execute os comandos a seguir no Cloud Shell para clonar o projeto de exemplo simples do repositório GitHub dos módulos do Google Terraform e mudar para a ramificação
v6.0.1
.
Isso garante que você use o número de versão correto.
-
Na barra de ferramentas do Cloud Shell, clique em Abrir editor. Para alternar o Cloud Shell e o editor de código, clique em Abrir editor ou Abrir terminal conforme necessário ou em Abrir em uma nova janela para deixar o Editor aberto em uma guia separada.
-
No editor, navegue até
terraform-google-network/examples/simple_project
, e abra o arquivomain.tf
. Sua configuração domain.tf
vai ficar assim:
Essa configuração inclui um bloco importante:
-
module "test-vpc-module"
define uma nuvem privada virtual (VPC) que vai fornecer serviços de rede para o restante da sua infraestrutura.
Configurar valores para as variáveis de entrada do módulo
Algumas variáveis de entrada são exigidas, ou seja, o módulo não fornece um valor padrão. Um valor explícito deve ser fornecido para que o Terraform seja executado corretamente.
-
No bloco
"test-vpc-module"
do módulo, revise as variáveis de entrada que está configurando. Cada uma dessas variáveis de entrada está documentada no Terraform Registry. As entradas necessárias para este módulo são:-
network_name
: nome da rede que está sendo criada -
project_id
: ID do projeto em que essa VPC vai ser criada -
subnets
: lista de sub-redes que está sendo criada
-
Você vai precisar passar as variáveis de entrada para a configuração do módulo para usar a maioria dos módulos. A configuração que chama um módulo é responsável por definir seus valores de entrada, que são passados como argumentos para o bloco do módulo. Além de source
e version
, a maioria dos argumentos de um bloco de módulo define valores de variáveis.
Na página do Terraform Registry para o módulo de rede do Google Cloud, uma guia "Entradas" descreve todas as variáveis de entrada que têm suporte do módulo.
Definir variáveis de entrada raiz
Usar variáveis de entrada com módulos é muito semelhante a usar variáveis em qualquer configuração do Terraform. Um padrão comum é identificar quais variáveis de entrada do módulo você pode vir a alterar no futuro e, em seguida, criar variáveis correspondentes no arquivo variables.tf
da sua configuração com valores padrão sensíveis. Essas variáveis podem então ser transmitidas para o bloco do módulo como argumentos.
- Para recuperar sua Id do projeto, execute o seguinte comando no Cloud Shell:
-
No Editor, ainda no mesmo diretório, navegue até
variables.tf
. -
Preencha a variável
project_id
com a saída do comando anterior. Você precisa respeitar o formato seguinte e configurar o valordefault
para a variável:
- Em
variables.tf
, adicione a variávelnetwork_name
. É possível usar o nomeexample-vpc
ou qualquer outro que você quiser. Você precisa respeitar o formato seguinte e configurar o valordefault
para a variável:
- No arquivo
main.tf
, atualize o parâmetronetwork_name
para usar a variável que você acabou de definir. Para isso, configure o valor comovar.network_name
.
- No arquivo
main.tf
, atualize as regiões da sub-rede nas linhas 35, 40 e 47 deus-west1
para. Isso garante que as sub-redes serão criadas na região permitida do projeto. O módulo deve se parecer com isso:
Definir valores de saída raiz
Módulos também têm valores de saída, que são definidos dentro do módulo, com a palavra-chave output
. Você pode acessá-los referindo-se a module.<MODULE NAME>.<OUTPUT NAME>
. Assim como as variáveis de entrada, as saídas de módulo são listadas na guia outputs
no Terraform Registry.
As saídas do módulo geralmente são passadas para outras partes da sua configuração ou definidas como saídas no seu módulo raiz. Vamos examinar os dois usos neste laboratório.
- Navegue até o arquivo
outputs.tf
dentro do seu diretório de configurações. Verifique se o arquivo contém o seguinte:
Provisionar infraestrutura
- No Cloud Shell, navegue até seu diretório
simple_project
:
- Inicialize sua configuração do Terraform:
- Crie sua VPC:
- Para aplicar as alterações e prosseguir, responda sim ao prompt.
Ótimo. Você acabou de usar seu primeiro módulo. A saída da sua configuração deve ter a seguinte aparência:
Entender como os módulos funcionam
Ao usar um novo módulo pela primeira vez, você precisa executar o terraform init
ou o terraform get
para instalá-lo. Quando um desses comandos é executado, o Terraform instala todos os novos módulos no diretório .terraform/modules
dentro do diretório de trabalho da sua configuração. Para módulos locais, o Terraform cria um link simbólico para o diretório do módulo. Por isso, todas as alterações dos módulos locais entram em vigor imediatamente, sem que você precise executar o terraform get
novamente.
Limpar sua infraestrutura
Aprendemos como usar módulos do Terraform Registry, como configurar esses módulos com variáveis de entrada e como extrair valores de saída desses módulos.
- Destrua a infraestrutura que você criou:
-
Responda
sim
ao prompt. O Terraform vai destruir a infraestrutura que você criou. -
Após ter destruído os recursos, exclua a pasta
terraform-google-network
.
Clique em Verificar meu progresso para conferir o objetivo.
Tarefa 2. Criar um módulo
Na última tarefa, você usou um módulo do Terraform Registry para criar uma rede VPC no Google Cloud. Embora o uso correto dos módulos existentes do Terraform seja uma habilidade importante, o aprendizado de como criar módulos também pode beneficiar qualquer usuário do Terraform. Recomendamos que você crie todas as configurações do Terraform supondo que elas possam ser usadas como um módulo, porque isso ajuda a projetar suas configurações para que sejam flexíveis, reutilizáveis e combináveis.
Como você já deve saber, o Terraform trata toda configuração como um módulo. Quando você executa comandos terraform
ou usa o Terraform Cloud ou o Terraform Enterprise para acessar remotamente o Terraform, o diretório de destino que contém a configuração dele é tratado como o módulo raiz.
Nessa tarefa, você cria um módulo para gerenciar os buckets do Compute Storage usados para hospedar sites estáticos.
Estrutura do módulo
O Terraform trata qualquer diretório local referenciado no argumento source
de um bloco de module
como um módulo. Uma estrutura de arquivo comum para um novo módulo é:
.tf
ou usar qualquer outra estrutura de arquivos que quiser.
Cada um desses arquivos serve a um propósito:
-
LICENSE
contém a licença sob a qual seu módulo será distribuído. Quando você compartilha seu módulo, o arquivo LICENÇA permite que as pessoas que o utilizam entendam os termos sob os quais ele foi disponibilizado. O Terraform não usa esse arquivo. -
README.md
contém documentação em formato markdown que descreve como usar o módulo. O Terraform não usa esse arquivo, mas serviços como o Terraform Registry e o GitHub exibem o conteúdo desse arquivo para os visitantes do Terraform Registry ou da página do GitHub do seu módulo. -
main.tf
contém o conjunto principal de configurações do seu módulo. Também é possível criar outros arquivos de configuração e organizá-los de modo a fazerem sentido no seu projeto. -
variables.tf
contém as definições de variáveis do seu módulo. Quando seu módulo é usado por outras pessoas, as variáveis são configuradas como argumentos no bloco do módulo. Como todos os valores do Terraform devem ser definidos, as variáveis que não têm um valor padrão se tornarão argumentos obrigatórios. Uma variável com um valor padrão também pode ser fornecida como um argumento de módulo, sobrepondo assim o valor padrão. -
outputs.tf
contém as definições de saída do seu módulo. As saídas do módulo são disponibilizadas à configuração usando o módulo e, portanto, são frequentemente usadas para transmitir informações sobre as partes da sua infraestrutura definidas pelo módulo para outras partes da sua configuração.
Tenha cuidado com esses arquivos e não os distribua como parte do seu módulo:
- os arquivos
terraform.tfstate
eterraform.tfstate.backup
contêm seu estado do Terraform e são a forma como o Terraform acompanha o relacionamento entre sua configuração e a infraestrutura por ela provisionada. - O diretório
.terraform
contém os módulos e plug-ins usados para provisionar sua infraestrutura. Esses arquivos são específicos de uma instância individual do Terraform no provisionamento da infraestrutura, e não a configuração da infraestrutura definida nos arquivos.tf
. - Os arquivos
*.tfvars
não precisam ser distribuídos com seu módulo a menos que você também o esteja usando como uma configuração independente do Terraform, porque as variáveis de entrada do módulo são definidas por meio de argumentos para o bloco do módulo na sua configuração.
Criar um módulo
Navegue até seu diretório inicial e crie seu módulo raiz construindo um novo arquivo de configuração main.tf
. Depois crie um diretório chamado modules que contém outra pasta chamada gcs-static-website-bucket
. Você vai trabalhar com três arquivos de configuração do Terraform no diretório gcs-static-website-bucket
: website.tf
, variables.tf
e outputs.tf
.
- Criar o diretório para seu novo módulo:
- Navegue até o diretório do módulo e execute os seguintes comandos para criar três arquivos vazios:
- No diretório
gcs-static-website-bucket
, execute o comando a seguir para criar um arquivo chamadoREADME.md
com o seguinte conteúdo:
- Crie outro arquivo chamado
LICENSE
com o seguinte conteúdo:
Sua estrutura de diretórios do módulo atual deve estar assim:
- Adicione este recurso de bucket do Cloud Storage ao seu arquivo
website.tf
dentro do diretóriomodules/gcs-static-website-bucket
:
A documentação do provedor é GitHub.
- Navegue até o arquivo
variables.tf
do seu módulo e adicione o seguinte código:
- Adicione uma saída ao seu módulo, no arquivo
outputs.tf
que fica dentro dele:
Assim como as variáveis, as saídas nos módulos executam a mesma função que no módulo raiz, mas são acessadas de modo diferente. As saídas de um módulo podem ser acessadas como atributos somente leitura nos objetos do módulo, disponibilizado na configuração que o chama.
- Volte a
main.tf
no seu diretório raiz e adicione uma referência ao novo módulo:
- Em root directory, crie um arquivo
outputs.tf
para seu módulo raiz.
- Adicione o seguinte código ao arquivo
outputs.tf
:
- Em root directory, crie um arquivo
variables.tf
:
- Adicione o código a seguir no arquivo
variables.tf
. Defina as variáveisproject_id
ename
como o padrão para o ID do projeto:.
Instalar o módulo local
Sempre que você adiciona um novo módulo para uma configuração, o Terraform precisa instalar o módulo antes que ele possa ser usado. Tanto o comando terraform get
quanto o comando terraform init
instalam e atualizam os módulos. O comando terraform init
também inicializa back-ends e instala plug-ins.
- Instale o módulo:
- Provisione seu bucket:
- Responda sim ao prompt. Seu bucket e outros recursos são provisionados.
Fazer upload de arquivos para o bucket
Você configurou e usou seu próprio módulo para criar um site estático. Não esqueça de acessá-lo. No momento não há nada dentro do seu bucket, por isso não aparece nada no site. Para poder ver conteúdos, você precisa fazer upload de objetos no seu bucket. Você pode fazer upload do conteúdo do diretório www
no repositório do GitHub.
- Faça download do conteúdo de amostra para seu diretório inicial:
- Copie os arquivos para o bucket, substituindo
YOUR-BUCKET-NAME
pelo nome do seu bucket de armazenamento:
- Em uma nova guia do navegador, acesse o site
https://storage.cloud.google.com/YOUR-BUCKET-NAME/index.html
, substituindoYOUR-BUCKET-NAME
pelo nome do seu bucket de armazenamento.
Uma página da Web em HTML básico vai aparecer com o texto Nothing to see here.
Clique em Verificar meu progresso para conferir o objetivo.
Limpar o site e a infraestrutura
Por fim, limpe seu projeto, destruindo a infraestrutura que acabou de criar.
- Destrua seus recursos do Terraform:
Depois de responder sim
ao prompt, o Terraform vai destruir todos os recursos que você criou seguindo este laboratório.
Parabéns!
Neste laboratório, você aprendeu os fundamentos dos módulos do Terraform e como usar um módulo pré-existente do Registry. Depois você elaborou seu próprio módulo para criar um site estático hospedado em um bucket do Cloud Storage. Ao fazer isso, você definiu entradas, saídas e variáveis para seus arquivos de configuração e aprendeu as práticas recomendadas para a criação de módulos.
Próximas etapas / Saiba mais
Os links abaixo oferecem oportunidades de praticar com o Terraform:
- Hashicorp no Google Cloud Marketplace.
- Hashicorp Learn
- Comunidade do Terraform
- Exemplos do Terraform no Google
Treinamento e certificação do Google Cloud
Esses treinamentos ajudam você a aproveitar as tecnologias do Google Cloud ao máximo. Nossas aulas incluem habilidades técnicas e práticas recomendadas para ajudar você a alcançar rapidamente o nível esperado e continuar sua jornada de aprendizado. Oferecemos treinamentos que vão do nível básico ao avançado, com opções de aulas virtuais, sob demanda e por meio de transmissões ao vivo para que você possa encaixá-las na correria do seu dia a dia. As certificações validam sua experiência e comprovam suas habilidades com as tecnologias do Google Cloud.
Manual atualizado em 26 de janeiro de 2024
Laboratório testado em 11 de dezembro de 2023
Copyright 2024 Google LLC. Todos os direitos reservados. Google e o logotipo do Google são marcas registradas da Google LLC. Todos os outros nomes de produtos e empresas podem ser marcas registradas das respectivas empresas a que estão associados.