Terraform
Resumindo: no Linux, geralmente instala-se o Terraform, o CLI do Yandex Cloud (yc), realiza-se a inicialização e, em seguida, configuram-se as credenciais (token IAM ou chave de conta de serviço).
1. Terraform
Através do binário oficial (universal):
# exemplo para amd64; substitua a versão e arquitetura conforme necessário
TERRAFORM_VERSION=1.9.8
wget "https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_linux_amd64.zip"
unzip "terraform_${TERRAFORM_VERSION}_linux_amd64.zip"
sudo mv terraform /usr/local/bin/
terraform version
Ou via gerenciador de pacotes (se você usar Ubuntu/Debian e tiver o repositório do HashiCorp configurado — como descrito na documentação do seu distributivo).
2. CLI do Yandex Cloud (yc)
curl -sSL https://storage.yandexcloud.net/yandexcloud-yc/install.sh | bash
exec -l $SHELL # ou abra um novo terminal
yc version
3. Perfil e acesso à nuvem
Interativamente (conveniente na primeira vez):
yc init
Serão necessários:
- nome do perfil (escolha
defaultou crie um novo) - token OAuth (ele fornecerá um link para obter)
- nome da nuvem (ele sugerirá uma opção — isso afeta o faturamento, ou seja, em qual nuvem será emitida a fatura)
- nome da pasta (ele sugerirá uma opção)
- zona padrão de computação (ele sugerirá criar uma das opções
ru-central1-a...k)
Depois, o yc salvará o perfil; para verificar:
yc config list
yc resource-manager cloud list
yc resource-manager folder list
4. Variáveis para Terraform (provedor Yandex)
O provedor lê variáveis de ambiente padrão. São necessárias, no mínimo, identificadores e um dos métodos de autenticação.
Variante A — do usuário (token IAM do yc):
export YC_TOKEN=$(yc iam create-token)
export YC_CLOUD_ID="<seu-cloud-id>"
export YC_FOLDER_ID="<seu-folder-id>"
O token IAM é temporário; para uso prolongado, é mais conveniente usar uma conta de serviço.
Variante B — conta de serviço (chave JSON):
export YC_SERVICE_ACCOUNT_KEY_FILE="/absolute/path/to/key.json"
export YC_CLOUD_ID="<cloud-id>"
```export YC_FOLDER_ID=""<folder-id>
(O nome da variável para a chave do arquivo no provedor é exatamente esse, consulte a documentação do provedor Yandex.)
5. No diretório com a configuração do Terraform
cd /caminho/para/seu/projeto/terraform
terraform init
terraform plan
Observações práticas:
YC_TOKEN=$(yc iam create-token)deve ser atualizado periodicamente.- Para CI e “sempre funciona”, geralmente cria-se um conta de serviço com as permissões necessárias no diretório/cloud e uma chave estática no formato JSON.
cloud_idefolder_idpodem ser obtidos do output deyc resource-manager cloud list/folder listou da console do Yandex Cloud.
Bucket
Como eu obtenho
access_keyesecret_keypara um bucket existente https://console.yandex.cloud/folders/b1g/storage/buckets/bucket?
No Yandex Object Storage, os buckets não possuem seus próprios access_key / secret_key. As chaves são emitidas para um conta de serviço (ou você está usando chaves já criadas para ele). O bucket, por sua vez, é vinculado via permissões IAM no bucket ou no diretório.
Via console
- Acesse o diretório
b1g→ Object Storage → o bucketbucket. - Verifique se existe uma conta de serviço que precisa acessar o bucket (ou crie uma nova).
- No bucket: Permissões de acesso → conceda uma função como
storage.editor(ou a função já configurada em sua organização com acesso ao Object Storage) a essa conta de serviço. - Acesse Contas de serviço → conta necessária → aba Chaves de acesso estáticas (ou “Chaves de acesso”) → Criar nova chave.
- Salve o ID da chave e o segredo — o segredo é exibido apenas uma vez.
O ID da chave = o que normalmente é chamado de access_key / AWS_ACCESS_KEY_ID nos clientes S3, o segredo = secret_key / AWS_SECRET_ACCESS_KEY.
Via CLI (yc)
Lista de contas de serviço no diretório:
yc iam service-account list --folder-id b1g
Crie uma chave estática (substitua <SERVICE_ACCOUNT_ID> pelo ID da conta de serviço necessária):
yc iam access-key create --service-account-id <SERVICE_ACCOUNT_ID>
Na resposta, serão exibidos key_id e secret — essa é a dupla para o API S3.
As permissões sobre o bucket devem ser concedidas previamente (função no recurso do bucket ou no diretório), por exemplo, storage.editor no bucket — via console ou API IAM; em cenários típicos, muitas vezes é suficiente conceder a função no diretório, se for o padrão em sua organização.
Importante
- O segredo existente não pode ser “revisado” novamente — apenas criar uma nova chave e revogar a antiga, se necessário.
- Para o estado do Terraform no S3, use as mesmas chaves + endpoint
https://storage.yandexcloud.nete regiãoru-central1(ou sua região).
A lógica oficial está descrita na documentação do Yandex Cloud sobre chaves de acesso estáticas e acesso ao Object Storage via API S3.
Repositório local
Entre na pasta com o repositório, use a chave da conta de serviço para inicializar o repositório Terraform na pasta:
terraform init \
-backend-config="access_key=<key_id>" \
-backend-config="secret_key=<secret>"
Assim, você vinculará a pasta no cloud com a local.
Restrições do Hashicorp
Se você receberterraform init -backend-config=“access_key=YCA” -backend-config=“secret_key=YCN”
Inicializando o backend…
Configuração do backend “s3” concluída com sucesso! O Terraform usará automaticamente este backend, a menos que a configuração do backend seja alterada.
Inicializando plugins de provedor…
- Buscando a versão mais recente do yandex-cloud/yandex…
- Buscando versões compatíveis de hashicorp/null com “~> 3.2”…
- Buscando a versão mais recente do hashicorp/local…
- Instalando yandex-cloud/yandex v0.200.0…
- Instalado yandex-cloud/yandex v0.200.0 (assinado com chave E40F590B50BB8E40)
Provedores de parceiros e comunidade são assinados pelos seus desenvolvedores.
Se você quiser saber mais sobre assinatura de provedores, pode ler aqui:
Plugin signatures | Terraform | HashiCorp Developer
╷
│ Erro: Falha ao consultar pacotes de provedores disponíveis
│
│ Não foi possível recuperar a lista de versões disponíveis para o provedor hashicorp/null: o repositório
│ registry registry.terraform.io não possui um provedor chamado
│ registry.terraform.io/hashicorp/null
│
│ Todos os módulos devem especificar seus required_providers para que consumidores externos recebam os
│ provedores corretos ao usar um módulo. Para ver quais módulos atualmente dependem de
│ hashicorp/null, execute o seguinte comando:
│ terraform providers
╵
╷
│ Erro: Falha ao consultar pacotes de provedores disponíveis
│
│ Não foi possível recuperar a lista de versões disponíveis para o provedor hashicorp/local: o repositório
│ registry registry.terraform.io não possui um provedor chamado
│ registry.terraform.io/hashicorp/local
│
│ Todos os módulos devem especificar seus required_providers para que consumidores externos recebam os
│ provedores corretos ao usar um módulo. Para ver quais módulos atualmente dependem de
│ hashicorp/local, execute o seguinte comando:
│ terraform providers
Execute os passos abaixo.
### O que está acontecendo
O `yandex-cloud/yandex` foi baixado, mas **`hashicorp/null`** e **`hashicorp/local`** não foram. Isso acontece quando o **`registry.terraform.io` está indisponível** (rede, DNS, política) ou responde incorretamente: o Terraform então informa que o provedor "não existe".
### O que fazer no seu ambiente
1. **Espelho do Yandex Cloud** — copie o arquivo de configuração do Terraform para o diretório pessoal (copie o `terraform.rc.example` do repositório):
```bash
cp ~/terraform.rc.example ~/.terraformrc
Nele, é definido https://terraform-mirror.yandexcloud.net/ para registry.terraform.io/*/*, conforme descrito na documentação do Yandex Cloud.
-
Repita:
cd ~/yc-cloud terraform init -
No código, foi adicionado explicitamente o provedor
localno arquivoprovider.tf(anteriormente havia apenasnull), para fixar as versões em um único local.
Se você precisar de acesso direto sem espelho: verifique seu VPN/proxy e confirme se curl -sI https://registry.terraform.io está acessível.$ terraform init -backend-config=“access_key=YCA” -backend-config=“secret_key=YCN”
Inicializando o backend…
Inicializando plugins de provedor…
- Encontrando versões compatíveis de hashicorp/null com “~> 3.2”…
- Encontrando versões compatíveis de hashicorp/local com “~> 2.5”…
- Encontrando a versão mais recente de yandex-cloud/yandex…
- Instalando yandex-cloud/yandex v0.200.0…
- Instalado yandex-cloud/yandex v0.200.0 (sem autenticação)
- Instalando hashicorp/null v3.2.4…
- Instalado hashicorp/null v3.2.4 (sem autenticação)
- Instalando hashicorp/local v2.8.0…
- Instalado hashicorp/local v2.8.0 (sem autenticação)
O Terraform criou um arquivo de bloqueio .terraform.lock.hcl para registrar as seleções de provedores que ele fez acima. Inclua este arquivo em seu repositório de controle de versão para que o Terraform possa garantir que faça as mesmas seleções por padrão quando você executar “terraform init” no futuro.
╷
│ Aviso: Informações incompletas no arquivo de bloqueio para provedores
│
│ Devido aos métodos personalizados de instalação de provedores, o Terraform foi forçado a calcular
│ checksums locais para os seguintes provedores:
│ - hashicorp/local
│ - hashicorp/null
│ - yandex-cloud/yandex
│
│ O arquivo atual .terraform.lock.hcl só inclui checksums para linux_amd64, portanto, o Terraform
│ executado em outra plataforma falhará ao instalar esses provedores.
│
│ Para calcular checksums adicionais para outra plataforma, execute:
│ terraform providers lock -platform=linux_amd64
│ (onde linux_amd64 é a plataforma a ser gerada)
╵
O Terraform foi inicializado com sucesso!
Você agora pode começar a trabalhar com o Terraform. Tente executar “terraform plan” para ver
quais alterações são necessárias para sua infraestrutura. Todos os comandos do Terraform agora devem funcionar.
Se você definir ou alterar módulos ou configurações de backend para o Terraform,
execute novamente este comando para re-inicializar seu diretório de trabalho. Se você esquecer, outros
comandos detectarão isso e lembrarão você de fazê-lo, se necessário.
# Plano e aplicação do Terraform
terraform plan -input=false -var-file=count_vars.vars -out=tfplan
terraform apply -auto-approve tfplan
terraform destroy -auto-approve -var-file=“count_vars.vars”