TerraformがAlibaba Cloud ECSのシステムディスク変更に対応した

はじめまして。エンジニアの森(@mosuke5)です。
テックブログでの初投稿です。
Terraformのバージョンアップで、Alibaba Cloudにとって便利になった、システムディスクの変更機能についてご紹介します。

Alibaba CloudでのTerraform対応について

SBクラウドが日本サイトを運用しているAlibaba Cloudですが、
実はあのHashicorp製 Terraformをサポートしています。Alibaba CloudでのTerraformの使い方などはぜひ以下の記事を見てみてください。

Alibaba Cloud 日本リージョンがTerraformに対応したので試した

さて、今月リリースした、Terraform v0.98から、ECS(仮想サーバサービス)のシステムディスクの変更の機能が加わり、Alibaba Cloudでの使い勝手がかなりよくなってきました。

システムディスクの変更機能について

Alibaba Cloud ECSでは既存のインスタンスのシステムディスク(イメージ)を差し替える(変更する)ことができます。
この機能がTerraformでも利用できるようになりました。

provider/alicloud: Add the function of replacing ecs instance’s system disk

もう少し具体的に言うと、例えば、CentOSで動かしていたインスタンスをUbuntuに変更できるということです。
CentOSからUbuntuへの変更では実用性はないですが、MySQL5.6がインストールされたイメージからMySQL5.7がインストールされたイメージに変更できるということです。
これって何が嬉しいの?という部分も含めて説明していきます。

システムディスク変更機能を試してみる

実際のTerraformの動作を確認してみます。
今回の事例ではわかりやすいように、CentOSイメージからUbuntuのイメージへの変更を行ってみます。

CentOS7.3のECSを作成

次の通り、TerraformでCentOS7.3のイメージのECSを作成します。
全体のテンプレートファイルはこちらからからご確認ください。

# ECSの作成
resource "alicloud_instance" "web" {
  instance_name = "terraform-ecs"
  availability_zone = "${var.zone}"
  image_id = "centos_7_3_64_40G_base_20170322.vhd"  # ←OSはCentOS
  instance_type = "ecs.n4.small"
  io_optimized = "optimized"
  system_disk_category = "cloud_efficiency"
  security_groups = ["${alicloud_security_group.sg.id}"]
  vswitch_id = "${alicloud_vswitch.vsw.id}"
}

Terraformを実行し、以下画像のようにCentOSのECSインスタンスが作られました。
わかりづらいですが、アイコンがCentOSです。

Ubuntu16.04にシステムディスクを差し替える

続いて、上で作ったECSインスタンスのイメージをubuntu16.04に変更して、terraformを実行していきます。

resource "alicloud_instance" "web" {
  instance_name = "terraform-ecs"
  availability_zone = "${var.zone}"
  image_id = "ubuntu_16_0402_64_40G_base_20170222.vhd"  # ←ここをUbuntuに変更します
  instance_type = "ecs.n4.small"
  io_optimized = "optimized"
  system_disk_category = "cloud_efficiency"
  security_groups = ["${alicloud_security_group.sg.id}"]
  vswitch_id = "${alicloud_vswitch.vsw.id}"
}
$ terraform plan -var-file="terraform.tfvars"
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.

~ alicloud_instance.web
image_id: "centos_7_3_64_40G_base_20170322.vhd" => ubuntu_16_0402_64_40G_base_20170222.vhd"

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

$ terraform apply -var-file="terraform.tfvars"
alicloud_security_group.sg: Refreshing state... (ID: sg-6weghtxe7qmo8eoldr1g)
alicloud_instance.web: Refreshing state... (ID: i-6weals3dn7u0ucyabqor)
alicloud_security_group_rule.allow_http: Refreshing state... (ID: sg-6weghtxe7qmo8eoldr1g:ingress:tcp:80/80:intranet)
alicloud_instance.web: Modifying... (ID: i-6weals3dn7u0ucyabqor)
image_id: "centos_7_3_64_40G_base_20170322.vhd" => "ubuntu_16_0402_64_40G_base_20170222.vhd"
alicloud_instance.web: Still modifying... (ID: i-6weals3dn7u0ucyabqor, 10s elapsed)
alicloud_instance.web: Still modifying... (ID: i-6weals3dn7u0ucyabqor, 20s elapsed)
alicloud_instance.web: Still modifying... (ID: i-6weals3dn7u0ucyabqor, 30s elapsed)
alicloud_instance.web: Still modifying... (ID: i-6weals3dn7u0ucyabqor, 40s elapsed)
alicloud_instance.web: Modifications complete (ID: i-6weals3dn7u0ucyabqor)

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

Terraformを実行すると、ECSインスタンスは一度停止した後、Ubuntuに変更され起動してきました。

本機能によるメリット

システムディスクの変更がTerraformでできるようになるとどんなことが嬉しいのでしょうか。
個人的に感じているメリットをご紹介します。

サーバ情報を変更することなくイメージを変更できる(デプロイに利用)

この機能が入る前は、インスタンスのイメージを変更する際には、サーバの作り直しが必要でした。
Terraform上の操作で言うと、新しいサーバリソースを追加する必要があるため、リソース名も変更されます。
グローバルIPアドレスはEIPを利用することで固定できますがパブリックIPは変わってしまいます。このように運用には現実的ではない状況でした。
この機能が実装されることにより、リソース名もIPアドレスも変更することなく簡単にイメージを変更できます。
ケースバイケースではありますが、デプロイでも活用できると思います。

サブスクリプションサーバの管理がしやすくなる

Alibaba Cloudではサブスクリプションでサーバを購入できる特徴をもっています。
ただし、サブスクリプションで購入したサーバは期限がくるまで削除することはできず、もしサーバの作り直しをしたい場合には、システムディスクの差し替えが必要でした。

そのため、システムディスクの変更機能がないTerraformは、今までサブスクリプションサーバとの相性は非常に悪いものでした。
システムディスクの変更機能により、Terraformでも十分にサブスクリプションサーバを管理できるようになったことはとても大きなメリットと感じています。

さいごに

Alibaba CloudはTerraformを始めとするオープンソースの開発も力を入れていることは注目ポイントです。
また、Alibaba CloudでのTerraformサンプル集も作って公開していますのでこちらもぜひ参考にしてください。
Github:mosuke5/terraform_for_alibabacloud_examples

この記事をシェアする