※ 本記事は、Julien TESTUTによる”Using Terraform with OCI GoldenGate“を翻訳したものです。

2023年7月13日


Terraformは、クラウドおよびオンプレミスのリソース作成を簡単に定義および自動化できる、最も一般的なInfrastructure as Code (IaC)ツールです。幸いなことに、OCI GoldenGateオブジェクトを含むOCIリソースと対話するTerraformプロバイダをOracle Cloud Infrastructure(OCI)は提供しています。この記事では、Terraform OCIプロバイダを使用して、デプロイメントと複数の接続の作成、接続の割当ておよびデプロイメント・バックアップの作成を定義および自動化する方法について確認します。

OCIコンソール開発者ツール

OCIコンソールには、組込みのコード・エディタとクラウド・シェルが付属しています。Terraformスクリプトの記述と実行の両方に使用しました。OCIでTerraformを活用する最も簡単な方法である可能性があります。コード・エディタまたはクラウド・シェルにアクセスするには、Oracle Cloudコンソールにログインし、リージョンの横にある「開発者ツール」アイコンをクリックし、「コード・エディタ」または「クラウド・シェル」を選択します。

OCI Console Developer Tools

Oracle Cloudコンソールの下部にウィンドウが開き、必要な環境がロードされます。初回接続時およびしばらく使用していないときには、数分かかります。
OCI Code Editor and Cloud Shell
開始するには、コード・エディタで新しいディレクトリを作成して、Terraformファイルを格納します。「Explorer」をクリックし、ホーム・ディレクトリを検索し、「More Actions」をクリックして、「New Folder」を選択し、名前を指定します。
OCI Code Editor
新しく作成したフォルダを右クリックし、「New File」を選択します。main.tfという名前を付けます。これには、OCIリソースのメイン構成が含まれます。
OCI Code Editor - New File
main.tfファイルの先頭に次のコード・ブロックを追加して、最小のTerraformバージョンおよびOCIプロバイダ・バージョンを指定します:

// terraform version and providers
terraform {
  required_version = ">= 0.12.0"
  required_providers {
    oci = {
      source = "oracle/oci"
      version = ">= 5.0.0"
    }
  }
}

別の新しいファイルvariables.tfを作成し、空白のままにします。このファイルには、すべての変数値が格納されます。

OCI GoldenGateデプロイメントの作成

Terraformを使用したデプロイメントの作成は、oci_golden_gate_deploymentリソースを使用して行われます。このリソースには、いくつかの必須パラメータがあります:

  • compartment_id: デプロイメントが作成されるコンパートメントのOCID
  • cpu_core_count: このデプロイメントで使用可能にするOCPUの最小数
  • deployment_type: デプロイメントのタイプ (DATABASE_ORACLE, DATABASE_MYSQL, DATABASE_POSTGRESQL, DATABASE_MICROSOFT_SQLSERVER または BIGDATA)
  • display_name: OCIコンソールに表示されるデプロイメントの名前
  • is_auto_scaling_enabled: 自動スケーリングを有効にするにはtrueに設定し、それ以外の場合はfalseに設定
  • license_model: デプロイメント・ライセンス・タイプ (LICENSE_INCLUDED or BRING_YOUR_OWN_LICENSE)
  • subnet_id: 参照されているサブネットのOCID
  • is_public: デプロイメントへのパブリック・アクセスを有効にするにはtrueに設定し、それ以外の場合はfalseに設定
  • admin_password: GoldenGateデプロイメント・コンソールのユーザー名に関連付けられたパスワード
  • admin_username: GoldenGateデプロイメント・コンソールのユーザー名
  • deployment_name: GoldenGateデプロイメント名

main.tfにパラメータの値を設定するかわりに、変数を使用して設定し、variables.tfにその値を指定します。

resource "oci_golden_gate_deployment" "ggs_deployment" {
    compartment_id = var.compartment_id
    cpu_core_count = var.deployment_cpu_core_count
    deployment_type = var.deployment_deployment_type
    display_name = var.deployment_display_name
    is_auto_scaling_enabled = var.deployment_is_auto_scaling_enabled
    license_model = var.deployment_license_model
    subnet_id = var.deployment_subnet_id
    is_public = var.deployment_is_public
    ogg_data {
        admin_password = var.deployment_ogg_data_admin_password
        admin_username = var.deployment_ogg_data_admin_username
        deployment_name = var.deployment_name
    }
}

次に、variables.tfで変数とその値を定義します。下の「xxxxxx」をテナンシに一致する値に置き換えます。

# Variables
# Please fill in the xxxxxx with your account values

variable "compartment_id" {
  description = "OCID of the compartment in which the deployment will be created"
  default = "ocid1.compartment.oc1..xxxxxx"
}

variable "deployment_cpu_core_count" {
  description = "minimum number of OCPUs for this deployment"
  default = "2"
}

variable "deployment_deployment_type" {
  description = "deployment type: DATABASE_ORACLE, DATABASE_MYSQL, DATABASE_POSTGRESQL, DATABASE_MICROSOFT_SQLSERVER, or BIGDATA"
  default = "DATABASE_ORACLE"
}

variable "deployment_display_name" {
  description = "deployment display name"
  default = "OCI GoldenGate Deployment"
}

variable "deployment_is_auto_scaling_enabled" {
  description = "deployment autoscaling: true or false"
  default = "false"
}

variable "deployment_license_model" {
  description = "deployment license type: LICENSE_INCLUDED or BRING_YOUR_OWN_LICENSE"
  default = "LICENSE_INCLUDED"
}

variable "deployment_subnet_id" {
  description = "OCID of the subnet used by deployment"
  default = "ocid1.subnet.oc1.xxxxxx"
}

variable "deployment_is_public" {
  description = "Enable GoldenGate console public access: true or false"
  default = "true"
}

variable "deployment_ogg_data_admin_password" {
  description = "admin password for the deployment"
  default = "xxxxxx"
  sensitive = true
}

variable "deployment_ogg_data_admin_username" {
  description = "admin username for the deployment"
  default = "oggadmin"
}

variable "deployment_name" {
  description = "name of the deployment"
  default = "ocigginstance"
}

.tfファイルを保存します。Terraformスクリプトは、この記事全体を通して、コード・エディタのCloud Shellまたは新しいターミナルでいつでもテストできます。

  • tfファイルを格納するディレクトリに移動
  • terraform initの実行
  • その後、terraform validateを実行して、ファイルが有効であることを確認
  • 最後に、terraform applyを実行してOCIでリソースを作成

Terraform scripts for OCI GoldenGate

OCI GoldenGate接続の作成

次に、Autonomous Transaction Processing (ATP)データベースへの接続を作成します。oci_golden_gate_connectionリソースを使用します。このリソースには、Oracleデータベースの複数の必須パラメータがあります。:

  • compartment_id: 接続が作成されるコンパートメントのOCID
  • connection_type: 接続タイプ: ORACLE, GOLDENGATE, KAFKA, KAFKA_SCHEMA_REGISTRY, MYSQL, JAVA_MESSAGE_SERVICE, MICROSOFT_SQLSERVER, OCI_OBJECT_STORAGE, AZURE_DATA_LAKE_STORAGE, POSTGRESQL, AZURE_SYNAPSE_ANALYTICS, SNOWFLAKE, AMAZON_S3, HDFS, ORACLE_NOSQL または MONGODB (新しいOCI GoldenGateリリースで進化するリスト)
  • display_name: OCIコンソールでの接続の名前
  • technology_type: ORACLE接続タイプのテクノロジ・タイプ: AMAZON_RDS_ORACLE, OCI_AUTONOMOUS_DATABASE, ORACLE_DATABASE, ORACLE_EXADATA
  • description: 接続の説明
  • username: Oracleデータベース・ユーザー名
  • password: Oracleデータベース・ユーザー名のパスワード

この接続では、ATPインスタンスのOCIDを参照して、OCI GoldenGateが接続するウォレットを自動的にフェッチするようにします。次のパラメータを追加します。:

  • database_id: 参照されるデータベースのOCID

main.tfのこの接続のコード・ブロックを次に示します:

resource "oci_golden_gate_connection" "atp_connection" {
    compartment_id = var.compartment_id
    connection_type = var.oracle_connection_type
    display_name = var.atp_connection_display_name
    technology_type = var.oracle_technology_type
    
    database_id = var.atp_db_id
    description = var.atp_connection_description
    username = var.atp_connection_username
    password = var.atp_connection_password
}

variables.tfの対応する変数:

variable "oracle_connection_type"{
  description = "Connection type: ORACLE, GOLDENGATE, KAFKA, KAFKA_SCHEMA_REGISTRY, MYSQL, JAVA_MESSAGE_SERVICE, MICROSOFT_SQLSERVER, OCI_OBJECT_STORAGE, AZURE_DATA_LAKE_STORAGE, POSTGRESQL, AZURE_SYNAPSE_ANALYTICS, SNOWFLAKE, AMAZON_S3, HDFS, ORACLE_NOSQL, or MONGODB"
  default = "ORACLE"
}

variable "atp_connection_display_name"{
  description = "connection display name"
  default = "ATP_Connection"
}

variable "oracle_technology_type"{
  description = "Technology type for ORACLE connection type: AMAZON_RDS_ORACLE, OCI_AUTONOMOUS_DATABASE, ORACLE_DATABASE, ORACLE_EXADATA"
  default = "OCI_AUTONOMOUS_DATABASE"
}

variable "atp_db_id"{
  description = "OCID of ATP instance"
  default = "ocid1.autonomousdatabase.oc1.xxxxxx"
}

variable "atp_connection_description"{
  description = "ATP connection description"
  default = "Connection to ATP Instance"
}

variable "atp_connection_username"{
  description = "DB username for ATP"
  default = "ggadmin"
}

variable "atp_connection_password"{
  description = "DB password for ATP"
  default = "xxxxxx"
  sensitive = true
}

サンプル・コード(main.tf、variables.tf)には、OCIDを参照せずにAutonomous Data Warehouseインスタンスへの接続を作成する例も含まれています。ウォレットをダウンロードして、接続の作成時に使用する必要があります。

デプロイメントへの接続の割当て

接続は、デプロイメントの1つに割り当てられると、デプロイメントでのみ使用できます。oci_golden_gate_connection_assignmentリソースは、接続とデプロイメント間のアソシエーションを定義するために使用されます。次のパラメータが必要です。:

  • connection_id: 接続のOCID
  • deployment_id: デプロイメントのOCID

main.tfの接続割当てのコード・ブロックを次に示します。:

resource "oci_golden_gate_connection_assignment" "atp_connection_assignment" {
    connection_id = oci_golden_gate_connection.atp_connection.id
    deployment_id = oci_golden_gate_deployment.ggs_deployment.id
}

Terraformスクリプトをすぐにテストできます(terraform applyを実行します)。数分後、デプロイメントにログインし、GoldenGateデプロイメント・コンソールからデータベースへの接続をテストできます。

GoldenGate Deployment Console

デプロイメント・バックアップの作成

最後に、oci_golden_gate_deployment_backupリソースを使用してデプロイメント・バックアップの作成を自動化できます。次のパラメータが必要です。:

  • bucket: OCI-GGバックアップを格納するオブジェクト・ストレージ・バケットの名前
  • compartment_id: バックアップが作成されるコンパートメントのOCID
  • deployment_id: バックアップするデプロイメントのOCID
  • display_name: OCIコンソールでバックアップの名前。デプロイメントの表示名を使用し、タイムスタンプ・サフィクスを追加します。
  • namespace: テナンシ・オブジェクト・ストレージ・ネームスペース
  • object: バックアップファイルの名前。display_nameパラメータと同じロジックを使用し、.xzファイル拡張子を追加します。

main.tfファイルのコード・ブロックを次に示します。:

resource "oci_golden_gate_deployment_backup" "ggs_deployment_backup" {
    bucket = var.deployment_backup_bucket
    compartment_id = var.compartment_id
    deployment_id = oci_golden_gate_deployment.ggs_deployment.id
    display_name = "${var.deployment_display_name}-${timestamp()}"
    namespace = var.deployment_backup_namespace
    object = "${var.deployment_display_name}-${timestamp()}.xz"
}

variables.tfの対応する変数::

variable "deployment_backup_bucket"{
  description = "name of Object Storage bucket to store OCI-GG backups"
  default = "oci-gg-backups"
}

variable "deployment_backup_namespace"{
  description = "Object Storage namespace for tenancy"
  default = "xxxxxx"
}

まとめ

この記事では、TerraformおよびOCI Terraformプロバイダを利用して、OCI GoldenGateリソース(デプロイメントや接続など)の作成を簡単に設計および自動化できることを確認しました。サンプル・ファイルは、main.tfおよびvariables.tfで入手できます。これらを再利用して、OCI GoldenGateインフラストラクチャをコードとして、他のOCIリソースとともに管理できます。

参照