はじめに
今回はOracle MySQL Cloud Service(以下MySQLCS)のインスタンス作成第3弾としてTerraformを使用します。
検証でMySQLCSの起動する都度ダッシュボードから作成するのが手間を感じており、またコード管理出来る点でも、メリットは多く最近はよく利用しています。
なおMySQLCSインスタンス作成について、過去2回の記事は下記からご覧ください。
GUI編 https://blog.s-style.co.jp/2018/04/1724/
CLI(PSM)編 https://blog.s-style.co.jp/2018/06/1915/
TerraformでOracle Cloudを利用する公式ドキュメントはこちら
上記サイトをみるとOracle Cloudのプロバイダーとして下記の2つがあります。
- 【Oracle Cloud Platform】: 対象がPaaS。MySQLCSを作成する場合はこちらを利用
- 【Oracle Public Cloud】: 対象がIaaS。現状Oracle Cloud Infrastructure Classic(OCI-C)が主で次世代のOracle Cloud Infrastructure(OCI)はまだ使用出来ないようです。
それぞれの違いとして対象リソースがPaaS,IaaSとなっているイメージでしょうか
環境
今回使用した環境は下記になります。
1 2 3 4 5 6 |
$ cat /etc/centos-release CentOS Linux release 7.5.1804 (Core) $ terraform -v Terraform v0.11.7 + provider.oraclepaas v1.3.0 |
tfファイル
作成したtfファイルです。
変数に関しては別途terraform.tfvarsファイルを用意し、そちらで代入しています。
mysqlcs.tf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# 変数定義 variable "user" {} variable "pwd" {} variable "container" {} variable "idomain" {} variable "pubkey" {} variable "endpoint" {} variable "shape" {} variable "region" {} variable "ad" {} # プロバイダー設定 provider "oraclepaas" { user = "${var.user}" password = "${var.pwd}" identity_domain = "${var.idomain}" mysql_endpoint = "${var.endpoint}" } # リソース設定 resource "oraclepaas_mysql_service_instance" "instance_1" { name = "sstesta" description = "This is a simple mysql instance" ssh_public_key = "${var.pubkey}" backup_destination = "BOTH" notification_email = "${var.user}" shape = "${var.shape}" region = "${var.region}" availability_domain = "${var.ad}" backups { cloud_storage_container = "${var.container}" cloud_storage_username = "${var.user}" cloud_storage_password = "${var.pwd}" create_if_missing = "true" } mysql_configuration = { db_name = "demo_db" db_storage = 25 mysql_port = 3306 mysql_username = "root" mysql_password = "MySqlPassword_1" } } # アウトプット設定 output "ip" { value = "${oraclepaas_mysql_service_instance.instance_1.mysql_configuration.0.public_ip_address}" } |
ポイントとしてバックアップ用のストレージ・コンテナを事前に用意していなくても、【create_if_missing】をtrueにすることで、インスタンス作成と合わせて作成することができます。
ただterraform destroyで環境を削除したときに、ここで作成したストレージ・コンテナは削除されないので注意が必要です。
補足:ダッシュボードでもOCI-Cでは、インスタンス作成時にストレージを作ることが可能です。
OCIではまだ非対応のようです。
OCI-C画面
OCI画面
build
terraform applyを使用し上記ファイルからインスタンスを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$ terraform apply An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: + oraclepaas_mysql_service_instance.instance_1 id: <computed> 省略 oraclepaas_mysql_service_instance.instance_1: Still creating... (15m50s elapsed) oraclepaas_mysql_service_instance.instance_1: Creation complete after 15m53s (ID: sstesta) Apply complete! Resources: 1 added, 0 changed, 0 destroyed. Outputs: ip = 129.***.***.*** #マスクしてます。 |
本検証では16分弱でインスタンスが起動しました。
ダッシュボードからも確認
まとめ
Terraformを使用する利点として、ストレージやネットワーク含めシステム環境をまとめて作成できるという点があると思います。しかし本記事作成時には、まだOCIのNW周りは対象外となっており、その辺りは今後のアップデートに期待したいところです。
ただMySQLCSはOCIでも利用できますので、テストや検証でインスタンスが必要となる場合は利用すると便利だと思います。