• EnglishEspañol日本語한국어Português
  • EntrarComeçar agora

Esta tradução de máquina é fornecida para sua comodidade.

Caso haja alguma divergência entre a versão em inglês e a traduzida, a versão em inglês prevalece. Acesse esta página para mais informações.

Criar um problema

Usando módulos Terraform e armazenamento remoto

Terraform é uma ferramenta popular de software de infraestrutura como código desenvolvida pela HashiCorp. Você o usa para provisionar todos os tipos de infraestrutura e serviços, incluindo painel e alerta da New Relic.

Neste guia, você aprende a usar os módulos do Terraform na configuração do New Relic. Especificamente, você criará módulos, importará dados, armazenará módulos no Github e gerenciará remotamente o estado do Amazon S3.

No vídeo, revisamos etapas adicionais de instalação do Terraform e configuração do alerta New Relic. Se precisar de ajuda para começar a usar o Terraform, o guia Introdução ao New Relic e ao Terraform mostra como instalar o Terraform, configurar o alerta do New Relic e especificar um canal de notificação.

Antes de você começar

Para usar este guia, você deve ter algum conhecimento básico do New Relic e do Terraform. Se você ainda não implantou um agente de código aberto New Relic, instale o New Relic para seu aplicativo. Além disso, instale a CLI do Terraform.

Comece inicializando um diretório de trabalho:

bash
$
mkdir terraform-config && cd terraform-config

Para seguir os exemplos deste guia, o código de exemplo que o acompanha está disponível no GitHub

bash
$
git clone https://github.com/jsbnr/nr-terraform-intro-example.git

Criando um Módulo Terraform

Os módulos do Terraform permitem reutilizar, compartilhar e armazenar sua configuração do Terraform usando controle de versão como o Github. Nas próximas etapas, você moverá sua configuração do New Relic para um módulo reutilizável.

Primeiro, na raiz do seu projeto, crie um novo diretório para armazenar seus módulos chamado modules:

bash
$
mkdir modules && cd modules

No diretório de módulos, crie um novo diretório para um novo módulo chamado HostConditions e crie um novo arquivo chamado main.tf:

bash
$
mkdir HostConditions && cd HostConditions
$
touch main.tf

Remova as duas condições do alerta do arquivo main.tf do projeto raiz e copie-as para o novo arquivo main.tf no diretório HostConditions .

No arquivo main.tf do diretório raiz, chame o novo módulo usando um bloco de módulo:

module "HostConditions" {
source = "./modules/HostConditions"
}

Tente testar sua configuração, execute terraform plan e terraform init:

bash
# Example output
------------------------------------------------------------------------
Initializing modules...
- HostConditions in
Error: Unreadable module directory
Unable to evaluate directory symlink: lstat modules/HostConditions: no such
file or directory
Error: Failed to read module directory
Module directory does not exist or cannot be read.
Error: Unreadable module directory
Unable to evaluate directory symlink: lstat modules/HostConditions: no such
file or directory
Error: Failed to read module directory
Module directory does not exist or cannot be read.

Você vê um erro no seu console devido à falta de detalhes do provedor no diretório de módulos. Para corrigir o erro, crie uma cópia do provedor raiz.tf em seu diretório HostConditions :

provider "newrelic" {
account_id = 12345 # Your New Relic account ID
api_key = "NRAK-zzzzzz" # Your New Relic user key
region = "US" # US or EU (defaults to US)
}

Tente testar sua configuração, execute terraform plan e terraform init:

bash
# Example output
------------------------------------------------------------------------
Error: Reference to undeclared resource
on modules/HostConditions/main.tf line 2, in resource "newrelic_infra_alert_condition"
"cpuhot":
2: policy_id = newrelic_alert_policy.DemoPolicy.id
A managed resource "newrelic_alert_policy" "DemoPolicy" has not been declared
in module.HostConditions.
Error: Reference to undeclared resource
on modules/HostConditions/main.tf line 24, in resource "newrelic_infra_alert_condition"
"highDiskUsage":
24: policy_id = newrelic_alert_policy.DemoPolicy.id
A managed resource "newrelic_alert_policy" "DemoPolicy" has not been declared
in module.HostConditions.

O init do Terraform não mostra mais um erro, mas a execução do plano terraform ainda causa a ocorrência de um erro.

O erro ocorre porque o ID da política usado em ./modules/HostConditions/provider.tf não existe. Uma variável é necessária para passar para o módulo.

Crie uma variável

As variáveis passam detalhes para o seu módulo e definem valores padrão.

Primeiro, no topo do seu HostConditions/provider.tf crie uma nova variável:

variable "providerId" {}

A seguir, no bloco de recursos, substitua o policyId existente pela nova variável:

var.policy

Passando uma variável para um módulo

Para tornar um módulo dinâmico, você passará suas variáveis para o módulo usando o bloco de recursos do módulo.

No diretório raiz main.tf, atualize o bloco do módulo para adicionar a variável policyId :

module "HostConditions" {
source = "./modules/HostConditions"
policyId = newrelic_alert_policy.DemoPolicy.id
}

Execute terraform plan depois de adicionar sua variável ao módulo.

bash
$
terraform plan

Agora, adicione mais variáveis e substitua os valores CPU crítica, aviso de CPU e porcentagem de disco. Em seguida, passe as novas variáveis para o módulo.

Adicione as novas variáveis a HostConditions/main.tf:

variable cpu_warning {}
variable cpu_critical {}
variable diskPercent {}

Atualize a condição do alerta para usar as novas variáveis adicionadas em HostConditons/main.tf:

resource "newrelic_infra_alert_condition" "cpuhot" {
policy_id = var.policyId
name = "CPU hot!"
type = "infra_metric"
event = "SystemSample"
select = "cpuPercent"
comparison = "above"
where = "(hostname LIKE '%myhost%')"
critical {
duration = 5
value = var.cpu_critical
time_function = "all"
}
warning {
duration = 5
value = var.cpu_warning
time_function = "all"
}
}
resource "newrelic_infra_alert_condition" "highDiskUsage" {
policy_id = var.policyId
name = "high disk usage"
type = "infra_metric"
event = "SystemSample"
select = "diskUsedPercent"
comparison = "above"
where = "(hostname LIKE '%myhost%')"
critical {
duration = 5
value = var.diskPercent
time_function = "all"
}
}

Execute terraform plan depois de adicionar suas variáveis ao módulo. Uma mensagem de erro é exibida devido à falta de valores de variáveis. Os valores podem ser adicionados no bloco do módulo ou como valores padrão.

bash
$
terraform plan

Adicionando valores padrão

Adicione valores de variáveis padrão a HostConditions/main.tf:

variable cpu_warning { default=80}
variable cpu_critical { default=90}
variable diskPercent { default=60 }

Passar valores de variáveis usando bloco de módulo

No diretório raiz main.tf, atualize o bloco do módulo para adicionar as variáveis cpu_critical, cpu_warning e diskPercentage :

module "HostConditions" {
source = "./modules/HostConditions"
policyId = newrelic_alert_policy.DemoPolicy.id
cpu_critical = 88
cpu_warning = 78
diskPercentage = 66
}

Execute terraform plan depois de adicionar suas variáveis ao módulo.

bash
$
terraform plan

Reutilizando um módulo

Você pode reutilizar seu módulo conectando-se a uma política New Relic que já existe. Antes de começar, em sua conta New Relic , crie uma nova política de alertas chamada Política Preexistente.

Conectando uma política de alertas existente

Primeiro, em seu arquivo raiz main.tf adicione o bloco de dados para importar uma política existente:

data "newrelic_alert_policy" "ExistingPolicy" {
name = "Preexisting Policy"
}

Em seguida, crie um segundo bloco de módulo com o nome HostConditions2. Adicione a condição do alerta à Política Pré-existente.

module "HostConditions2" {
source = "./modules/HostConditions"
policyId = data.newrelic_alert_policy.ExistingPolicy.id
cpu_critical = 87
cpu_warning = 77
diskPercentage = 67
}

Execute terraform init para inicializar o novo módulo e execute terraform apply para aplicar as alterações à sua conta New Relic.

O script terraform cria uma nova política de alertas e duas condições, mas também aplica a condição do alerta à Política Pré-Existente.

Procure em sua conta New Relic a Política Pré-existente e veja a condição do alerta adicionada para CPU Quente e Alto Uso de Disco.

Armazene um módulo no Github

Depois de criar um módulo, se quiser armazená-lo em algum lugar que outras pessoas possam usar, o Github é como você pode fazer isso.

Crie um novo repositório Github

Primeiro, dentro do diretório HostModules, inicialize um novo repositório Github. Adicione seu main.tf e provider.tf ao cenário para confirmação:

bash
$
git add main.tf provider.tf
$
git commit -m "init"

Em seguida, usando os comandos fornecidos em seu novo repositório, envie seu commit para o Github:

bash
$
git remote add origin <repo_url>
$
git branch -M main
$
git push -u origin main

Usando um módulo salvo no Github

Verifique o repositório do Github e veja que main.tf e provider.tf agora estão em seu repositório. Copie o URL da web do repositório GitHub para clonar seu repositório.

Atualize o arquivo raiz main.tf usando GitHub como origem para HostConditions:

module "HostConditions" {
source = "git::https://github.com/<your_username>/<your_repo_name>" # Add your repo URL
policyId = newrelic_alert_policy.DemoPolicy.id
cpu_critical = 88
cpu_warning = 78
diskPercentage = 66
}
module "HostConditions2" {
source = "git::https://github.com/<your_username>/<your_repo_name>" # Add your repo URL
policyId = data.newrelic_alert_policy.ExistingPolicy.id
cpu_critical = 87
cpu_warning = 77
diskPercentage = 67
}

Execute terraform init para inicializar o novo módulo. Quando você executa terraform init, o Terraform clona o repositório localmente. Correr terraform plan

Se você precisar atualizar seu módulo local com atualizações feitas no repositório git, execute terraform get -update

Gerencie o estado remotamente no Amazon S3

O arquivo de estado é a representação que o terraform mantém sobre os recursos criados. O arquivo de estado está no diretório raiz, mas se excluído ou corrompido causará problemas. Armazenar o arquivo de estado remotamente fornece segurança e permite compartilhamento e acesso remoto.

Em provider.tf no diretório raiz, adicione um bloco backend terraform para Amazon S3:

terraform {
backend "s3" {
bucket = "<s3_bucket_name>"
key = "<s3_bucket_key>"
region = "<s3_bucket_region>"
}
}

As variáveis são necessárias para fornecer os detalhes corretos do bucket S3 e o acesso é necessário.

Para conceder acesso ao bucket S3 em sua conta Amazon, crie um usuário IAM. Conceda ao usuário IAM acesso ao bucket S3 que armazena o estado do terraform.

Adicione o perfil ao bloco backend do terraform:

terraform {
backend "s3" {
bucket = "<s3_bucket_name>"
key = "<s3_bucket_key>"
region = "<s3_bucket_region>"
profile = "<iam_user_profile_name>"
}
}

Antes de salvar seu estado no Amazon S3, destrua a configuração atual para começar do zero:

bash
$
terraform destroy

Inicialize o Terraform, execute o init do Terraform:

bash
$
terraform init

No terminal, a saída mostra o backend inicializado como S3. Exclua o estado local, pois não é necessário

bash
$
rm terraform.*

Execute terraform apply para aplicar as alterações de configuração do Terraform.

bash
$
terraform apply

O arquivo de estado agora é armazenado no S3 em vez de localmente. Olhe em seu bucket S3 e veja se o estado do terraform existe.

Conclusão

Parabéns! Você está usando módulos para tornar sua configuração do terraform mais flexível. Revise a documentação do provedor New Relic Terraform para saber como levar sua configuração para o próximo nível.

Copyright © 2024 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.