OCI には、Terraform プロバイダー(※1)機能があり、Terraform を利用して各種サービスの操作ができます。MySQL Database Service もTerraform プロバイダーに対応しています(※2)。
この記事では、Terraform を利用して、MySQL Database Service (以下、MDS)を作成する方法に関して、記載しています。
以下の事前準備が完了していることを前提に記載しています。
- OCI アカウントを作成済(※3)
- OCI コンピュートインスタンスを作成済(※4)
- OCI CLI をコンピュートインスタンスへインストールし、設定済(※5)
- Terraform をコンピュートインスタンスへインストール済(※6)
- Terraformプロバイダをコンピュートインスタンスへインストールし、設定済(※7)
- Terraformプロバイダ用の環境変数設定済(※8)
※1 https://docs.oracle.com/ja-jp/iaas/Content/API/SDKDocs/terraform.htm
※2 https://registry.terraform.io/providers/oracle/oci/latest/docs/resources/mysql_mysql_db_system
※3 https://docs.oracle.com/ja-jp/iaas/Content/GSG/Concepts/get-account.htm
※4 https://docs.oracle.com/ja-jp/iaas/Content/Compute/Concepts/computeoverview.htm
※5 https://docs.oracle.com/ja-jp/iaas/Content/API/Concepts/cliconcepts.htm
※6 https://docs.oracle.com/ja-jp/iaas/developer-tutorials/tutorials/tf-provider/01-summary.htm
※7 https://docs.oracle.com/ja-jp/iaas/Content/API/SDKDocs/terraforminstallation.htm
※8 https://docs.oracle.com/ja-jp/iaas/Content/API/SDKDocs/terraformproviderconfiguration.htm#environmentVariables__settingenvironmentvariablesinlinux
Terraformプロバイダ用の環境変数設定ドキュメントには、リージョンの環境変数に関しての記載がありませんでしたが、MDSを作成する上で必要な設定になりますので、毎回入力するのは面倒なので、先に環境変数にいれておきます。
shell > vi ~/.bash_profile
export TF_VAR_region="リージョン名" この変数を追加します。例えば、ap-tokyo-1、ap-osaka-1、us-ashburn-1など。
shell > source ~/.bash_profile
最小設定でMDS インスタンスを作成してみます
tf ファイルのサンプルです。
構成ファイルは、シェイプに紐づくデフォルトが利用されます。
variable "tenancy_ocid" {
}
variable "user_ocid" {
}
variable "fingerprint" {
}
variable "private_key_path" {
}
variable "region" {
}
variable "compartment_ocid" {
}
provider "oci" {
region = var.region
tenancy_ocid = var.tenancy_ocid
user_ocid = var.user_ocid
fingerprint =var.fingerprint
private_key_path = var.private_key_path
}
resource "oci_mysql_mysql_db_system" "test_mysql_db_system" {
admin_username = "(MySQLの管理者名)"
admin_password = "(MySQLの管理者パスワード)"
availability_domain = "(AD名)" (例えば、EOuL:US-ASHBURN-AD-1など)
compartment_id = "(利用するコンパートメントのOCID)"
shape_name = "(シェイプ名)" (例えば、MySQL.VM.Standard.E3.1.8GBなど)(MDSで利用したいシェイプ(※9)を設定します)
subnet_id = "(サブネットのOCID)" (事前に作成しておきます)
data_storage_size_in_gb = "(ストレージサイズ)"
}
※9(MDS で利用可能なシェイプ一覧)https://docs.oracle.com/ja-jp/iaas/mysql-database/doc/supported-shapes.html#GUID-E2A83218-9700-4A49-B55D-987867D81871
コンピュートインスタンスに適当な作業ディレクトリを作成し、上記の create_mds.tf を保存します。
その後、以下のコマンドを実行します。
shell > terraform init
shell > terraform plan
shell > terraform apply
実行プランが表示された後、確認を求められますので、[yes]を入力します。
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 を入力します。
処理中は以下のメッセージが表示されていきます。
oci_mysql_mysql_db_system.test_mysql_db_system: Creating...
oci_mysql_mysql_db_system.test_mysql_db_system: Still creating... [10s elapsed]
...
oci_mysql_mysql_db_system.test_mysql_db_system: Creation complete after XXmXXs [id=作成したDBシステムのOCID]
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
これで作成完了です。
不要になれば、削除します。
shell > terraform destroyed
実行プランが表示された後、確認を求められますので、[yes]を入力します。
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 を入力します。
処理中は以下のメッセージが表示されていきます。
oci_mysql_mysql_db_system.test_mysql_db_system: Destroying... [id=削除対象のDBシステムのOCID]
oci_mysql_mysql_db_system.test_mysql_db_system: Still destroying... [id=削除対象のDBシステムのOCID, 10s elapsed]
...
oci_mysql_mysql_db_system.test_mysql_db_system: Destruction complete after XmXXs
Destroy complete! Resources: 1 destroyed.
これで削除完了です。
カスタム構成ファイルもTerraform から作成してみます
Terraform プロバイダー Version 4.90.0から作成可能になりました。
例えば、以下のように設定します。
MDS のデフォルトタイムゾーンはUTCですが、time_zoneを変更して、日本時間に変更しています。
variable "tenancy_ocid" {
}
variable "user_ocid" {
}
variable "fingerprint" {
}
variable "private_key_path" {
}
variable "region" {
}
variable "compartment_ocid" {
}
provider "oci" {
region = var.region
tenancy_ocid = var.tenancy_ocid
user_ocid = var.user_ocid
fingerprint =var.fingerprint
private_key_path = var.private_key_path
}
resource "oci_mysql_mysql_configuration" "test_mysql_configuration" {
compartment_id = "(利用するコンパートメントのOCID)"
shape_name = "(シェイプ名)" このカスタム構成ファイルを使用したいDBシステムで利用している(する)シェイプを指定します。
description = "(カスタム構成ファイルの説明)"
display_name = "(カスタム構成ファイル名)"
variables {
time_zone = "+9:00"
他にも設定したい場合は、ここに追加します。設定可能なオプションは、※10に記載されています。
}
}
※10 (MDS の構成変数) https://docs.oracle.com/ja-jp/iaas/mysql-database/doc/configuration-variables.html#MYAAS-GUID-6C4552B2-0BE1-4F48-A571-424F78840881
Terraformプロバイダのサンプルファイルから作成してみます
Terraformプロバイダをインストールすると、MDS 用のサンプルファイルもインストールされています。
必要な部分だけを変更するなり、不要な部分をコメントアウトするなりして利用することができます。
サンプルの内容としては、仮想クラウド・ネットワークの作成、MDS のカスタム構成ファイルの作成、MDS の作成(デフォルト構成ファイル利用とカスタム構成ファイルを利用の2パターン)、初回フルバックアップの作成が含まれています。
github のページは、以下になります。
https://github.com/oracle/terraform-provider-oci/tree/master/examples/mysql
Terraformプロバイダのサンプルをそのまま利用して、MDS に必要なものをすべて自動で作成してみます。
それを作業用ディレクトリにコピーします。
shell > mkdir mds_test
shell > cd mds_test
shell > cp /usr/share/doc/terraform-provider-oci-4.100.0/examples/zips/mysql.zip .
shell > unzip mysql.zip
作成していきます。
shell > terraform init
shell > terraform plan
shell > terraform apply
実行プランが表示された後、確認を求められますので、[yes]を入力します。
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 を入力します。
実行結果が表示されていきます。
oci_core_vcn.test_vcn: Creating...
oci_mysql_mysql_configuration.test_mysql_configuration: Creating...
oci_mysql_mysql_configuration.test_mysql_configuration: Creation complete after Xs [id=作成したカスタム構成のOCID]
oci_core_vcn.test_vcn: Creation complete after Xs [id=作成した仮想ネットワークのOCID]
oci_core_subnet.test_subnet: Creating...
oci_core_subnet.test_subnet: Creation complete after Xs [id=作成したサブネットのOCID]
oci_mysql_mysql_db_system.test_mysql_backup_db_system: Creating...
oci_mysql_mysql_db_system.test_mysql_backup_db_system: Creation complete after XXmXXs [id=作成したDBシステムのOCID]
oci_mysql_mysql_backup.test_mysql_backup: Creating...
oci_mysql_mysql_backup.test_mysql_backup: Creation complete after XmXXs [id=作成したフルバックアップのOCID]
oci_mysql_mysql_db_system.test_mysql_db_system: Creating...
oci_mysql_mysql_db_system.test_mysql_db_system: Creation complete after XXmXXs [id=作成したDBシステムのOCID(Terraformから作成したカスタム構成ファイルを利用しているDBシステムです)]
Apply complete! Resources: 6 added, 0 changed, 0 destroyed.
Outputs:
configuration_id = "作成したカスタム構成のOCID"
これで作成完了です。
作成したリソースが不要になれば、Terraform コマンドですべて削除できます。
shell > terraform destroy
$ terraform destroy
実行プランが表示された後、確認を求められますので、[yes]を入力します。
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:
実行結果が表示されていきます。
oci_mysql_mysql_db_system.test_mysql_db_system: Destroying... [id=削除対象のDBシステムのOCID(カスタム構成ファイルを利用して作成したDBシステム)]
oci_mysql_mysql_db_system.test_mysql_db_system: Destruction complete after XmXXs
oci_mysql_mysql_backup.test_mysql_backup: Destroying... [id=削除対象のフルバックアップのOCID]
oci_mysql_mysql_configuration.test_mysql_configuration: Destroying... [id=削除対象のカスタム構成ファイルのOCID]
oci_mysql_mysql_configuration.test_mysql_configuration: Destruction complete after Xs
oci_mysql_mysql_backup.test_mysql_backup: Destruction complete after XXs
oci_mysql_mysql_db_system.test_mysql_backup_db_system: Destroying... [id=削除対象のDBSystemのOCID]
oci_mysql_mysql_db_system.test_mysql_backup_db_system: Destruction complete after XmXXs
oci_core_subnet.test_subnet: Destroying... [id=削除対象のサブネットのOCID]
oci_core_subnet.test_subnet: Destruction complete after Xs
oci_core_vcn.test_vcn: Destroying... [id=削除対象の仮想ネットワークのOCID]
oci_core_vcn.test_vcn: Destruction complete after Xs
Destroy complete! Resources: 6 destroyed.
これで削除完了です。