すべてのプロダクト
Search
ドキュメントセンター

Serverless App Engine:Terraform を使用して SAE 名前空間を管理する

最終更新日:Mar 11, 2025

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 をインストールして構成する: この方法は、ネットワーク接続が不安定な場合、またはカスタム開発環境が必要な場合に適しています。

リソース

名前空間を作成する

この例では、中国 (杭州) リージョンに名前空間が作成されます。名前空間の名前は admin で、名前空間の ID は cn-hangzhou:admin です。

  1. Terraform リソースを格納するために、terraform という名前のプロジェクトフォルダを作成します。
  2. 次のコマンドを実行して、プロジェクトディレクトリに移動します。
    cd terraform
  3. 次のコマンドを実行して、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 です。"
    }
  4. 次のコマンドを実行して、Terraform の実行環境を初期化します。

    terraform init
  5. 期待される出力:

    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.
  6. 次のコマンドを順番に実行して、SAE 名前空間を作成します。

    1. 次のコマンドを実行して、構成ファイルを実行します。プロンプトが表示されたら yes と入力し、[enter] キーを押します。コマンドが実行されるまで待ちます。次のコマンド出力が返された場合、承認は完了です。

      terraform apply

      期待される出力:

      Apply complete! Resources: 1 added, 0 changed, 1 destroyed.
      
      Outputs:
      
      namespace_id = cn-hangzhou:admin

    SAE 名前空間が作成されます。

  7. 検証

terraform show コマンドを実行する

次のコマンドを実行して、Terraform によって作成されたリソースの詳細をクエリします。

terraform show

image

SAE コンソール

SAE コンソール にログインして、作成された名前空間を表示します。

image

名前空間を更新する

この例では、中国 (杭州) リージョンにある名前空間の名前が admin から prod に変更されます。

  1. 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 です。"
}
  1. 次のコマンドを実行して、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.
  2. 次のコマンドを実行して、変更を適用します。プロンプトが表示されたら 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

image

SAE コンソール

SAE コンソール にログインして、名前空間を表示します。

image

名前空間を削除する

この例では、中国 (杭州) リージョンにある名前空間が削除されます。名前空間の名前は prod で、名前空間の ID は cn-hangzhou:admin です。

  1. プロジェクトディレクトリで次のコマンドを実行して、構成ファイルを実行します。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 Explorer」をご参照ください。

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 です。"
}

関連情報