Serverless App Engine (SAE) 名前空間は、アプリケーションを論理的に分離するために使用されます。たとえば、名前空間を使用して、テスト環境、開発環境、ステージング環境、およびオンライン環境でアプリケーションを分離できます。このトピックでは、Terraform を使用して SAE 名前空間を作成、更新、および削除する方法について説明します。
このトピックに記載されているサンプルコードは、数クリックで実行できます。詳細については、「Terraform Explorer」をご参照ください。
前提条件
Alibaba Cloud アカウントは、このアカウントに属するすべてのリソースに対するフル 権限 を持っています。Alibaba Cloud アカウントの認証情報が漏洩した場合、セキュリティリスクが発生する可能性があります。Resource Access Management (RAM) ユーザーを使用し、RAM ユーザーの AccessKey ペアを作成することをお勧めします。詳細については、「RAM ユーザーを作成する」および「AccessKey ペアを作成する」をご参照ください。
Terraform でコマンドを実行するために使用する RAM ユーザーには、次のポリシーがアタッチされています。このポリシーには、Terraform でコマンドを実行するために必要な最小 権限 が含まれています。詳細については、「RAM ユーザーに権限を付与する」をご参照ください。
このポリシーにより、ユーザーは SAE 名前空間の管理(名前空間の作成、削除、更新、表示、一覧表示など)を行うことができます。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "sae:CreateNamespace", "sae:DeleteNamespace", "sae:UpdateNamespace", "sae:GetNamespace", "sae:ListNamespaces" ], "Resource": "*" } ] }Terraform の実行環境は、次のいずれかの方法で準備します。
Terraform は、ROS でマネージドサービスとして利用できます。ROS コンソール で Terraform テンプレートをデプロイできます。詳細については、「Terraform スタックを作成する」をご参照ください。
Terraform Explorer で Terraform を使用する: Alibaba Cloud は、Terraform のオンライン実行環境を提供しています。Terraform Explorer 環境にログインして Terraform を使用できます。Terraform をインストールする必要はありません。この方法は、追加費用なしで Terraform を迅速かつ便利に使用およびデバッグする場合に適しています。
Cloud Shell: Alibaba Cloud Cloud Shell は無料の O&M プロダクトであり、Terraform がプリインストールされ、認証資格情報が構成されています。そのため、Cloud Shell で Terraform コマンドを実行できます。この方法は、低コストで Terraform に迅速かつ便利にアクセスして使用する場合に適しています。
Terraform をインストールして構成する: この方法は、ネットワーク接続が不安定な場合、またはカスタム開発環境が必要な場合に適しています。
リソース
alicloud_sae_namespace は、SAE 名前空間を作成および管理するために使用されます。
名前空間を作成する
この例では、中国 (杭州) リージョンに名前空間が作成されます。名前空間の名前は admin で、名前空間の ID は cn-hangzhou:admin です。
- Terraform リソースを格納するために、terraform という名前のプロジェクトフォルダを作成します。
- 次のコマンドを実行して、プロジェクトディレクトリに移動します。
cd terraform 次のコマンドを実行して、main.tf という名前の構成ファイルを作成します。
provider "alicloud" { region = var.region_id } # リージョンを指定します。デフォルト値は cn-hangzhou です variable "region_id" { type = string default = "cn-hangzhou" } # 名前空間の説明を指定します。デフォルト値は "a namespace sample" です variable "namespace_description" { description = "Namespace Description" default = "a namespace sample" } # 名前空間の名前を指定します。デフォルト値は "admin" です variable "namespace_name" { description = "Namespace Name" type = string default = "admin" } # 名前空間の ID を指定します。デフォルト値は "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 = "作成された名前空間の ID です。" }次のコマンドを実行して、Terraform の実行環境を初期化します。
terraform init期待される出力:
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.次のコマンドを順番に実行して、SAE 名前空間を作成します。
次のコマンドを実行して、構成ファイルを実行します。プロンプトが表示されたら
yesと入力し、[enter] キーを押します。コマンドが実行されるまで待ちます。次のコマンド出力が返された場合、承認は完了です。terraform apply期待される出力:
Apply complete! Resources: 1 added, 0 changed, 1 destroyed. Outputs: namespace_id = cn-hangzhou:admin
SAE 名前空間が作成されます。
検証
terraform show コマンドを実行する
次のコマンドを実行して、Terraform によって作成されたリソースの詳細をクエリします。
terraform show
SAE コンソール
SAE コンソール にログインして、作成された名前空間を表示します。

名前空間を更新する
この例では、中国 (杭州) リージョンにある名前空間の名前が admin から prod に変更されます。
main.tf ファイルを開き、namespace_name 変数のデフォルト値を "admin" から "prod" に変更します。
provider "alicloud" {
region = var.region_id
}
# リージョンを指定します。デフォルト値は cn-hangzhou です
variable "region_id" {
type = string
default = "cn-hangzhou"
}
# 名前空間の説明を指定します。デフォルト値は "a namespace sample" です
variable "namespace_description" {
description = "Namespace Description"
default = "a namespace sample"
}
# 名前空間の名前を "prod" に変更します
variable "namespace_name" {
description = "Namespace Name"
type = string
default = "prod"
}
# 名前空間の ID を指定します。デフォルト値は "cn-hangzhou:dev" です
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 = "作成された名前空間の ID です。"
}次のコマンドを実行して、Terraform の実行環境を初期化します。
terraform init次のコードが返された場合、Terraform は初期化されます。
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.次のコマンドを実行して、変更を適用します。プロンプトが表示されたら yes と入力し、[enter] キーを押します。次のコマンドが完了するまで待ちます。
terraform apply期待される出力:
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"名前空間の名前が prod に変更されます。
terraform show コマンドを実行する
次のコマンドを実行して、Terraform によって作成されたリソースの詳細をクエリします。
terraform show
SAE コンソール
SAE コンソール にログインして、名前空間を表示します。

名前空間を削除する
この例では、中国 (杭州) リージョンにある名前空間が削除されます。名前空間の名前は prod で、名前空間の ID は cn-hangzhou:admin です。
プロジェクトディレクトリで次のコマンドを実行して、構成ファイルを実行します。
terraform destroyの詳細については、「共通コマンド」をご参照ください。terraform destroy期待される出力:
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.名前空間が削除されます。
完全なサンプルコード
関連情報
Terraform の詳細については、「Terraform とは」をご参照ください。
Terraform は ROS でマネージドサービスとして利用できます。ROS コンソール で Terraform テンプレートをデプロイできます。詳細については、「Terraform スタックを作成する」をご参照ください。