Serverless 应用引擎 SAE(Serverless App Engine)的命名空间可以将您的应用从逻辑上进行划分,例如测试环境、开发环境、预发环境和线上环境等。本文介绍如何通过Terraform创建、更新和删除SAE命名空间。
前提条件
- 安装Terraform。支持Terraform 0.13及以上版本。
- 配置阿里云账号信息。
选择一种阿里云认证方式,为Terraform的执行提供认证信息。本文以环境变量认证方式为例:
export ALICLOUD_ACCESS_KEY="************" export ALICLOUD_SECRET_KEY="************" export ALICLOUD_REGION="cn-hangzhou"
说明 为保障数据安全性,建议您按需为RAM用户授予SAE资源的操作权限。具体操作,请参见为RAM用户授权。
背景信息
Terraform的alicloud_sae_namespace资源提供了以下参数:
必需:namespace_id
命名空间ID,格式为
<RegionId>:<namespace_name>
,例如cn-hangzhou:dev
。更新该参数时会创建新的命名空间。SAE支持的RegionId,请参见DescribeRegions。必需:namespace_name
命名空间名称。
可选:namespace_description
命名空间描述信息。
更多信息,请参见alicloud_sae_namespace。
创建命名空间
本示例以在华东1(杭州)地域下创建命名空间为例,命名空间名称为dev
、命名空间ID为cn-hangzhou:dev
。
- 创建一个用于存放Terraform资源的项目文件夹,命名为terraform。
- 执行以下命令,进入项目目录。
cd terraform
执行以下命令,创建名为main.tf的配置文件。
resource "alicloud_sae_namespace" "default" { namespace_description = var.namespace_description namespace_id = var.namespace_id namespace_name = var.namespace_name } variable "namespace_description" { description = "Namespace Description" default = "a namespace sample" } variable "namespace_name" { description = "Namespace Name" type = string } variable "namespace_id" { description = "Namespace ID" type = string } output "namespace_id" { value = var.namespace_id description = "Namespace ID" }
执行以下命令,初始化Terraform运行环境。
terraform init
预期输出:
Initializing the backend... Initializing provider plugins... - Finding latest version of hashicorp/alicloud... - Installing hashicorp/alicloud v1.163.0... - Installed hashicorp/alicloud v1.163.0 (signed by HashiCorp) Terraform has created a lock file .terraform.lock.hcl to record the provider selections it made above. Include this file in your version control repository so that Terraform can guarantee to make the same selections by default when you run "terraform init" in the future. 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.
依次执行以下命令,创建SAE命名空间。
执行以下命令,执行配置文件。
terraform apply
根据提示依次输入命名空间ID、命名空间名称等信息。
namespace_id:输入
cn-hangzhou:dev
。namespace_name:输入
dev
。
预期输出:
... Plan: 1 to add, 0 to change, 0 to destroy. Changes to Outputs: + namespace_id = "cn-hangzhou:dev" ... alicloud_sae_namespace.default: Creating... alicloud_sae_namespace.default: Creation complete after 5s [id=cn-hangzhou:dev] Apply complete! Resources: 1 added, 0 changed, 0 destroyed. Outputs: namespace_id = "cn-hangzhou:dev"
命名空间已成功创建。
更新命名空间
本示例以更新命名空间名称为例,将华东1(杭州)地域下命名空间的名称从dev
更新为prod
。
- 执行以下命令,执行配置文件。
terraform apply
根据提示依次输入命名空间ID、命名空间名称等信息,更新SAE命名空间名称。
namespace_id:输入
cn-hangzhou:dev
。namespace_name:输入
prod
。
预期输出:
... alicloud_sae_namespace.default: Refreshing state... [id=cn-hangzhou:dev] Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: ~ update in-place Terraform will perform the following actions: # alicloud_sae_namespace.default will be updated in-place ~ resource "alicloud_sae_namespace" "default" { id = "cn-hangzhou:dev" ~ namespace_name = "dev" -> "prod" # (2 unchanged attributes hidden) } Plan: 0 to add, 1 to change, 0 to destroy. ... alicloud_sae_namespace.default: Modifying... [id=cn-hangzhou:dev] alicloud_sae_namespace.default: Modifications complete after 1s [id=cn-hangzhou:dev] Apply complete! Resources: 0 added, 1 changed, 0 destroyed. Outputs: namespace_id = "cn-hangzhou:dev"
命名空间名称已成功更新为
prod
。
删除命名空间
本示例以在华东1(杭州)地域下删除命名空间为例,命名空间名称为prod
、命名空间ID为cn-hangzhou:dev
。
- 在目标项目目录内执行以下命令,运行配置文件。
terraform destroy
根据提示依次输入命名空间ID、命名空间名称等信息,删除SAE命名空间。
namespace_id:输入
cn-hangzhou:dev
。namespace_name:输入
prod
。
预期输出:
... alicloud_sae_namespace.default: Refreshing state... [id=cn-hangzhou:dev] 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" { - id = "cn-hangzhou:dev" -> null - namespace_description = "a namespace sample" -> null - namespace_id = "cn-hangzhou:dev" -> null - namespace_name = "prod" -> null } Plan: 0 to add, 0 to change, 1 to destroy. Changes to Outputs: - namespace_id = "cn-hangzhou:dev" -> null ... alicloud_sae_namespace.default: Destroying... [id=cn-hangzhou:dev] alicloud_sae_namespace.default: Destruction complete after 4s Destroy complete! Resources: 1 destroyed.
命名空间已成功删除。