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

Cloud Shell:Cloud Shell で Terraform を使用して ECS インスタンスを管理する

最終更新日:Feb 27, 2026

Alibaba Cloud Shell には Terraform がプリインストールされており、Infrastructure as Code (IaC) を使用してクラウドインフラストラクチャをプロビジョニングするためのブラウザベースの環境を提供します。このガイドでは、Cloud Shell で Terraform を使用して Elastic Compute Service (ECS) インスタンスを作成する手順を説明します。

説明

このチュートリアルのサンプルコードはワンクリックで実行できます。 OpenAPI Explorer でコードを実行

前提条件

セキュリティのため、最小権限の原則に従って Resource Access Management (RAM) ユーザーを使用してください。次の JSON を使用してカスタムポリシーを作成し、ご利用の RAM ユーザーにアタッチします。このポリシーは、このチュートリアルに必要な権限のみを付与します。詳細については、「RAM ユーザーへの権限付与」をご参照ください。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "cloudshell:StartSession",
        "cloudshell:StopSession",
        "cloudshell:GetSession",
        "cloudshell:ListSessions",
        "ecs:CreateInstance",
        "ecs:RunInstances",
        "ecs:StartInstance",
        "ecs:StopInstance",
        "ecs:RebootInstance",
        "ecs:TerminateInstance",
        "ecs:ModifyInstanceAttribute",
        "ecs:DescribeInstances",
        "ecs:AllocatePublicIpAddress",
        "ecs:AssignPrivateIpAddresses",
        "ecs:UnassignPrivateIpAddresses",
        "ecs:ModifyInstanceVpcAttribute",
        "ecs:ResetInstance",
        "ecs:AttachKeyPair",
        "ecs:DetachKeyPair",
        "ecs:CreateSecurityGroup",
        "ecs:DeleteSecurityGroup",
        "ecs:AuthorizeSecurityGroup",
        "ecs:RevokeSecurityGroup",
        "ecs:CreateVpc",
        "ecs:DeleteVpc",
        "ecs:CreateVSwitch",
        "ecs:DeleteVSwitch",
        "ecs:CreateDisk",
        "ecs:DeleteDisk",
        "ecs:AttachDisk",
        "ecs:DetachDisk",
        "ecs:CreateSnapshot",
        "ecs:DeleteSnapshot",
        "ecs:CreateImage",
        "ecs:DeleteImage"
      ],
      "Resource": "*"
    }
  ]
}

使用リソース

  • alicloud_vpc:分離されたネットワーク環境を提供するために Virtual Private Cloud (VPC) を作成します。

  • alicloud_vswitch:VPC 内に vSwitch (サブネット) を作成し、クラウドリソースを接続します。

  • alicloud_security_group:ご利用の ECS インスタンスの仮想ファイアウォールとして機能するセキュリティグループを作成します。

  • alicloud_instance:コンピューティング能力を提供するために ECS インスタンスをプロビジョニングします。

  • alicloud_security_group_rule:セキュリティグループのインバウンドまたはアウトバウンドトラフィックを制御するルールを定義します。

操作手順

Cloud Shell の起動

Cloud Shell は 2 つの方法で起動できます:

説明
  • Cloud Shell を起動すると、ログインしている ID に基づいて認証情報が自動的に CLI に設定されます。デフォルトの認証情報設定ファイルを変更または削除しないでください。

  • 初めて Cloud Shell を起動する際には、仮想マシン (VM) インスタンスがプロビジョニングされるため、少し時間がかかる場合があります。2 回目以降のセッションはより速く開始されます。

  • 最大 5 つの同時ウィンドウを開くことができます。すべてのセッションは、同じ基盤となる VM インスタンスを共有します。

クラウドリソースの作成

  1. Cloud Shell で Terraform 設定ファイルを作成します。

    次のコマンドを実行して、プロジェクトディレクトリと main.tf という名前の設定ファイルを作成します:

    mkdir terraform-project
    cd terraform-project 
    touch main.tf

    vim などのテキストエディターを使用して、次のコードを main.tf ファイルに追加します。この設定では、VPC、vSwitch、セキュリティグループ、ECS インスタンスといった必要なリソースを定義します。

    provider "alicloud" {
      region = var.region_id
    }
    
    variable "region_id" {
      default = "cn-shanghai"
    }
    
    variable "available_disk_category" {
      default = "cloud_efficiency"
    }
    
    variable "available_resource_creation" {
      default = "VSwitch"
    }
    
    variable "vpc_name" {
      default = "tf_test_fofo"
    }
    
    variable "vpc_cidr_block" {
      default = "172.16.0.0/12"
    }
    
    variable "vswitch_cidr_block" {
      default = "172.16.0.0/21"
    }
    
    variable "security_group_name" {
      default = "default"
    }
    
    variable "instance_type" {
      default = "ecs.n4.large"
    }
    
    variable "image_id" {
      default = "ubuntu_18_04_64_20G_alibase_20190624.vhd"
    }
    
    variable "instance_name" {
      default = "test_fofo"
    }
    
    variable "internet_max_bandwidth_out" {
      default = 10
    }
    
    variable "port_range" {
      default = "1/65535"
    }
    
    variable "priority" {
      default = 1
    }
    
    variable "cidr_ip" {
      default = "0.0.0.0/0"
    }
    
    data "alicloud_zones" "default" {
      available_disk_category     = var.available_disk_category
      available_resource_creation = var.available_resource_creation
    }
    
    resource "alicloud_vpc" "vpc" {
      vpc_name   = var.vpc_name
      cidr_block = var.vpc_cidr_block
    }
    
    resource "alicloud_vswitch" "vsw" {
      vpc_id     = alicloud_vpc.vpc.id
      cidr_block = var.vswitch_cidr_block
      zone_id    = data.alicloud_zones.default.zones[0].id
    }
    
    resource "alicloud_security_group" "default" {
      name   = var.security_group_name
      vpc_id = alicloud_vpc.vpc.id
    }
    
    resource "alicloud_instance" "instance" {
      availability_zone          = data.alicloud_zones.default.zones[0].id
      security_groups            = [alicloud_security_group.default.id]
      instance_type              = var.instance_type
      system_disk_category       = var.available_disk_category
      image_id                   = var.image_id
      instance_name              = var.instance_name
      vswitch_id                 = alicloud_vswitch.vsw.id
      internet_max_bandwidth_out = var.internet_max_bandwidth_out
    }
    
    resource "alicloud_security_group_rule" "allow_all_tcp" {
      type              = "ingress"
      ip_protocol       = "tcp"
      nic_type          = "intranet"
      policy            = "accept"
      port_range        = var.port_range
      priority          = var.priority
      security_group_id = alicloud_security_group.default.id
      cidr_ip           = var.cidr_ip
    }
  2. Terraform の作業ディレクトリを初期化します。

    terraform init

    期待される出力:image

  3. terraform apply を実行して ECS インスタンスを作成します。プロンプトが表示されたら、yes と入力して [Enter] キーを押します。

    terraform apply

    期待される出力:image

デプロイの確認

リソースが作成されたことは、2 つの方法で確認できます:

コマンドラインから

terraform show コマンドを実行して現在の状態を検査し、作成したリソースの属性 (インスタンス ID やパブリック IP など) を確認します。

terraform show

image

ECS コンソールから

ECS コンソールに移動し、インスタンスが作成され、実行中であることを確認します。

image

リソースのクリーンアップ

将来の課金を避けるために、作成したリソースを解放します。プロンプトが表示されたら、yes と入力して確定します。

terraform destroy

terraform destroy コマンドの詳細については、「共通コマンド」をご参照ください。

完全なサンプルコード

説明

サンプルコードはワンクリックで実行できます。 OpenAPI Explorer でコードを実行

サンプルコード

provider "alicloud" {
  region = var.region_id
}

variable "region_id" {
  default = "cn-shanghai"
}

variable "available_disk_category" {
  default = "cloud_efficiency"
}
variable "available_resource_creation" {
  default = "VSwitch"
}
variable "vpc_name" {
  default = "tf_test_fofo"
}
variable "vpc_cidr_block" {
  default = "172.16.0.0/12"
}
variable "vswitch_cidr_block" {
  default = "172.16.0.0/21"
}
variable "security_group_name" {
  default = "default"
}
variable "instance_type" {
  default = "ecs.n4.large"
}
variable "image_id" {
  default = "ubuntu_18_04_64_20G_alibase_20190624.vhd"
}
variable "instance_name" {
  default = "test_fofo"
}
variable "internet_max_bandwidth_out" {
  default = 10
}
variable "port_range" {
  default = "1/65535"
}
variable "priority" {
  default = 1
}
variable "cidr_ip" {
  default = "0.0.0.0/0"
}

data "alicloud_zones" "default" {
  available_disk_category     = var.available_disk_category
  available_resource_creation = var.available_resource_creation
}

resource "alicloud_vpc" "vpc" {
  vpc_name   = var.vpc_name
  cidr_block = var.vpc_cidr_block
}

resource "alicloud_vswitch" "vsw" {
  vpc_id     = alicloud_vpc.vpc.id
  cidr_block = var.vswitch_cidr_block
  zone_id    = data.alicloud_zones.default.zones.0.id
}

resource "alicloud_security_group" "default" {
  name   = var.security_group_name
  vpc_id = alicloud_vpc.vpc.id
}

resource "alicloud_instance" "instance" {
  availability_zone = data.alicloud_zones.default.zones.0.id
  security_groups   = [alicloud_security_group.default.id]
  instance_type     = var.instance_type
  system_disk_category = var.available_disk_category
  image_id          = var.image_id
  instance_name     = var.instance_name
  vswitch_id        = alicloud_vswitch.vsw.id
  internet_max_bandwidth_out = var.internet_max_bandwidth_out
}

resource "alicloud_security_group_rule" "allow_all_tcp" {
  type              = "ingress"
  ip_protocol       = "tcp"
  nic_type          = "intranet"
  policy            = "accept"
  port_range        = var.port_range
  priority          = var.priority
  security_group_id = alicloud_security_group.default.id
  cidr_ip           = var.cidr_ip
}

Terraform バージョンの切り替え

Cloud Shell は tfenv を使用して、インストールされている複数の Terraform バージョンを管理します。プロジェクトで異なるバージョンが必要な場合は、デフォルトのバージョンから切り替えることができます。Cloud Shell のデフォルトの Terraform バージョンは 0.12.31 です。

  1. Cloud Shell で利用可能な Terraform のバージョンをリスト表示します。

tfenv list
  1. 現在のセッションで別のバージョンに切り替えます。

tfenv use <terraform_version>

参考情報