Terraform による ECS インスタンスのワンクリック デプロイメント

Terraform の概要

HashiCorp Terraform は、コードを使用して IT リソースを管理および保守できる IT インフラストラクチャ自動化オーケストレーション ツールです。Terraform のコマンド ライン インターフェイス (CLI) は、Alibaba Cloud またはその他のサポートされているクラウドに構成ファイルを展開してバージョン管理するための簡単なメカニズムを提供します。仮想マシン、ストレージ アカウント、ネットワーク インターフェイスなどのクラウド リソースのトポロジを記述する構成ファイルにインフラストラクチャを書き込みます。

Terraform は、プロバイダーを通じて新しいインフラストラクチャをサポートする拡張性の高いツールです。Terraform を使用すると、シンプルなテンプレート言語を簡単に使用して、Alibaba Cloud 上でクラウド インフラストラクチャを定義、プレビュー、デプロイできます。Terraform を使用して、ECS、VPC、RDS、SLB、およびその他のリソースを作成、変更、削除できます。

Terraform のインストールと構成

Cloud Shell での Terraform の使用

Alibaba Cloud Cloud Shell は、
運用と保守を支援する無料の製品で、Terraform コンポーネントがプリインストールされ、認証情報が設定されています。したがって、Terraform コマンドを Cloud Shell で直接実行できます。

ブラウザを開いて、Cloud Shell アドレス https://shell.aliyun.com にアクセスします。

画像

Terraform をローカルにインストールして構成する

Terraform 公式 Web サイトにログインして、オペレーティング システム用のパッケージをダウンロードしてインストールします。

コマンドを実行すると、以下に示すように、使用可能な Terraform オプションのリストが表示され、インストールが完了したことが示されます。

username:~$ terraform
Usage: terraform [-version] [-help] <command> [args]

ID 認証
情報を保存する環境変数を作成します。

export ALICLOUD_ACCESS_KEY="LTAIUrZCw3********"
export ALICLOUD_SECRET_KEY="zfwwWAMWIAiooj14GQ2*************"
export ALICLOUD_REGION="cn-beijing"

Terraform スクリプトを作成する

ここでは、Cloud Shell で Terraform を使用することを選択し、関連するディレクトリを作成します。

mkdir /home/shell/terraform_ecs
cd /home/shell/terraform_ecs

Terraform スクリプトは次のとおりです。

variable "profile" {
  default = "default"
}

#Region
variable "region" {
  default = "cn-shanghai"
}

#将公钥拷贝到ECS上
locals {
  user_data_ecs = <<TEOF
#!/bin/bash
cp ~/.ssh/authorized_keys /root/.ssh
TEOF
}

provider "alicloud" {
  region  = var.region
  profile = var.profile
}

#VPC
module "vpc" {
  source  = "alibaba/vpc/alicloud"
  region  = var.region
  profile = var.profile
  vpc_name = "ecs_terraform"
  vpc_cidr          = "10.10.0.0/16"
  availability_zones = ["cn-shanghai-b"]
  vswitch_cidrs      = ["10.10.1.0/24"]
}

#安全组
module "security_group" {
  source  = "alibaba/security-group/alicloud"
  profile = var.profile
  region  = var.region
  vpc_id  = module.vpc.this_vpc_id

  ingress_cidr_blocks = ["0.0.0.0/0"]
  ingress_ports = [22]

  ingress_with_cidr_blocks_and_ports = [
    {
      protocol    = "tcp"
      priority    = 1
      description = "ingress for ssh"
    }
  ]
}

#ECS
module "ecs" {
  source  = "alibaba/ecs-instance/alicloud"
  profile = var.profile
  region  = var.region
  internet_max_bandwidth_out  = 1
  associate_public_ip_address = true

  name                        = "terraform_ecs"
  image_id                    = "centos_7_9_x64_20G_alibase_20201228.vhd"
  instance_type               = "ecs.t5-c1m2.xlarge"  #实例规格
  vswitch_id                  = module.vpc.this_vswitch_ids.0
  security_group_ids          = [module.security_group.this_security_group_id]

  system_disk_size     = 30
  number_of_instances = 3  #实例数量

  user_data = local.user_data_ecs
}

#设置本地~/.ssh/config的ssh信息
resource "local_file" "ssh_config" {
    content     = <<EOF
%{ for ip in module.ecs.this_public_ip }
Host ecs${index(module.ecs.this_public_ip, ip) + 1}
    StrictHostKeyChecking no
    HostName ${ip}
    User terraform
%{ endfor }
EOF
    filename = "/home/shell/.ssh/config"
}

#屏幕输出提示信息
resource "local_file" "info" {
    content     =  <<EOF
登录服务器:
%{ for ip in module.ecs.this_public_ip }
ssh root@ecs${index(module.ecs.this_public_ip, ip) + 1}%{ endfor }

公网 IP 地址(用于 ssh 登陆):
%{ for ip in module.ecs.this_public_ip }
ecs${index(module.ecs.this_public_ip, ip) + 1}:    ${ip}%{ endfor }

内网 IP 地址(用于集群内部通信,没有端口限制):
%{ for ip in module.ecs.this_private_ip }
ecs${index(module.ecs.this_private_ip, ip) + 1}:    ${ip}%{ endfor }

销毁服务器:
cd /home/shell/terraform_ecs
terraform destroy --auto-approve
EOF
    filename = "/home/shell/terraform_ecs/readme.txt"
}

output "服务器信息" {
   value = <<EOF

登录服务器:
%{ for ip in module.ecs.this_public_ip }
ssh root@ecs${index(module.ecs.this_public_ip, ip) + 1}%{ endfor }

公网 IP 地址(用于 ssh 登录):
%{ for ip in module.ecs.this_public_ip }
ecs${index(module.ecs.this_public_ip, ip) + 1}:    ${ip}%{ endfor }

内网 IP 地址(用于集群内部通信,没有端口限制):
%{ for ip in module.ecs.this_private_ip }
ecs${index(module.ecs.this_private_ip, ip) + 1}:    ${ip}%{ endfor }

销毁服务器:
cd /home/shell/terraform_ecs
terraform destroy --auto-approve

查看以上信息:
cat /home/shell/terraform_ecs/readme.txt

EOF
}

次のコマンドを実行して ECS を起動します。

terraform init #安装相关module
terraform apply --auto-approve #创建ECS

作成が成功すると、次の出力が表示されます。

Apply complete! Resources: 11 added, 0 changed, 0 destroyed.

Outputs:

服务器信息 = 
登录服务器:

ssh root@ecs1
ssh root@ecs2
ssh root@ecs3

公网 IP 地址(用于 ssh 登录):

ecs1:    47.117.170.15
ecs2:    47.117.172.214
ecs3:    47.117.152.20

内网 IP 地址(用于集群内部通信,没有端口限制):

ecs1:    10.10.1.151
ecs2:    10.10.1.152
ecs3:    10.10.1.153

销毁服务器:
cd /home/shell/terraform_ecs
terraform destroy --auto-approve

查看以上信息:
cat /home/shell/terraform_ecs/readme.txt

作成された ECS を表示します。

画像

ECS にログインします。

#脚本已经将在Cloud shell的公钥传到ECS上了,并且在~/.ssh/config配置了登录信息
ssh root@ecs1

公式ドキュメント:

Terraform レジストリ

Terraform Alibaba Cloud モジュール · GitHub

おすすめ

転載: blog.csdn.net/GUDUzhongliang/article/details/131822967