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.
命名空間已成功刪除。