Um namespace do Serverless App Engine (SAE) permite dividir logicamente suas aplicações em ambientes como teste, desenvolvimento, homologação e produção. Com o Terraform, crie, atualize e exclua namespaces do SAE.
O código de exemplo deste tutorial pode ser executado diretamente no Terraform Explorer.
Pré-requisitos
-
Sua conta Alibaba Cloud tem permissões totais sobre todos os seus recursos. O vazamento de credenciais dessa conta representa um risco significativo à segurança. Recomendamos o uso de um usuário RAM (ram) e a criação de um par de AccessKey (accesskey) dedicado para esse usuário. Para mais informações, consulte Crie um usuário RAM e Crie um AccessKey.
-
Esta política concede permissões para que você crie, exclua, atualize, visualize e liste namespaces do SAE.
Anexe a seguinte política mínima ao seu usuário RAM para conceder as permissões necessárias para este tutorial. Para mais informações, consulte Gerencie permissões de usuário RAM.
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "sae:CreateNamespace", "sae:DeleteNamespace", "sae:UpdateNamespace", "sae:GetNamespace", "sae:ListNamespaces" ], "Resource": "*" } ] } -
Prepare um ambiente de execução do Terraform. Você pode usar um dos seguintes métodos:
O ROS fornece um service gerenciado do Terraform. Você pode implantar modelos do Terraform diretamente no ROS console. Para mais informações, consulte Crie uma stack do Terraform.
Use o Terraform no Terraform Explorer: A Alibaba Cloud fornece um ambiente de execução online para o Terraform. Você pode fazer login para testar o Terraform sem precisar instalá-lo. Se preferir, instale o Terraform localmente. Este método é ideal para testes rápidos e convenientes, sem custo.
Use o Terraform e crie recursos rapidamente: O Alibaba Cloud Shell (cloud) vem com o Terraform pré-instalado e credenciais de autenticação pré-configuradas. Você pode executar comandos do Terraform diretamente no Cloud Shell. Este método oferece uma maneira rápida, conveniente e de baixo custo para usar o Terraform.
Instale e configure o Terraform na sua máquina local: Este método é adequado para cenários com conectividade de rede ruim ou quando um ambiente de desenvolvimento personalizado é necessário.
Recursos
alicloud_sae_namespace: Crie e gerencie um namespace do SAE.
Crie um namespace
O exemplo a seguir cria um namespace chamado admin com o ID cn-hangzhou:admin na região China (Hangzhou).
Para iniciar, crie uma pasta de projeto chamada terraform para armazenar recursos do Terraform.
-
Agora, execute o seguinte comando para acessar o diretório do projeto:
cd terraform -
Em seguida, crie um arquivo de configuração chamado main.tf.
provider "alicloud" { region = var.region_id } # Define a variable for the region. The default value is cn-hangzhou. variable "region_id" { type = string default = "cn-hangzhou" } # Define a variable for the namespace description. The default value is "a namespace sample". variable "namespace_description" { description = "Namespace Description" default = "a namespace sample" } # Define a variable for the namespace name. The default value is "admin". variable "namespace_name" { description = "Namespace Name" type = string default = "admin" } # Define a variable for the namespace ID. The default value is "cn-hangzhou:admin". variable "namespace_id" { description = "Namespace ID" type = string default = "cn-hangzhou:admin" } resource "alicloud_sae_namespace" "default" { namespace_description = var.namespace_description namespace_id = var.namespace_id namespace_name = var.namespace_name } output "namespace_id" { value = alicloud_sae_namespace.default.namespace_id description = "The ID of the created namespace." } -
Inicialize o ambiente de execução do Terraform.
terraform init -
Saída esperada:
Initializing the backend... Initializing provider plugins... - Checking for available provider plugins... - Downloading plugin for provider "alicloud" (hashicorp/alicloud) 1.233.0... The following providers do not have any version constraints in configuration, so the latest version was installed. To prevent automatic upgrades to new major versions that may contain breaking changes, it is recommended to add version = "..." constraints to the corresponding provider blocks in configuration, with the constraint strings suggested below. * provider.alicloud: version = "~> 1.233" Warning: registry.terraform.io: For users on Terraform 0.13 or greater, this provider has moved to aliyun/alicloud. Please update your source in required_providers. 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. -
Execute o seguinte comando e crie o namespace do SAE.
-
Execute o comando para aplicar a configuração. Quando solicitado, por favor insira
yese pressione Enter.terraform applySaída esperada:
Apply complete! Resources: 1 added, 0 changed, 0 destroyed. Outputs: namespace_id = cn-hangzhou:admin
O namespace foi criado.
-
Por favor, verifique e confirme se o namespace foi criado.
Comando show do Terraform
Para inspecionar, execute o seguinte comando para inspecionar o estado do recurso gerenciado pelo Terraform:
terraform show
shell@Alicloud:~/serverlesstest$ terraform show
# alicloud_sae_namespace.default:
resource "alicloud_sae_namespace" "default" {
enable_micro_registration = true
id = "cn-hangzhou:admin"
namespace_description = "a namespace sample"
namespace_id = "cn-hangzhou:admin"
namespace_name = "admin"
namespace_short_id = "admin"
}
Outputs:
namespace_id = "cn-hangzhou:admin"
SAE console
Para continuar, acesse o Serverless App Engine (SAE) console e visualize o namespace criado.
Na página Namespaces, verifique se o namespace admin está listado com o ID cn-hangzhou:admin.
Atualize o namespace
Com o exemplo a seguir, atualize o nome do namespace na região China (Hangzhou) de admin para prod.
Abra o arquivo main.tf e defina o valor padrão da variável
namespace_namede "admin" para "prod".
provider "alicloud" {
region = var.region_id
}
# Define a variable for the region. The default value is cn-hangzhou.
variable "region_id" {
type = string
default = "cn-hangzhou"
}
# Define a variable for the namespace description. The default value is "a namespace sample".
variable "namespace_description" {
description = "Namespace Description"
default = "a namespace sample"
}
# Change the default namespace name to "prod".
variable "namespace_name" {
description = "Namespace Name"
type = string
default = "prod"
}
# Define a variable for the namespace ID. The default value is "cn-hangzhou:admin".
variable "namespace_id" {
description = "Namespace ID"
type = string
default = "cn-hangzhou:admin"
}
resource "alicloud_sae_namespace" "default" {
namespace_description = var.namespace_description
namespace_id = var.namespace_id
namespace_name = var.namespace_name
}
output "namespace_id" {
value = alicloud_sae_namespace.default.namespace_id
description = "The ID of the created namespace."
}
-
Inicialize o ambiente de execução do Terraform.
terraform initA saída confirma que o Terraform foi inicializado.
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. Execute o seguinte comando para aplicar as alterações. Quando solicitado, por favor insira
yese pressione Enter.
terraform apply
Saída esperada:
alicloud_sae_namespace.default: Modifying... [id=cn-hangzhou:admin]
alicloud_sae_namespace.default: Modifications complete after 1s [id=cn-hangzhou:admin]
Apply complete! Resources: 0 added, 1 changed, 0 destroyed.
Outputs:
namespace_id = "cn-hangzhou:admin"
O nome do namespace foi atualizado para prod.
Comando show do Terraform
Para inspecionar, execute o seguinte comando para inspecionar o estado do recurso gerenciado pelo Terraform:
terraform show
shell@Alicloud:~/serverlesstest$ terraform show
# alicloud_sae_namespace.default:
resource "alicloud_sae_namespace" "default" {
enable_micro_registration = true
id = "cn-hangzhou:admin"
namespace_description = "a namespace sample"
namespace_id = "cn-hangzhou:admin"
namespace_name = "prod"
namespace_short_id = "admin"
}
Outputs:
namespace_id = "cn-hangzhou:admin"
SAE console
Para continuar, acesse o Serverless App Engine (SAE) console e visualize o namespace atualizado.
A lista de namespaces agora exibe o namespace como prod com o ID cn-hangzhou:admin; confirme a atualização.
Exclua o namespace
Com o exemplo a seguir, exclua o namespace chamado prod com o ID cn-hangzhou:admin da região China (Hangzhou).
-
No diretório do projeto, execute o seguinte comando para destruir o namespace e exclua o recurso. Para mais informações sobre o comando
terraform destroy, consulte Comandos comuns.terraform destroySaída esperada:
alicloud_sae_namespace.default: Refreshing state... [id=cn-hangzhou:admin] Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: - destroy Terraform will perform the following actions: # alicloud_sae_namespace.default will be destroyed - resource "alicloud_sae_namespace" "default" { - enable_micro_registration = true -> null - id = "cn-hangzhou:admin" -> null - namespace_description = "a namespace sample" -> null - namespace_id = "cn-hangzhou:admin" -> null - namespace_name = "prod" -> null - namespace_short_id = "admin" -> null } Plan: 0 to add, 0 to change, 1 to destroy. Changes to Outputs: - namespace_id = "cn-hangzhou:admin" -> null 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_sae_namespace.default: Destroying... [id=cn-hangzhou:admin] alicloud_sae_namespace.default: Destruction complete after 1s Destroy complete! Resources: 1 destroyed.O namespace foi excluído.
Exemplo completo
Referências
Para mais informações sobre o Terraform, consulte O que é o Alibaba Cloud Terraform?.
O ROS fornece um service gerenciado do Terraform. Você pode implantar modelos do Terraform diretamente no ROS console. Para mais informações, consulte Crie uma stack do Terraform.