この記事では、OCIのマネージドTerraform環境であるリソース・マネージャを使って、MySQL Database Serviceを作成してみたことを紹介します。
リソース・マネージャとは
Oracle Cloud Infrastructureリソースをプロビジョニングするプロセスを自動化できるOracle Cloud Infrastructureサービス
「infrastructure-as-code」モデルを使用してリソースをインストール、構成、および管理するのに役立つTerraformのマネージド環境
リソース・マネージャの機能
リソース・マネージャは以下のような特徴、機能があります(2020/11/15時点)
- インフラストラクチャの自動化と標準化、環境のレプリケーションを容易に行う
- Terraform エンジンのフルマネージドサービス
- 指定したコンパートメントのリソースをTerraform構成ファイルの生成(Resource Discovery)
- GitLabで管理されたTerraform構成ファイルからリソース・マネージャスタックの作成(構成ソース・プロバイダ)
- スタックの最後に実行された構成と実際(現在)のインフラストラクチャの状態との差分抽出(ドリフト検出)
- サンプル構成を使った環境構築
- 使用できる Terraform フォーマットは v0.11/v0.12/v0.13
以下のサンプルは Terraform v0.12 フォーマットで記載しています。
MYSQL Database Service 作成サンプル
使用している変数
- mysql_configuration_id:MYSQL Database ServiceのコンフィグレーションID
- mysql_password :管理者ユーザパスワード
- mysql_shape :MYSQL Database Serviceで利用するシェイプ
- privateSubnet_id :サブネットOCID
指定している名前
- admin_username :管理者ユーザ名(admin)
- hostname_label/display_name:ホスト名(mysql1)
そのほかはデフォルト設定を指定
resource oci_mysql_mysql_db_system export_MySQL1 {
admin_password = var.mysql_password
admin_username = "admin"
availability_domain = data.oci_identity_availability_domain.TGjA-AD-1.name
backup_policy {
is_enabled = "true"
retention_in_days = "7"
window_start_time = "00:00"
}
compartment_id = var.compartment_ocid
configuration_id = var.mysql_configuration_id
data_storage_size_in_gb = "50"
display_name = "MySQL1"
fault_domain = "FAULT-DOMAIN-1"
hostname_label = "mysql1"
maintenance {
window_start_time = "WEDNESDAY 04:22"
}
# mysql_version = "8.0.22-u2-cloud"
port = "3306"
port_x = "33060"
shape_name = var.mysql_shape
state = "ACTIVE"
subnet_id = var.privateSubnet_id
lifecycle {
ignore_changes = [admin_password, admin_username]
}
}
data oci_identity_availability_domain export_TGjA-AD-1 {
compartment_id = var.compartment_ocid
ad_number = "1"
}
サンプル環境の作成
MySQL Database Serviceを構築する例として以下の構成を作成
コンピュートインスタンスにnginxとphpをインストールし、wordpressモジュールを展開、MySQL Database ServiceにDatabaseとユーザを作成しています。
Terraform構成ファイルはgithubからダウンロード可能です。
環境構築の実行
1.Webコンソールのメニューから「リソース・マネージャ」>「スタック」を開き「スタックの作成」をクリック
2.githubから入手したtfファイルを圧縮したZIPファイルもしくはフォルダを指定してリソース・マネージャスタックを作成
3. 計画ジョブ・適用ジョブを実行
サンプルファイルの補足
予約済パブリックIPの使用
コンピュートインスタンスとロード・バランサには、それぞれ予約済パブリックIPを割り当ててみた
予約済パブリックIPの生成
resource oci_core_public_ip publicip_lb {
compartment_id = var.compartment_ocid
display_name = "lb01"
lifetime = "RESERVED"
}
コンピュートインスタンスへの割り当て
パブリックIPを割り当てるVNIC、プライベートIPのOCIDを取得し、予約済パブリックIPを割り当てる
data oci_identity_availability_domain AD-1 {
compartment_id = var.compartment_ocid
ad_number = "1"
}
data oci_core_vnic_attachments instance1_vnics {
availability_domain = data.oci_identity_availability_domain.AD-1.name
compartment_id = var.compartment_ocid
instance_id = oci_core_instance.ap1.id
}
data oci_core_vnic instance1_primary_vnic {
vnic_id = data.oci_core_vnic_attachments.instance1_vnics.vnic_attachments[0].vnic_id
}
data oci_core_private_ips instance1_ip {
vnic_id = data.oci_core_vnic.instance1_primary_vnic.id
}
resource oci_core_public_ip publicip_ap {
compartment_id = var.compartment_ocid
display_name = "ap01"
lifetime = "RESERVED"
private_ip_id = data.oci_core_private_ips.instance1_ip.private_ips[0].id
}
ロード・バランサへの割り当て
resource oci_load_balancer_load_balancer LB1 {
compartment_id = var.compartment_ocid
display_name = "LB1"
ip_mode = "IPV4"
is_private = "false"
reserved_ips {
id = oci_core_public_ip.publicip_lb.id
}
network_security_group_ids = [
oci_core_network_security_group.export_Network-Security-Group-for-AP.id,
]
shape = "100Mbps"
subnet_ids = [
oci_core_subnet.export_PublicSubnet.id,
]
}
適用ジョブログ
適用ジョブのログに、ロードバランサ、APサーバのパブリックIPアドレスとAPサーバへのsshログイン用秘密鍵ファイル内容が出力される
wordpressの初期設定
コンピュートインスタンスのパブリックIPアドレスに ブラウザで httpアクセスすることで wordpress 初期画面が表示されることを確認
http://<コンピュートインスタンスパブリックIPアドレス>/
おわりに
OCIの Terraform マネージドサービスのリソース・マネージャを使用して MySQL Database Serviceおよびそれにアクセスするコンピュートインスタンスにwordpress環境をデプロイしてみた。