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.
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.
Alibaba Cloud, yerel kurulum gerektirmeden Terraform komutlarını çalıştırabileceğiniz iki çevrimiçi ortam sunar:
Terraform Explorer: Bu konudaki örnek kodu çalıştırmak için Hata Ayıklamayı Başlat seçeneğine tıklayın.
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.
İşletim sisteminize uygun paketi indirmek için Terraform web sitesine gidin.
-
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/binWindows
Paketi çıkarın. Örneğin, hedef dizin D:\tool\terraform olabilir.
Masaüstünde Bilgisayarım'a sağ tıklayın ve yolunu izleyin.
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.
-
Yol yapılandırmasını doğrulamak için
terraformkomutunu çalıştırın.terraformKomut 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.
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:
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.
-
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. -
Kimlik doğrulama bilgilerinizi saklamak için ortam değişkenleri oluşturun.
Linux
Önemliexportkomutu 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
Masaüstünde Bilgisayarım'a sağ tıklayın ve yolunu izleyin.
-
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.
Bu eğitimde kullanılan bazı kaynaklar ücretlendirilir. Beklenmeyen ücretlerden kaçınmak için kaynaklara artık ihtiyaç duymadığınızda bunları temizleyin.
Resource
alicloud_vpc: Bir VPC oluşturur.
alicloud_vswitch: Bir vSwitch oluşturur.
alicloud_security_group: Bir güvenlik grubu oluşturur.
alicloud_security_group_rule: Bir güvenlik grubu kuralı oluşturur.
alicloud_instance: Bir ECS örneği oluşturur.
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.
-
Bir yapılandırma dosyası oluşturun.
Bu dosya,
.tfuzantı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.tfWindows
ecs-quickstartadlı yeni bir klasör oluşturun. Klasörün içinde main.tf adlı bir Terraform yapılandırma dosyası oluşturun. -
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 } -
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 } -
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" } -
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
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.tfiç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.
-
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" } -
Değişiklikleri önizlemek için
terraform plankomutunu çalıştırın. Aşağıdaki çıktı,sg-2vcdz6b8h9c3XXXXXXXXkimliğ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. -
Değişiklikler beklendiği gibiyse değişiklikleri altyapınıza uygulamak için
terraform applykomutunu çalıştırın. Terraform onay istediğindeyesyazın ve Enter tuşuna basın. Aşağıdaki mesaj,sg-2vcdz6b8h9c3XXXXXXXXkimliğ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
ResourceveData Sourcetü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.