Amazon Web Services ブログ

Terraform を使用した Oracle Database@AWS リソースのプロビジョニング

本記事は 2026 年 6 月 11 日 に公開された「Provision Oracle Database@AWS resources using Terraform」を翻訳したものです。

本記事では、Terraform を使用して Oracle Database@AWS の主要コンポーネント(ODB ネットワークOracle Exadata インフラストラクチャExadata VM クラスターAutonomous VM クラスター)をプロビジョニングする方法を紹介します。

Oracle Database@AWS(ODB@AWS)は、Oracle Cloud Infrastructure(OCI)が管理する Oracle Exadata インフラストラクチャを AWS データセンター内から提供するサービスです。Oracle Database@AWS を使用すると、Oracle データベースを AWS に移行しながら、Exadata の高パフォーマンス、スケーラビリティ、高度な機能を活用できます。Oracle Database@AWS は、Amazon Simple Storage Service(Amazon S3)zero-ETL パイプライン、AWS Key Management Service(AWS KMS)などの AWS サービスと密に統合されています。Oracle データベースは、Amazon Elastic Compute Cloud(Amazon EC2)、Amazon Elastic Container Service(Amazon ECS)、Amazon Elastic Kubernetes Service(Amazon EKS)などにデプロイされたアプリケーションと並行して動作します。この密な統合により、データフローが簡素化され、セキュリティが強化され、多様なコンピューティング環境でのアプリケーション開発が加速します。

現在、Oracle Database@AWS では以下の Oracle Database サービスが提供されています:

Infrastructure as Code(IaC)は、構成ファイルを通じてアプリケーションのインフラストラクチャをプロビジョニング・管理するプロセスです。IaC を使用すると、インフラストラクチャ管理を一元化し、リソースを標準化し、迅速にスケールできます。新しい環境を再現可能で、信頼性が高く、一貫性のある状態で構築できます。Oracle Database@AWS のリソースは、Terraform や AWS CloudFormation などの IaC ツールでデプロイできます。

HashiCorp Terraform は、クラウドとオンプレミスのリソースを、バージョン管理・再利用・共有が可能な人間が読める構成ファイルで定義できる IaC ツールです。一貫したワークフローで、ライフサイクル全体を通じてインフラストラクチャをプロビジョニング・管理できます。

本ウォークスルーは、Oracle Database@AWS のプロビジョニングを自動化したいデータベース管理者や DevOps エンジニアを対象としています。

ソリューション概要

Oracle Database@AWS を使い始めるには、AWS Marketplace のリスティングを確認します。サービスを利用するには、オンボーディングと呼ばれるプロセスで AWS アカウント内の構成を行います。オンボーディングを開始するには、Oracle の担当者に連絡してプライベートオファーをリクエストします。価格、利用条件に合意した後、AWS Marketplace で購入を完了します。購入完了後、AWS アカウントと OCI テナンシーをリンクします(マルチクラウドリンク)。要件に応じて、エンタイトルメント共有機能を使用して、同じ AWS Organization 内の AWS アカウント間で ODB@AWS の AWS Marketplace エンタイトルメントを共有できます。オンボーディング完了後、Exadata Database Service on Dedicated Infrastructure および Autonomous AI Database on Dedicated Exadata Infrastructure 用の Oracle Database@AWS システムリソースのプロビジョニングを開始できます。プロビジョニングは ODB ネットワークと Exadata インフラストラクチャの作成から始まります。ワークロードと要件に基づいて、Exadata VM クラスターまたは Autonomous VM クラスターを作成します。Exadata VM クラスターは Oracle Exadata Database Service をサポートし、Autonomous VM クラスターは Autonomous AI Database on Dedicated Exadata Infrastructure をサポートします。

Oracle Database@AWS の利用を開始するには、Oracle Database@AWS コンソール、AWS Command Line Interface(AWS CLI)、または API を使用して以下のリソースを作成します:

  1. ODB ネットワーク
  2. Oracle Exadata インフラストラクチャ
  3. Exadata VM クラスターまたは Autonomous VM クラスター
  4. ODB ピアリング接続

次の図は Oracle Database@AWS のアーキテクチャを示しています。

Architecture diagram of Oracle Database@AWS showing an Amazon VPC connected through ODB peering to the ODB network, which maps to an OCI child site hosting Exadata infrastructure and VM clusters

以下のセクションでは、Oracle Database@AWS のアーキテクチャと主要コンポーネントについて説明します。

    • Amazon Virtual Private Cloud とサブネットAmazon Virtual Private Cloud(Amazon VPC)では、定義した仮想ネットワークに AWS リソースを起動できます。この仮想ネットワークは、自社データセンターで運用する従来のネットワークと同様ですが、AWS のスケーラブルなインフラストラクチャを活用できます。VPC を作成した後、サブネットを追加できます。サブネットは Amazon VPC 内の IP アドレス範囲です。特定のサブネットに Amazon EC2 インスタンスなどの AWS リソースを作成できます。
    • OCI Virtual Cloud Network(VCN)とサブネットVirtual Cloud Network(VCN)は、指定した Oracle リージョン内の OCI テナンシーに設定するカスタマイズ可能なプライベートネットワークです。コンピュートインスタンス、データベース、ストレージなどの OCI リソースをデプロイ・管理するための、安全でスケーラブルなネットワーク環境を提供します。VCN により、論理的に分離されたネットワーク内でクラウドリソースを隔離・セグメント化し、セキュリティと管理性を向上できます。Oracle マルチクラウドアーキテクチャでは、AWS リージョン内にクライアントサブネットとバックアップサブネットを持つ ODB ネットワークを作成すると、対応する OCI VCN とサブネットが OCI テナンシーに自動的に作成されます。VCN はペアリングされた OCI リージョンに作成されます。詳細については、「Overview of VCNs and Subnets」を参照してください。
    • OCI リージョン(親サイト):OCI リージョンは、アベイラビリティドメインと呼ばれる 1 つ以上のデータセンターがある地理的エリアです。Oracle マルチクラウドモデルでは、ペアリングされた AWS リージョンに接続された OCI リージョンを親サイトと呼びます。ODB@AWS は「Regional Availability」で説明されているリージョンでのみ利用可能です。
    • OCI 子サイトOCI 子サイトは、OCI アベイラビリティドメイン(AD)を AWS リージョン内のアベイラビリティゾーン(AZ)に拡張するデータセンターです。OCI 子サイトモデルでは、Oracle Database@AWS で使用される Exadata インフラストラクチャは物理的には AWS データセンター(AWS リージョン内の AZ)に配置されますが、論理的には OCI リージョンとそのネットワークコンポーネントにマッピングされます。
    • ODB ネットワークODB ネットワークは、指定した AWS アベイラビリティゾーン(AZ)内で Oracle Exadata VM クラスターと Autonomous VM クラスターをホストするプライベートで分離されたネットワークです。ODB ネットワークは IP アドレスの CIDR 範囲で構成されます。ODB ネットワークは OCI 子サイト内のネットワークに直接マッピングされ、AWS と OCI 間の通信を実現します。Oracle マルチクラウドアーキテクチャでは、ODB ネットワークが Oracle Database@AWS サービスの OCI コンポーネントにネットワーク接続を提供します。

ODB ネットワークの作成時に、以下の情報を指定します:

      1. アベイラビリティゾーン — ODB ネットワークは特定の AZ に紐づきます。サポートされるリージョンとアベイラビリティゾーンの最新リストは「Regional Availability」を参照してください。アカウント内の論理 AZ 名と物理 AZ ID のマッピングを確認するには、次のコマンドを実行します。
aws ec2 describe-availability-zones \
  --region us-east-1 \
  --query "AvailabilityZones[*].{ZoneName:ZoneName, ZoneId:ZoneId}" \
  --output table
    1. クライアント CIDR アドレス — ODB ネットワークには、Exadata VM クラスターと Autonomous VM クラスター用のクライアントサブネット CIDR が必要です。
    2. バックアップ CIDR アドレス — ODB ネットワークには、VM クラスターのマネージドデータベースバックアップ用のバックアップサブネット CIDR が必要です。バックアップサブネットは Exadata VM クラスターではオプションです。
    3. AWS サービス統合 — Amazon S3 や Amazon Redshift との zero-ETL など、AWS サービス統合用のネットワークパスを構成できます。詳細については「AWS service integrations」を参照してください。CIDR 要件の詳細については「ODB Network creation」を参照してください。
    • Oracle Exadata インフラストラクチャOracle Exadata インフラストラクチャは、Oracle データベースを実行するために設計された高パフォーマンスの統合ハードウェア・ソフトウェアプラットフォームです。Oracle マルチクラウドアーキテクチャでは、Exadata インフラストラクチャは Oracle Exadata Database Service と Oracle Autonomous AI Database の両方の基盤ハードウェアです。

Oracle Database@AWS で Exadata インフラストラクチャを作成する際に、以下の情報を指定します:

      • データベースサーバーの総数
      • ストレージサーバーの総数
      • Exadata システムモデル(X11M)
      • インフラストラクチャをホストする AZ(「Supported Regions for Oracle Database@AWS」を参照)

詳細については「Exadata Infrastructure」を参照してください。

  • Exadata VM クラスター:Exadata VM クラスターは、密結合された Exadata VM のセットです。各 VM には、Oracle Real Application Clusters(Oracle RAC)や Oracle Grid Infrastructure などの Oracle Enterprise Edition の機能を含む、完全な Oracle データベースインストールがあります。VM クラスター上に 1 つ以上の Oracle Exadata データベースを作成できます。

VM と VM クラスターのアーキテクチャ図については「Exadata Database Service on Dedicated Infrastructure Technical Architecture」を参照してください。

VM クラスターの作成時に、以下の情報を指定します:

  • ODB ネットワーク
  • Oracle Exadata インフラストラクチャ
  • クラスター内の VM を配置するデータベースサーバー
  • 使用可能な Exadata ストレージの合計容量

詳細については「Exadata VM Cluster」を参照してください。

  • Autonomous VM クラスター:Autonomous VM クラスター(AVMC)を使用すると、物理的な Exadata クラスター(マシン)を複数の仮想クラスターにパーティション分割できます。アクセスルール、ネットワーク構成、コンピューティング・メモリ・ストレージリソースのカスタマイズにより、データベースワークロードごとに環境を分離できます。Autonomous VM クラスターの作成時に、VM あたりの ECPU コア数、CPU あたりのデータベースメモリ、データベースストレージ、Autonomous コンテナデータベースの最大数を構成できます。詳細については「Create Autonomous VM Cluster」を参照してください。
  • ODB ピアリングODB ピアリングは、Amazon VPC と ODB ネットワーク間でトラフィックをプライベートにルーティングするネットワーク接続です。Oracle マルチクラウドアーキテクチャでは、VPC 内のアプリケーションと ODB ネットワーク内の Oracle データベース間のトラフィックは、パブリックインターネットを経由せず ODB ピアリングを通じてプライベートにルーティングされます。詳細については「creating ODB peering connection」を参照してください。
  • Oracle Exadata データベース:Oracle Database@AWS では、AWS コンソールを使用して Exadata データベースをホストする Oracle Exadata インフラストラクチャと VM クラスターを作成します。その後、OCI API を使用して Oracle データベースを作成・管理します。データベースの作成方法の詳細については「Exadata Database」および「Autonomous Database」を参照してください。

Oracle Database@AWS のコンポーネントの詳細については「Architecture」を参照してください。

上記リソースの作成手順の詳細については「creating resources in your Oracle Database@AWS」を参照してください。

前提条件

開始する前に、以下の前提条件を確認してください:

以下の Terraform テンプレートを使用して、Oracle Database@AWS のさまざまなリソースをプロビジョニングできます。ビジネス要件に応じてパラメータをカスタマイズしてください。テンプレートを適用する前に、各パラメータの意味と許容値を理解してください。

Oracle Database@AWS リソースのプロビジョニング用に以下のテンプレートが利用可能です。最新情報については「Provisioning Oracle Database@AWS through Terraform」を参照してください。

ステップ 1:ODB ネットワークの作成

以下の Terraform 構成を使用して、Oracle Database@AWS で ODB ネットワークを作成します。

# Create an ODB Network without AWS service integrations
resource "aws_odb_network" "example" {
  display_name = "odb-my-net"
  availability_zone_id = "use1-az6"
  client_subnet_cidr = "10.2.0.0/24"
  backup_subnet_cidr = "10.2.1.0/24"
  s3_access = "DISABLED"
  zero_etl_access = "DISABLED"
  tags = {
    "env" = "dev"
  }
}
# Create an ODB Network with AWS service integrations
resource "aws_odb_network" "example" {
  display_name = "odb-my-net"
  availability_zone_id = "use1-az6"
  client_subnet_cidr = "10.2.0.0/24"
  backup_subnet_cidr = "10.2.1.0/24"
  s3_access = "ENABLED"
  zero_etl_access = "ENABLED"
  tags = {
    "env" = "dev"
  }
}

IP アドレス要件の詳細については「Planning IP address space in Oracle Database@AWS」を参照してください。

ステップ 2:Oracle Exadata インフラストラクチャの作成

以下の Terraform 構成を使用して、Oracle Database@AWS で Oracle Exadata インフラストラクチャを作成します。

# Create an Exadata Infrastructure
resource "aws_odb_cloud_exadata_infrastructure" "example" {
  display_name = "my-exa-infra"
  shape = "Exadata.X11M"
  storage_count = 3
  compute_count = 2
  availability_zone_id = "use1-az6"
  customer_contacts_to_send_to_oci = [{ email = "abc@example.com" }, { email = "def@example.com" }]
  database_server_type = "X11M"
  storage_server_type = "X11M-HC"
  maintenance_window {
    custom_action_timeout_in_mins = 16
    days_of_week = [{ name = "MONDAY" }, { name = "TUESDAY" }]
    hours_of_day = [11, 16]
    is_custom_action_timeout_enabled = true
    lead_time_in_weeks = 3
    months = [{ name = "FEBRUARY" }, { name = "MAY" }, { name = "AUGUST" }, { name = "NOVEMBER" }]
    patching_mode = "ROLLING"
    preference = "CUSTOM_PREFERENCE"
    weeks_of_month = [2, 4]
  }
  tags = {
    "env" = "dev"
  }
}

ステップ 3:Exadata VM クラスターまたは Autonomous VM クラスターの作成

以下の Terraform 構成を使用して、Oracle Database@AWS で Exadata VM クラスターまたはAutonomous VM クラスターを作成します。

# Create Exadata VM cluster with minimum parameters
resource "aws_odb_cloud_vm_cluster" "with_minimum_parameter" {
  display_name = "my_vm_cluster"
  cloud_exadata_infrastructure_id = "<aws_odb_cloud_exadata_infrastructure_id>"
  cpu_core_count = 6
  gi_version = "23.0.0.0"
  hostname_prefix = "apollo12"
  ssh_public_keys = ["public-ssh-key"]
  odb_network_id = "<aws_odb_network_id>"
  is_local_backup_enabled = true
  is_sparse_diskgroup_enabled = true
  license_model = "LICENSE_INCLUDED"
  data_storage_size_in_tbs = 20.0
  db_servers = ["db-server-1", "db-server-2"]
  db_node_storage_size_in_gbs = 120.0
  memory_size_in_gbs = 60
  data_collection_options {
    is_diagnostics_events_enabled = false
    is_health_monitoring_enabled = false
    is_incident_logs_enabled = false
  }
}
# Create Exadata VM cluster with all parameters
resource "aws_odb_cloud_vm_cluster" "with_all_parameters" {
  display_name = "my_vm_cluster"
  cloud_exadata_infrastructure_id = "<aws_odb_cloud_exadata_infrastructure_id>"
  cpu_core_count = 6
  gi_version = "23.0.0.0"
  hostname_prefix = "apollo12"
  ssh_public_keys = ["my-ssh-key"]
  odb_network_id = "<aws_odb_network_id>"
  is_local_backup_enabled = true
  is_sparse_diskgroup_enabled = true
  license_model = "LICENSE_INCLUDED"
  data_storage_size_in_tbs = 20.0
  db_servers = ["my-dbserver-1", "my-db-server-2"]
  db_node_storage_size_in_gbs = 120.0
  memory_size_in_gbs = 60
  cluster_name = "julia-13"
  timezone = "UTC"
  scan_listener_port_tcp = 1521
  tags = {
    "env" = "dev"
  }
  data_collection_options {
    is_diagnostics_events_enabled = true
    is_health_monitoring_enabled = true
    is_incident_logs_enabled = true
  }
}
# Create Autonomous VM cluster with minimum parameters
resource "aws_odb_cloud_autonomous_vm_cluster" "avmc_with_minimum_parameters" {
  cloud_exadata_infrastructure_id = "<aws_odb_cloud_exadata_infrastructure_id>"
  odb_network_id = "<aws_odb_network_id>"
  display_name = "my_autonomous_vm_cluster"
  autonomous_data_storage_size_in_tbs = 5
  memory_per_oracle_compute_unit_in_gbs = 2
  total_container_databases = 1
  cpu_core_count_per_node = 40
  license_model = "LICENSE_INCLUDED"
  # ids of db server. refer your exa infra. This is a mandatory field. Refer your cloud Exadata infrastructure for db server id
  db_servers = ["<my_db_server_id>"]
  scan_listener_port_tls = 8561
  scan_listener_port_non_tls = 1024
  maintenance_window {
    preference = "NO_PREFERENCE"
  }
}
# Create Autonomous VM cluster with all parameters
resource "aws_odb_cloud_autonomous_vm_cluster" "avmc_with_all_params" {
  description = "my first avmc"
  time_zone = "UTC"
  cloud_exadata_infrastructure_id = "<aws_odb_cloud_exadata_infrastructure_id>"
  odb_network_id = "<aws_odb_network_id>"
  display_name = "my_autonomous_vm_cluster"
  autonomous_data_storage_size_in_tbs = 5
  memory_per_oracle_compute_unit_in_gbs = 2
  total_container_databases = 1
  cpu_core_count_per_node = 40
  license_model = "LICENSE_INCLUDED"
  db_servers = ["<my_db_server_1>", "<my_db_server_2>"]
  scan_listener_port_tls = 8561
  scan_listener_port_non_tls = 1024
  maintenance_window {
    days_of_week = [{ name = "MONDAY" }, { name = "TUESDAY" }]
    hours_of_day = [4, 16]
    lead_time_in_weeks = 3
    months = [{ name = "FEBRUARY" }, { name = "MAY" }, { name = "AUGUST" }, { name = "NOVEMBER" }]
    preference = "CUSTOM_PREFERENCE"
    weeks_of_month = [2, 4]
  }
  tags = {
    "env" = "dev"
  }
}

ステップ 4:ODB ピアリング接続の作成

以下の Terraform 構成を使用して、ODB ピアリング接続を作成します。

resource "aws_odb_network_peering_connection" "example" {
  display_name = "example"
  odb_network_id = "my-odb-network-id"
  peer_network_id = "my-vpc-id"
  tags = {
    "env" = "dev"
  }
}

Terraform を使用した ODB@AWS スタックの作成

Terraform でリソースをプロビジョニングするには、以下の手順を完了します。この Terraform テンプレートは以下のリソースを作成します:

  • VPC
  • インターネットゲートウェイ
  • パブリックサブネット 2 つ
  • プライベートサブネット 2 つ
  • パブリックルートテーブル
  • プライベートルートテーブル
  • パブリックルート
  • 4 つのサブネットすべてのルートテーブル関連付け
  • ODB ネットワーク
  • ODB ピアリング接続
  • Exadata インフラストラクチャ
  • Exadata VM クラスター
  • Autonomous VM クラスター

デプロイ前にテンプレートをよく確認してください。不要なリソースがある場合は、テンプレートを適宜修正してください。

  1. GitHub リポジトリをローカルマシンにクローンするか、AWS Samples からスクリプトをダウンロードします。
    git clone https://github.com/aws-samples/sample-odb-launch-using-terraform
  2. GitHub README に従って前提条件を確認し、Terraform スタックをデプロイします。
  3. terraform apply を実行する前に terraform plan を実行して、提案されたすべての変更を確認します。適用前にプラン出力で destroyreplace アクションがないか慎重に確認してください。
  4. スタックデプロイの完了を確認します。

重要:Terraform リソースの特定のプロパティ(CpuCoreCount や DbServers など)を変更すると、Terraform はインプレース更新ではなくリソース全体を置き換えます。既存リソースを変更する前に、Terraform ドキュメントで置き換えをトリガーするプロパティの完全なリストを確認してください。

リソースの作成後、VPC と ODB ネットワーク間の接続を構成します。以下の手順を完了してください:

  1. OdbPeeringConnection 用の VPC ルートテーブルの構成
  2. Oracle Database@AWS 用の DNS 構成
    • アウトバウンドエンドポイント:ODB ネットワークに DNS クエリを送信するために必要です。
    • リゾルバールール:Amazon Route 53 Resolver が ODB ネットワークの DNS に転送する DNS クエリのドメイン名を指定するルールです。

詳細については「network configuration」を参照してください。

クリーンアップ

継続的な課金を避けるため、作成したリソース(ODB ネットワーク、Exadata インフラストラクチャ、VM クラスター)を削除してください。

Terraform スタックの一部として起動されたその他のリソースを削除するには、GitHub README に記載された手順に従い terraform destroy を実行してください。

ODB ネットワークの削除時は、delete_associated_resourcestrue に設定してください。このパラメータのデフォルトは false です。true に設定しない場合、以前の ODB ネットワークにマッピングされた OCI VCN はそのまま残ります。

まとめ

本記事では、Terraform を使用して ODB ネットワーク、Exadata インフラストラクチャ、Exadata VM クラスター、Autonomous VM クラスターなどの Oracle Database@AWS リソースをプロビジョニングする方法を説明しました。Terraform による Infrastructure as Code を採用することで、デプロイを自動化し、環境全体で一貫性を維持し、Oracle Database@AWS スタックの管理を効率化できます。

詳細については「Getting started with Oracle Database@AWS」を参照してください。

著者について

Javeed

Javeed

Javeed は、Amazon Web Services のシニアデータベーススペシャリストソリューションアーキテクトです。Amazon RDS チームで Oracle や Db2 などの商用データベースエンジンを担当しています。AWS Cloud でのリレーショナルデータベースワークロードの設計、デプロイ、最適化の支援に情熱を注いでいます。

Sharath Chandra Kampili

Sharath Chandra Kampili

Amazon Web Services のデータベーススペシャリストソリューションアーキテクトです。AWS RDS チームで Oracle などの商用データベースエンジンを担当しています。AWS のお客様と直接協力し、データベースプロジェクトに関するガイダンスと技術支援を提供しています。


この記事は Solutions Architect の 矢木 覚 が翻訳しました。