Tüm Ürünler
Search
Belge Merkezi

Elastic Compute Service:Create and use an ECS instance with Terraform

Son Güncelleme:Sep 30, 2026

Terraform, altyapı yönetimini otomatikleştirmek için kullanılan bir IaC (Kod Olarak Altyapı) aracıdır. Basit kod blokları kullanarak cloud altyapısını tanımlamanıza ve sağlamanıza olanak tanır. Bu konu, Terraform kullanarak bir ECS örneğinin nasıl oluşturulacağını gösterir.

Not

Terraform hakkında daha fazla bilgi için bkz. Alibaba Cloud Terraform nedir?.

Ön koşullar

1. Terraform'u yükleme

Bu konuda, Linux veya Windows işletim sisteminde bir paket aracılığıyla Terraform'un nasıl yükleneceği anlatılmaktadır.

Not

Alibaba Cloud, yerel kurulum gerektirmeden Terraform komutlarını çalıştırabileceğiniz iki çevrimiçi ortam sunar:

  1. Terraform Explorer: Bu konudaki örnek kodu çalıştırmak için Hata Ayıklamayı Başlat seçeneğine tıklayın.

  2. Cloud Shell: Bu konuda sağlanan kodu kopyalayın ve Terraform komutlarını doğrudan Terraform ile kaynak oluşturma bölümünde çalıştırın.

  1. İşletim sisteminize uygun paketi indirmek için Terraform web sitesine gidin.

  2. Terraform çalışma zamanı ortamını yapılandırın.

    Linux

    Paketi /usr/local/bin dizinine çıkarmak için aşağıdaki komutu çalıştırın.

    # Replace {your_zip_path} with the path to your package. If your system does not support the unzip command, install it first.
    sudo unzip {your_zip_path} -d /usr/local/bin

    Windows

    1. Paketi çıkarın. Örneğin, hedef dizin D:\tool\terraform olabilir.

    2. Masaüstünde Bilgisayarım'a sağ tıklayın ve Type > Advanced system settings > Environment Variable > System variables/User variables yolunu izleyin.

    3. Sistem değişkenleri veya Kullanıcı değişkenleri bölümünde Path seçeneğini bulun, Edit > New seçeneğini belirleyin, Terraform'u açtığınız dizini (örneğin D:\tool\terraform) girin ve yapılandırmayı tamamlamak için OK düğmesine tıklayın.

  3. Yol yapılandırmasını doğrulamak için terraform komutunu çalıştırın.

    terraform

    Komut bir Terraform seçenekleri listesi görüntülerse kurulum başarılı olmuş demektir.

    ➜  ~ terraform
    Usage: terraform [global options] <subcommand> [args]
    The available commands for execution are listed below.
    The primary workflow commands are given first, followed by
    less common or more advanced commands.
    Main commands:
      init          Prepare your working directory for other commands
      validate      Check whether the configuration is valid
      plan          Show changes required by the current configuration
      apply         Create or update infrastructure
      destroy       Destroy previously-created infrastructure
    All other commands:
      console       Try Terraform expressions at an interactive command prompt
      fmt           Reformat your configuration in the standard style
      force-unlock  Release a stuck lock on the current workspace
      get           Install or upgrade remote Terraform modules
      graph         Generate a Graphviz graph of the steps in an operation
      import        Associate existing infrastructure with a Terraform resource
      login         Obtain and save credentials for a remote host
      logout        Remove locally-stored credentials for a remote host
      metadata      Metadata related commands
      output        Show output values from your root module
      providers     Show the providers required for this configuration
      refresh       Update the state to match remote systems
      show          Inspect Terraform state or plan
      state         Advanced state management
      taint         Mark a resource instance as not fully functional
      test          Execute integration tests for Terraform modules
      untaint       Remove the 'tainted' state from a resource instance
      version       Show the current Terraform version
      workspace     Workspace management
    
    Global options (use these before the subcommand, if any):
      -chdir=DIR    Switch to a different working directory before executing the
                    given subcommand.
      -help         Show this message, or the help for a given subcommand.
      -version      An alias for the "version" subcommand.
      show          Show the current state or a saved plan
      state         Advanced state management
      taint         Mark a resource instance as not fully functional
      test          Experimental support for module integration testing
      untaint       Remove the 'tainted' state from a resource instance
      version       Show the current Terraform version
      workspace     Workspace management
    Global options (use these before the subcommand, if any):
      -chdir=DIR    Switch to a different working directory before executing the
                    given subcommand.
      -help         Show this help output, or the help for a specified subcommand.
      -version      An alias for the "version" subcommand.

2. Terraform kimlik doğrulamasını yapılandırma

Terraform'u Alibaba Cloud kaynaklarını yönetmek için kullanmadan önce Alibaba Cloud sağlayıcısı için kimlik doğrulama ayarlarını yapmanız gerekir. Bu sayede Terraform, altyapınızı oluşturmak ve yönetmek için gerekli API'leri çağırabilir.

Not

Terraform Explorer veya Cloud Shell kullanıyorsanız kimlik doğrulamayı manuel olarak yapılandırmanız gerekmez. Sadece oturum açtığınız hesabın VPC ve ECS kaynaklarını yönetme izinlerine sahip olduğundan emin olun.

Bu konuda kimlik doğrulama için bir RAM kullanıcısının AccessKey bilgileri ortam değişkeni olarak saklanmaktadır:

  1. Alibaba Cloud hesabı kaynakları üzerinde tam yetkiye sahip olduğundan, sızan bir AccessKey yüksek güvenlik riski oluşturur. Bunun yerine bir RAM kullanıcısı AccessKey'i kullanmanızı öneririz. RAM kullanıcısı AccessKey'i oluşturma hakkında daha fazla bilgi için bkz. AccessKey çifti oluşturma.

  2. Bir RAM kullanıcısına ECS ve VPC kaynaklarını yönetme izni verirken en az ayrıcalık ilkesini uygulamanızı öneririz. Bir RAM kullanıcısına izin verme hakkında daha fazla bilgi için bkz. RAM kullanıcı izinlerini yönetme. Bu konudaki örnek kod, ECS, VPC ve vSwitch gibi kaynaklar oluşturmanızı gerektirir. Örnekleri çalıştırmak için RAM kullanıcısına aşağıdaki izinleri verebilirsiniz:


    Service


    Policy


    VPC


    Bu örnekte, sistem ilkesi AliyunVPCFullAccess seçin.


    ECS


    Bu örnekte, sistem ilkesi AliyunECSFullAccess seçin.

  3. Kimlik doğrulama bilgilerinizi saklamak için ortam değişkenleri oluşturun.

    Linux

    Önemli

    export komutu ile ayarlanan ortam değişkenleri geçicidir ve yalnızca geçerli oturum için geçerlidir. Kalıcı hale getirmek için komutu kabuğunuzun başlangıç dosyasına ekleyin.

    # Your AccessKey ID.
    export ALICLOUD_ACCESS_KEY="yourAccessKeyID"
    # Your AccessKey secret.
    export ALICLOUD_SECRET_KEY="yourAccessKeySecret"
    # The region where the resources will be deployed.
    export ALICLOUD_REGION="cn-chengdu"

    Windows

    1. Masaüstünde Bilgisayarım'a sağ tıklayın ve Type > Advanced system settings > Environment Variable > System variables/User variables yolunu izleyin.

    2. System variables veya User variables bölümünde, aşağıdaki ortam değişkenlerini oluşturmak için New düğmesine tıklayın.


      Variable


      Description


      Value


      ALICLOUD_ACCESS_KEY


      Your AccessKey ID.


      yourAccessKeyID


      ALICLOUD_SECRET_KEY


      Your AccessKey secret.


      yourAccessKeySecret


      ALICLOUD_REGION


      The region where the resources will be deployed.


      Example: cn-chengdu

İlgili Terraform kaynakları

Bu konudaki örnek kod aşağıdaki Terraform kaynaklarını kullanır.

Not

Bu eğitimde kullanılan bazı kaynaklar ücretlendirilir. Beklenmeyen ücretlerden kaçınmak için kaynaklara artık ihtiyaç duymadığınızda bunları temizleyin.

Resource

Data source

alicloud_zones: Belirtilen örnek türü için kullanılabilir alanları bulur.

Terraform yapılandırma dosyası oluşturma

Bir ECS örneği oluşturmak için gereken altyapı kaynaklarını (ECS örneği ve VPC gibi) bir main.tf dosyasında tanımlayın. Kodu Tam örnek kod bölümünden kopyalayıp yapılandırma dosyanıza yapıştırabilirsiniz.

  1. Bir yapılandırma dosyası oluşturun.

    Bu dosya, .tf uzantısıyla bitmeli ve tüm kaynak tanımlamalarınızı içermelidir.

    Linux

    # Create a working directory.
    mkdir terraform-projects && cd terraform-projects
    mkdir ecs-quickstart && cd ecs-quickstart
    # Create and edit the configuration file.
    touch main.tf && vim main.tf

    Windows

    ecs-quickstart adlı yeni bir klasör oluşturun. Klasörün içinde main.tf adlı bir Terraform yapılandırma dosyası oluşturun.

  2. Sağlayıcı yapılandırmasını tanımlayın.

    Alibaba Cloud kaynağınızın dağıtılacağı bölgeyi yapılandırın.

    # The region where the resources are located.
    variable "region" {
      default = "cn-chengdu"
    }
    provider "alicloud" {
      region = var.region
    }
  3. VPC ve vSwitch'inizi tanımlayın.

    VPC, cloud ortamında yapılandırıp yönetebileceğiniz mantıksal olarak yalıtılmış özel bir ağdır.

    variable "instance_name" {
      default = "tf-sample"
    }
    # The instance type of the ECS instance.
    variable "instance_type" {
      default = "ecs.e-c1m2.large"
    }
    # Query for availability zones that meet the specified conditions.
    data "alicloud_zones" "default" {
      available_disk_category     = "cloud_essd"
      available_resource_creation = "VSwitch"
      available_instance_type     = var.instance_type
    }
    # Create a VPC.
    resource "alicloud_vpc" "vpc" {
      vpc_name   = var.instance_name
      cidr_block = "172.16.0.0/12"
    }
    # Create a vSwitch.
    resource "alicloud_vswitch" "vsw" {
      vpc_id     = alicloud_vpc.vpc.id
      cidr_block = "172.16.0.0/21"
      zone_id    = data.alicloud_zones.default.zones.0.id
    }
  4. Güvenlik grubunu tanımlayın.

    Güvenlik grubu, ECS örneğiniz için gelen ve giden trafiği kontrol eden sanal bir güvenlik duvarı işlevi görür.

    # Create a security group.
    resource "alicloud_security_group" "default" {
      name   = var.instance_name
      vpc_id = alicloud_vpc.vpc.id
    }
    # Add an inbound rule to the security group.
    resource "alicloud_security_group_rule" "allow_tcp_22" {
      type              = "ingress"
      ip_protocol       = "tcp"
      nic_type          = "intranet"
      policy            = "accept"
      port_range        = "22/22"
      priority          = 1
      security_group_id = alicloud_security_group.default.id
      cidr_ip           = "0.0.0.0/0"
    }
  5. ECS örneğini tanımlayın.

    ECS, uygulama dağıtımı, web sitesi barındırma ve veri işleme dahil olmak üzere çeşitli senaryolar için güvenli, ölçeklenebilir ve yüksek performanslı işlem kapasitesi sağlar.

    # The image ID of the ECS instance.
    variable "image_id" {
      default = "ubuntu_18_04_64_20G_alibase_20190624.vhd"
    }
    # The public bandwidth for the ECS instance.
    variable "internet_bandwidth" {
      default = "10"
    }
    # The logon password for the ECS instance.
    variable "password" {
      default = "Test@12345"
    }
    # The number of ECS instances to create. The default value is 1.
    variable "ecs_count" {
      default = 1
    }
    # Create the ECS instance.
    resource "alicloud_instance" "instance" {
      count                      = var.ecs_count
      availability_zone          = data.alicloud_zones.default.zones.0.id
      security_groups            = alicloud_security_group.default.*.id
      password                   = var.password
      instance_type              = var.instance_type
      system_disk_category       = "cloud_essd"
      image_id                   = var.image_id
      instance_name              = var.instance_name
      vswitch_id                 = alicloud_vswitch.vsw.id
      internet_max_bandwidth_out = var.internet_bandwidth
    }
    output "public_ip" {
      value = [for i in range(var.ecs_count) : alicloud_instance.instance[i].public_ip]
    }
                  

Tam örnek kod

Not

Örnek kodu tek tıklamayla çalıştırabilirsiniz. Hata Ayıklamayı Başlat

variable "region" {
  default = "cn-chengdu"
}
provider "alicloud" {
  region = var.region
}
variable "instance_name" {
  default = "tf-sample"
}
variable "instance_type" {
  default = "ecs.e-c1m2.large"
}
data "alicloud_zones" "default" {
  available_disk_category     = "cloud_essd"
  available_resource_creation = "VSwitch"
  available_instance_type     = var.instance_type
}
resource "alicloud_vpc" "vpc" {
  vpc_name   = var.instance_name
  cidr_block = "172.16.0.0/12"
}
resource "alicloud_vswitch" "vsw" {
  vpc_id     = alicloud_vpc.vpc.id
  cidr_block = "172.16.0.0/21"
  zone_id    = data.alicloud_zones.default.zones.0.id
}
resource "alicloud_security_group" "default" {
  name   = var.instance_name
  vpc_id = alicloud_vpc.vpc.id
}
resource "alicloud_security_group_rule" "allow_tcp_22" {
  type              = "ingress"
  ip_protocol       = "tcp"
  nic_type          = "intranet"
  policy            = "accept"
  port_range        = "22/22"
  priority          = 1
  security_group_id = alicloud_security_group.default.id
  cidr_ip           = "0.0.0.0/0"
}
variable "image_id" {
  default = "ubuntu_18_04_64_20G_alibase_20190624.vhd"
}
variable "internet_bandwidth" {
  default = "10"
}
variable "password" {
  default = "Test@12345"
}
variable "ecs_count" {
  default = 1
}
resource "alicloud_instance" "instance" {
  count                      = var.ecs_count
  availability_zone          = data.alicloud_zones.default.zones.0.id
  security_groups            = alicloud_security_group.default.*.id
  password                   = var.password
  instance_type              = var.instance_type
  system_disk_category       = "cloud_essd"
  image_id                   = var.image_id
  instance_name              = var.instance_name
  vswitch_id                 = alicloud_vswitch.vsw.id
  internet_max_bandwidth_out = var.internet_bandwidth
}
output "public_ip" {
  value = [for i in range(var.ecs_count) : alicloud_instance.instance[i].public_ip]
}

Terraform komutlarını çalıştırma

Yapılandırma dosyasını oluşturduktan sonra ECS örneğini oluşturmak için Terraform komutlarını çalıştırın.

1. Terraform'u başlatma

terraform init komutu, Alibaba Cloud sağlayıcı eklentisini geçerli klasöre indirip yükler ve çeşitli kayıt dosyaları oluşturur.

Linux

terraform init

Windows

Komut İstemi'ni (cmd), açın, Terraform yapılandırma dosyalarınızı içeren dizine gidin ve başlatmak için terraform init komutunu çalıştırın.

# The configuration file is in the D:/ecs-quickstart directory.
# Switch to drive D.
d:
# Switch to the directory where the configuration file is located. Replace ecs-quickstart with your actual directory path.
cd ecs-quickstart
# Run the initialization command.
terraform init

Aşağıdaki çıktı, başlatmanın başarılı olduğunu gösterir.

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. Çalıştırma planını önizleme

Aşağıdaki işlevleri gerçekleştirmek için terraform plan komutunu çalıştırın:

  • main.tf içindeki Terraform kodunun sözdizimini doğrular.

  • Geçerli Terraform koduna göre oluşturulacak kaynakları önizler.

terraform plan

Çıktı, Terraform yapılandırma dosyasında sözdizimi hatası olmadığını gösteriyorsa kaynakları oluşturmak için terraform apply komutunu çalıştırabilirsiniz. Diğer hata mesajları görünürse, mesajlara göre Terraform yapılandırma dosyasını değiştirin.

...
Plan: 5 to add, 0 to change, 0 to destroy.

3. Yapılandırmayı uygulama

ECS örneğini ve bağımlı kaynaklarını otomatik olarak oluşturmak ve Python'u yüklemek için terraform apply komutunu çalıştırın. Oluşturma sürecinde istendiğinde, Terraform'un tanımlanan tüm kaynakları oluşturmasına izin vermek için yes değerini girin.

terraform apply

Aşağıdaki çıktı, Terraform'un kaynakları oluşturduğunu gösterir.

...
Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.
  Enter a value: yes
alicloud_vpc.vpc: Creating...
alicloud_vpc.vpc: Creation complete after 6s [id=vpc-2vcsghlpznz74XXXXXXXX]
alicloud_security_group.default: Creating...
alicloud_vswitch.vsw: Creating...
alicloud_security_group.default: Creation complete after 1s [id=sg-2vcdz6b8h9c3XXXXXXXX]
alicloud_security_group_rule.allow_tcp_22: Creating...
alicloud_security_group_rule.allow_tcp_22: Creation complete after 0s [id=sg-2vcdz6b8h9c3XXXXXXXX:ingress:tcp:22/22:intranet:0.0.0.0/0:accept:1]
alicloud_vswitch.vsw: Creation complete after 4s [id=vsw-2vc50dknug30bXXXXXXXX]
alicloud_instance.instance: Creating...
alicloud_instance.instance: Still creating... [10s elapsed]
alicloud_instance.instance: Creation complete after 15s [id=i-2vc3rf151bwcXXXXXXXX]
Apply complete! Resources: 5 added, 0 changed, 0 destroyed.
Outputs:
public_ip = [
  "4XX.XXX.XXX.XX7",
]

ECS örneğine bağlanma

Örnek oluşturulduktan sonra genel IP adresini kullanarak SSH üzerinden uzaktan bağlanabilirsiniz. Bağlantı yöntemleri hakkında daha fazla bilgi için bkz. Bağlantı yöntemlerine genel bakış.

ssh <username>@<public_ip_address>

Sonuçları doğrulama

Terraform komutu çalıştırma

Oluşturulan ECS örneği hakkında bilgileri görüntülemek için aşağıdaki komutu çalıştırabilirsiniz.

# Format: terraform state show <resource_type>.<resource_name>[index]
terraform state show alicloud_instance.instance[0]

Konsolda görüntüleme

Oluşturulan ECS örneğini görüntülemek için ECS konsoluna giriş yapabilirsiniz. Terraform kodunu çalıştırdıktan sonra Instances sayfasında tf-sample adlı bir örnek oluşturulur ve Running durumunda görünür. Örnek, Çin (Chengdu) bölgesinin A Kullanılabilirlik Alanında dağıtılır. Örnek türü ecs.e-c1m2.large (2 vCPU ve 4 GiB bellek), özel IP adresi 172.16.0.100, faturalama yöntemi kullandıkça öde ve ağ türü VPC'dir.

Kaynakları değiştirme

Yapılandırmanızı ayarlamanız gerekiyorsa yapılandırma dosyasındaki kaynak tanımlarını değiştirebilirsiniz. Örneğin, güvenlik grubuna yeni bir gelen kuralı ekleyebilirsiniz.

  1. Güvenlik grubuna 443 numaralı bağlantı noktasındaki gelen trafiğe izin veren bir kural eklemek için yapılandırma dosyanıza aşağıdaki kodu ekleyin.

    resource "alicloud_security_group_rule" "allow_tcp_443" {
      type              = "ingress"
      ip_protocol       = "tcp"
      nic_type          = "intranet"
      policy            = "accept"
      port_range        = "443/443"
      priority          = 1
      security_group_id = alicloud_security_group.default.id
      cidr_ip           = "0.0.0.0/0"
    }
  2. Değişiklikleri önizlemek için terraform plan komutunu çalıştırın. Aşağıdaki çıktı, sg-2vcdz6b8h9c3XXXXXXXX kimliğine sahip güvenlik grubuna bir güvenlik grubu kuralı ekleneceğini gösterir.

    ...
    Terraform will perform the following actions:
      # alicloud_security_group_rule.allow_tcp_443 will be created
      + resource "alicloud_security_group_rule" "allow_tcp_443" {
          + cidr_ip           = "0.0.0.0/0"
          + id                = (known after apply)
          + ip_protocol       = "tcp"
          + nic_type          = "intranet"
          + policy            = "accept"
          + port_range        = "443/443"
          + prefix_list_id    = (known after apply)
          + priority          = 1
          + security_group_id = "sg-2vcdz6b8h9c3XXXXXXXX"
          + type              = "ingress"
        }
    Plan: 1 to add, 0 to change, 0 to destroy.
  3. Değişiklikler beklendiği gibiyse değişiklikleri altyapınıza uygulamak için terraform apply komutunu çalıştırın. Terraform onay istediğinde yes yazın ve Enter tuşuna basın. Aşağıdaki mesaj, sg-2vcdz6b8h9c3XXXXXXXX kimliğine sahip güvenlik grubuna yeni bir kuralın başarıyla eklendiğini gösterir.

    ...
    Do you want to perform these actions?
      Terraform will perform the actions described above.
      Only 'yes' will be accepted to approve.
      Enter a value: yes
    alicloud_security_group_rule.allow_tcp_443: Creating...
    alicloud_security_group_rule.allow_tcp_443: Creation complete after 0s [id=sg-2vcdz6b8h9c3XXXXXXXX:ingress:tcp:443/443:intranet:0.0.0.0/0:accept:1]
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Kaynakları temizleme

Kaynaklara artık ihtiyaç duymadığınızda bunları yok etmek için aşağıdaki komutu çalıştırın.

terraform destroy

Aşağıdaki çıktı, kaynakların yok edildiğini gösterir.

...
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_security_group_rule.allow_tcp_443: Destroying... [id=sg-2vcdz6b8h9c3XXXXXXXX:ingress:tcp:443/443:intranet:0.0.0.0/0:accept:1]
alicloud_security_group_rule.allow_tcp_22: Destroying... [id=sg-2vcdz6b8h9c3XXXXXXXX:ingress:tcp:22/22:intranet:0.0.0.0/0:accept:1]
alicloud_instance.instance: Destroying... [id=i-2vc3rf151bwcXXXXXXXX]
alicloud_security_group_rule.allow_tcp_22: Destruction complete after 0s
alicloud_security_group_rule.allow_tcp_443: Destruction complete after 0s
alicloud_instance.instance: Still destroying... [id=i-2vc3rf151bwcXXXXXXXX, 10s elapsed]
alicloud_instance.instance: Destruction complete after 10s
alicloud_security_group.default: Destroying... [id=sg-2vcdz6b8h9c3XXXXXXXX]
alicloud_vswitch.vsw: Destroying... [id=vsw-2vc50dknug30bXXXXXXXX]
alicloud_security_group.default: Destruction complete after 1s
alicloud_vswitch.vsw: Destruction complete after 8s
alicloud_vpc.vpc: Destroying... [id=vpc-2vcsghlpznz74XXXXXXXX]
alicloud_vpc.vpc: Destruction complete after 6s
Destroy complete! Resources: 6 destroyed.

Referanslar

  • ECS tarafından desteklenen Resource ve Data Source türleri için bkz. Desteklenen kaynakların listesi.

  • Terraform'u yüklemeden veya yapılandırmadan Terraform kodunda hata ayıklamak için Terraform Explorer içinde Terraform kullanabilirsiniz.

  • Terraform'u yüklemeden veya yapılandırmadan Terraform komutlarını manuel olarak çalıştırmak için Terraform ile kaynak oluşturma bölümünde Terraform kullanabilirsiniz.