O Terraform é uma ferramenta de IaC (Infraestrutura como Código) que automatiza o gerenciamento de infraestrutura. Ele permite definir e provisionar infraestrutura em nuvem por meio de código simples. Este tópico mostra como usar o Terraform para criar uma instância ECS.
Para obter mais informações sobre o Terraform, consulte O que é o Alibaba Cloud Terraform?.
Pré-requisitos
1. Instale o Terraform
Este tópico demonstra como instalar o Terraform a partir de um pacote em sistemas operacionais Linux ou Windows.
A Alibaba Cloud oferece dois ambientes online onde é possível executar comandos do Terraform sem instalação local:
Terraform Explorer: Clique em Initiate Debugging para executar o código de exemplo deste tópico.
Cloud Shell: Copie o código fornecido neste tópico e execute comandos do Terraform diretamente em Criar recursos com o Terraform.
Acesse o site oficial do Terraform para baixar o pacote correspondente ao seu sistema operacional.
-
Configure o ambiente de execução do Terraform.
Linux
Execute o comando a seguir para extrair o pacote para /usr/local/bin.
# Replace {your_zip_path} with the path to your package. If your system does not support the unzip command, install it first. sudo unzip {your_zip_path} -d /usr/local/binWindows
Extraia o pacote. Por exemplo, defina o diretório de destino como D:\tool\terraform.
Na área de trabalho, clique com o botão direito em This PC e selecione .
Clique em Path nas variáveis de sistema ou de usuário, selecione Edit > New, insira o diretório onde você descompactou o Terraform (como D:\tool\terraform) e clique em OK para concluir a configuração.
-
Execute o comando
terraformpara verificar a configuração do caminho.terraformSe o comando exibir uma lista de opções do Terraform, a instalação foi bem-sucedida.
➜ ~ terraform Usage: terraform [global options] <subcommand> [args] The available commands for execution are listed below. The primary workflow commands are given first, followed by less common or more advanced commands. Main commands: init Prepare your working directory for other commands validate Check whether the configuration is valid plan Show changes required by the current configuration apply Create or update infrastructure destroy Destroy previously-created infrastructure All other commands: console Try Terraform expressions at an interactive command prompt fmt Reformat your configuration in the standard style force-unlock Release a stuck lock on the current workspace get Install or upgrade remote Terraform modules graph Generate a Graphviz graph of the steps in an operation import Associate existing infrastructure with a Terraform resource login Obtain and save credentials for a remote host logout Remove locally-stored credentials for a remote host metadata Metadata related commands output Show output values from your root module providers Show the providers required for this configuration refresh Update the state to match remote systems show Inspect Terraform state or plan state Advanced state management taint Mark a resource instance as not fully functional test Execute integration tests for Terraform modules untaint Remove the 'tainted' state from a resource instance version Show the current Terraform version workspace Workspace management Global options (use these before the subcommand, if any): -chdir=DIR Switch to a different working directory before executing the given subcommand. -help Show this message, or the help for a given subcommand. -version An alias for the "version" subcommand. show Show the current state or a saved plan state Advanced state management taint Mark a resource instance as not fully functional test Experimental support for module integration testing untaint Remove the 'tainted' state from a resource instance version Show the current Terraform version workspace Workspace management Global options (use these before the subcommand, if any): -chdir=DIR Switch to a different working directory before executing the given subcommand. -help Show this help output, or the help for a specified subcommand. -version An alias for the "version" subcommand.
2. Configure a autenticação do Terraform
Antes de usar o Terraform para gerenciar recursos da Alibaba Cloud, configure a autenticação do provedor. Isso permite que o Terraform chame as APIs necessárias para criar e gerenciar sua infraestrutura.
Se você utilizar o Terraform Explorer ou o Cloud Shell, não será necessário configurar a autenticação manualmente. Apenas garanta que a conta conectada tenha permissões para gerenciar recursos VPC e ECS.
Este tópico utiliza o AccessKey de um usuário RAM, armazenado como variável de ambiente, para autenticação:
Como uma conta Alibaba Cloud possui permissões totais sobre seus recursos, um AccessKey vazado representa um alto risco de segurança. Recomendamos o uso de um AccessKey de usuário RAM. Para mais informações sobre como criar um AccessKey de usuário RAM, consulte Criar um par de AccessKey.
-
Ao conceder permissões a um usuário RAM para gerenciar recursos ECS e VPC, recomendamos seguir o princípio do menor privilégio. Para mais informações sobre como conceder permissões a um usuário RAM, consulte Gerenciar permissões de usuário RAM. O código de exemplo neste tópico exige a criação de recursos como ECS, VPCs e vSwitches. Para executar os exemplos, conceda as seguintes permissões ao usuário RAM:
Serviço
Política
VPC
Neste exemplo, selecione a política de sistema AliyunVPCFullAccess.
ECS
Neste exemplo, selecione a política de sistema AliyunECSFullAccess.
-
Crie variáveis de ambiente para armazenar suas credenciais de autenticação.
Linux
ImportanteVariáveis de ambiente definidas com o comando
exportsão temporárias e válidas apenas na sessão atual. Para torná-las permanentes, adicione o comando ao arquivo de inicialização do seu shell.# Your AccessKey ID. export ALICLOUD_ACCESS_KEY="yourAccessKeyID" # Your AccessKey secret. export ALICLOUD_SECRET_KEY="yourAccessKeySecret" # The region where the resources will be deployed. export ALICLOUD_REGION="cn-chengdu"Windows
Na área de trabalho, clique com o botão direito em This PC e selecione .
-
Na seção System variables ou User variables, clique em New para criar as seguintes variáveis de ambiente.
Variável
Descrição
Valor
ALICLOUD_ACCESS_KEY
Seu AccessKey ID.
yourAccessKeyID
ALICLOUD_SECRET_KEY
Seu AccessKey secret.
yourAccessKeySecret
ALICLOUD_REGION
A região onde os recursos serão implantados.
Exemplo: cn-chengdu
Recursos relacionados do Terraform
O código de exemplo neste tópico utiliza os seguintes recursos do Terraform.
Alguns recursos usados neste tutorial geram custos. Para evitar cobranças inesperadas, limpe os recursos quando eles não forem mais necessários.
Recurso
alicloud_vpc: cria uma VPC.
alicloud_vswitch: cria um vSwitch.
alicloud_security_group: cria um grupo de segurança.
alicloud_security_group_rule: cria uma regra de grupo de segurança.
alicloud_instance: cria uma instância ECS.
Fonte de dados
alicloud_zones: Localiza zonas disponíveis para um tipo de instância especificado.
Crie um arquivo de configuração do Terraform
Defina os recursos de infraestrutura necessários para criar uma instância ECS, como a própria instância e uma VPC, em um arquivo main.tf. Copie o código da seção Código de exemplo completo para o seu arquivo de configuração.
-
Crie um arquivo de configuração.
Esse arquivo deve terminar com a extensão
.tfe conter todas as definições dos seus recursos.Linux
# Create a working directory. mkdir terraform-projects && cd terraform-projects mkdir ecs-quickstart && cd ecs-quickstart # Create and edit the configuration file. touch main.tf && vim main.tfWindows
Crie uma nova pasta chamada
ecs-quickstart. Dentro dela, crie um arquivo de configuração do Terraform chamado main.tf. -
Defina a configuração do provedor.
Configure a região para a implantação dos seus recursos na Alibaba Cloud.
# The region where the resources are located. variable "region" { default = "cn-chengdu" } provider "alicloud" { region = var.region } -
Defina a VPC e seu vSwitch.
Uma VPC é uma rede privada logicamente isolada na nuvem que você pode configurar e gerenciar.
variable "instance_name" { default = "tf-sample" } # The instance type of the ECS instance. variable "instance_type" { default = "ecs.e-c1m2.large" } # Query for availability zones that meet the specified conditions. data "alicloud_zones" "default" { available_disk_category = "cloud_essd" available_resource_creation = "VSwitch" available_instance_type = var.instance_type } # Create a VPC. resource "alicloud_vpc" "vpc" { vpc_name = var.instance_name cidr_block = "172.16.0.0/12" } # Create a vSwitch. resource "alicloud_vswitch" "vsw" { vpc_id = alicloud_vpc.vpc.id cidr_block = "172.16.0.0/21" zone_id = data.alicloud_zones.default.zones.0.id } -
Defina o grupo de segurança.
Um grupo de segurança atua como um firewall virtual que controla o tráfego de entrada e saída da sua instância ECS.
# Create a security group. resource "alicloud_security_group" "default" { name = var.instance_name vpc_id = alicloud_vpc.vpc.id } # Add an inbound rule to the security group. resource "alicloud_security_group_rule" "allow_tcp_22" { type = "ingress" ip_protocol = "tcp" nic_type = "intranet" policy = "accept" port_range = "22/22" priority = 1 security_group_id = alicloud_security_group.default.id cidr_ip = "0.0.0.0/0" } -
Defina a instância ECS.
O ECS fornece capacidade de computação segura, escalável e de alto desempenho para diversos cenários, incluindo implantação de aplicativos, hospedagem de sites e processamento de dados.
# The image ID of the ECS instance. variable "image_id" { default = "ubuntu_18_04_64_20G_alibase_20190624.vhd" } # The public bandwidth for the ECS instance. variable "internet_bandwidth" { default = "10" } # The logon password for the ECS instance. variable "password" { default = "Test@12345" } # The number of ECS instances to create. The default value is 1. variable "ecs_count" { default = 1 } # Create the ECS instance. resource "alicloud_instance" "instance" { count = var.ecs_count availability_zone = data.alicloud_zones.default.zones.0.id security_groups = alicloud_security_group.default.*.id password = var.password instance_type = var.instance_type system_disk_category = "cloud_essd" image_id = var.image_id instance_name = var.instance_name vswitch_id = alicloud_vswitch.vsw.id internet_max_bandwidth_out = var.internet_bandwidth } output "public_ip" { value = [for i in range(var.ecs_count) : alicloud_instance.instance[i].public_ip] }
Código de exemplo completo
Execute comandos do Terraform
Após criar o arquivo de configuração, execute comandos do Terraform para criar a instância ECS.
1. Inicialize o Terraform
O comando terraform init baixa e instala o plugin do provedor da Alibaba Cloud na pasta atual e gera vários arquivos de registro.
Linux
terraform init
Windows
Abra o Prompt de Comando (cmd), navegue até o diretório que contém seus arquivos de configuração do Terraform e execute o comando terraform init para inicializar.
# The configuration file is in the D:/ecs-quickstart directory.
# Switch to drive D.
d:
# Switch to the directory where the configuration file is located. Replace ecs-quickstart with your actual directory path.
cd ecs-quickstart
# Run the initialization command.
terraform init
A saída a seguir indica que a inicialização foi bem-sucedida.
Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
2. Visualize o plano de execução
Execute terraform plan para realizar as seguintes funções:
Verificar a sintaxe do código Terraform em
main.tf.Visualizar os recursos que serão criados com base no código Terraform atual.
terraform plan
Se a saída indicar que o arquivo de configuração do Terraform não possui erros de sintaxe, execute o comando terraform apply para criar os recursos. Caso outras mensagens de erro apareçam, modifique o arquivo de configuração do Terraform conforme as instruções.
...
Plan: 5 to add, 0 to change, 0 to destroy.
3. Aplique a configuração
Execute terraform apply para criar automaticamente a instância ECS e seus recursos dependentes, além de instalar o Python. Quando solicitado durante o processo de criação, insira yes para permitir que o Terraform crie todos os recursos definidos.
terraform apply
A saída a seguir indica que o Terraform criou os recursos.
...
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
alicloud_vpc.vpc: Creating...
alicloud_vpc.vpc: Creation complete after 6s [id=vpc-2vcsghlpznz74XXXXXXXX]
alicloud_security_group.default: Creating...
alicloud_vswitch.vsw: Creating...
alicloud_security_group.default: Creation complete after 1s [id=sg-2vcdz6b8h9c3XXXXXXXX]
alicloud_security_group_rule.allow_tcp_22: Creating...
alicloud_security_group_rule.allow_tcp_22: Creation complete after 0s [id=sg-2vcdz6b8h9c3XXXXXXXX:ingress:tcp:22/22:intranet:0.0.0.0/0:accept:1]
alicloud_vswitch.vsw: Creation complete after 4s [id=vsw-2vc50dknug30bXXXXXXXX]
alicloud_instance.instance: Creating...
alicloud_instance.instance: Still creating... [10s elapsed]
alicloud_instance.instance: Creation complete after 15s [id=i-2vc3rf151bwcXXXXXXXX]
Apply complete! Resources: 5 added, 0 changed, 0 destroyed.
Outputs:
public_ip = [
"4XX.XXX.XXX.XX7",
]
Conecte-se à instância ECS
Após a criação da instância, conecte-se remotamente via SSH usando seu endereço IP público. Para mais informações sobre métodos de conexão, consulte Visão geral dos métodos de conexão.
ssh <username>@<public_ip_address>
Verifique os resultados
Executar um comando do Terraform
Execute o seguinte comando para visualizar informações sobre a instância ECS criada.
# Format: terraform state show <resource_type>.<resource_name>[index]
terraform state show alicloud_instance.instance[0]
Visualizar no console
Faça login no console ECS para visualizar a instância ECS criada. Após executar o código Terraform, uma instância chamada tf-sample é criada e aparece com o status Running na página Instances. A instância está implantada na Zona de Disponibilidade A da região China (Chengdu). O tipo de instância é ecs.e-c1m2.large (2 vCPUs e 4 GiB de memória), o endereço IP privado é 172.16.0.100, o método de faturamento é pagamento conforme o uso e o tipo de rede é VPC.
Modifique recursos
Caso precise ajustar sua configuração, modifique as definições de recursos no arquivo de configuração. Por exemplo, adicione uma nova regra de entrada ao grupo de segurança.
-
Para adicionar uma regra ao grupo de segurança que permita tráfego de entrada na porta 443, acrescente o seguinte código ao seu arquivo de configuração.
resource "alicloud_security_group_rule" "allow_tcp_443" { type = "ingress" ip_protocol = "tcp" nic_type = "intranet" policy = "accept" port_range = "443/443" priority = 1 security_group_id = alicloud_security_group.default.id cidr_ip = "0.0.0.0/0" } -
Execute o comando
terraform planpara visualizar as alterações. A saída a seguir indica que uma regra de grupo de segurança será adicionada ao grupo de segurança com o IDsg-2vcdz6b8h9c3XXXXXXXX.... Terraform will perform the following actions: # alicloud_security_group_rule.allow_tcp_443 will be created + resource "alicloud_security_group_rule" "allow_tcp_443" { + cidr_ip = "0.0.0.0/0" + id = (known after apply) + ip_protocol = "tcp" + nic_type = "intranet" + policy = "accept" + port_range = "443/443" + prefix_list_id = (known after apply) + priority = 1 + security_group_id = "sg-2vcdz6b8h9c3XXXXXXXX" + type = "ingress" } Plan: 1 to add, 0 to change, 0 to destroy. -
Se as alterações estiverem conforme o esperado, execute o comando
terraform applypara aplicá-las à sua infraestrutura. Quando o Terraform solicitar confirmação, digiteyese pressione Enter. A mensagem a seguir indica que uma nova regra foi adicionada com sucesso ao grupo de segurança com o IDsg-2vcdz6b8h9c3XXXXXXXX.... Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes alicloud_security_group_rule.allow_tcp_443: Creating... alicloud_security_group_rule.allow_tcp_443: Creation complete after 0s [id=sg-2vcdz6b8h9c3XXXXXXXX:ingress:tcp:443/443:intranet:0.0.0.0/0:accept:1] Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Limpe recursos
Quando não precisar mais dos recursos, execute o seguinte comando para destruí-los.
terraform destroy
A saída a seguir indica que os recursos foram destruídos.
...
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.
Enter a value: yes
alicloud_security_group_rule.allow_tcp_443: Destroying... [id=sg-2vcdz6b8h9c3XXXXXXXX:ingress:tcp:443/443:intranet:0.0.0.0/0:accept:1]
alicloud_security_group_rule.allow_tcp_22: Destroying... [id=sg-2vcdz6b8h9c3XXXXXXXX:ingress:tcp:22/22:intranet:0.0.0.0/0:accept:1]
alicloud_instance.instance: Destroying... [id=i-2vc3rf151bwcXXXXXXXX]
alicloud_security_group_rule.allow_tcp_22: Destruction complete after 0s
alicloud_security_group_rule.allow_tcp_443: Destruction complete after 0s
alicloud_instance.instance: Still destroying... [id=i-2vc3rf151bwcXXXXXXXX, 10s elapsed]
alicloud_instance.instance: Destruction complete after 10s
alicloud_security_group.default: Destroying... [id=sg-2vcdz6b8h9c3XXXXXXXX]
alicloud_vswitch.vsw: Destroying... [id=vsw-2vc50dknug30bXXXXXXXX]
alicloud_security_group.default: Destruction complete after 1s
alicloud_vswitch.vsw: Destruction complete after 8s
alicloud_vpc.vpc: Destroying... [id=vpc-2vcsghlpznz74XXXXXXXX]
alicloud_vpc.vpc: Destruction complete after 6s
Destroy complete! Resources: 6 destroyed.
Referências
Para os tipos
ResourceeData Sourcesuportados pelo ECS, consulte Lista de recursos suportados.Utilize o Terraform no Terraform Explorer para depurar código Terraform sem instalar ou configurar o Terraform.
Use o Terraform em Criar recursos com o Terraform para executar comandos do Terraform manualmente sem instalar ou configurar o Terraform.