原文はこちら。
https://blogs.oracle.com/developers/announcing-terraform-support-for-oracle-cloud-platform-services
OracleとHashiCorpは、Oracle Cloud Platform Terraformプロバイダがご利用いただけるようになったことを発表します。
Oracle Cloud Platform Terraform Provider
https://www.terraform.io/docs/providers/oraclepaas
The initial release of the Oracle Cloud Platform Terraform providerの初期リリースでは、Oracle Database Cloud ServiceとOracle Java Cloud Serviceインスタンスの作成ならびにライフサイクル管理をサポートします。
Oracle Database Cloud Service
https://cloud.oracle.com/ja_JP/database/enterprise/features
Oracle Java Cloud Service
https://cloud.oracle.com/ja_JP/java
Oracle Cloud Platformのサポートにより、Terraformのinfrastructure-as-code構成をスタンドアロンOracle PaaSの展開のために定義したり、完全なインフラストラクチャおよびアプリケーションのデプロイのために、OPCプロバイダやOCIプロバイダがサポートするOracle Cloud InfrastructureおよびInfrastructure Classicと組み合わせることができます。
Supported PaaS Services
初期段階では、Oracle Cloud Platform (PaaS) Terraformプロバイダは以下のOracle Cloud Platformサービスをサポートしています。今後サービスやリソースを追加拡充していく予定です。
- Oracle Database Cloud Service Instances
- Oracle Database Cloud Service Access Rules
- Oracle Java Cloud Service Instances
- Oracle Java Service Access Rules
Using the Oracle Cloud Platform Terraform provider
Terraformを使用してOracle Cloud Platformサービスをプロビジョニングする例として、1個のJava Cloud Serviceインスタンスと依存関係にあるDatabase Cloud Serviceのインスタンスを展開する例をご紹介します。
まず、プロバイダの定義を宣言し、アカウント資格情報と適切なサービスREST APIエンドポイントを設定します。アイデンティティ・ドメイン名、アイデンティティ・サービスIDおよびRESTエンドポイントURLは、マイ・サービス・ダッシュボードの「サービスの詳細」セクションにあります。
My Services Dashboard
https://myservices.us.oraclecloud.com/mycloud/cloudportal/dashboard
IDCS Cloudアカウントの場合、identity_domainには、アイデンティティ・サービスIDを使います。
provider "oraclepaas" {
user = "example@user.com"
password = "Pa55_Word"
identity_domain = "idcs-5bb188b5460045f3943c57b783db7ffa"
database_endpoint = "https://dbaas.oraclecloud.com"
java_endpoint = "https://jaas.oraclecloud.com"
}
Traditionalアカウントの場合、identity_domainにはアイデンティティドメイン名を使います。
provider "oraclepaas" {
user = "example@user.com"
password = "Pa55_Word"
identity_domain = "mydomain"
database_endpoint = "https://dbaas.oraclecloud.com"
java_endpoint = "https://jaas.oraclecloud.com"
}
Database Service Instance configuration
oraclepaas_database_service_instanceリソースを使って、Oracle Database Cloud Serviceインスタンスを定義します。単一のテラフォーム・データベース・サービス・リソース定義で、単一インスタンスのOracle Database Standard Editionデプロイメントから、高可用性と災害復旧のためのRACおよびData Guardを備えた完全なマルチノードのOracle Database Enterprise Editionまでの構成を表現できます。
別のDatabase Serviceインスタンスのバックアップまたはスナップショットからインスタンスを作成することもできます(訳注:原文では Instances can also be created for backups or snapshots... と記載されていますが、このforはおそらくfromの間違いと思われます。そのためfromに読み替えています)。この例では、後で構成するJava Cloud Serviceで使用するための新しいシングルインスタンスのデータベースを作成します。
resource "oraclepaas_database_service_instance" "database" {
name = "my-terraformed-database"
description = "Created by Terraform"
edition = "EE"
version = "12.2.0.1"
subscription_type = "HOURLY"
shape = "oc1m"
ssh_public_key = "${file("~/.ssh/id_rsa.pub")}"
database_configuration {
admin_password = "Pa55_Word"
backup_destination = "BOTH"
sid = "ORCL"
usable_storage = 25
}
backups {
cloud_storage_container = "Storage-${var.domain}/my-terraformed-database-backup"
cloud_storage_username = "${var.user}"
cloud_storage_password = "${var.password}"
create_if_missing = true
}
}
構成設定を少々詳しくみていきましょう。この例では、これがoc1m(1 OCPU/15GB RAM)シェイプのOracle Database 12cリリース2(12.2.0.1)Enterprise Editionインスタンスで、時間単位課金であることを宣言しています。
edition = "EE"
version = "12.2.0.1"
subscription_type = "HOURLY"
shape = "oc1m"
ssh_public_keyは、SSHアクセスを許可するためにインスタンスにプロビジョニングされる公開鍵です。
database_configurationブロックは、データベースSID、初期パスワード、およびデータベースの初期使用可能ブロックボリューム記憶域を含む、Database Cloud Serviceで作成される実際のデータベースインスタンスの初期設定を設定します。
database_configuration {
admin_password = "Pa55_Word"
backup_destination = "BOTH"
sid = "ORCL"
usable_storage = 25
}
backup_destinationは、バックアップ先(Object Storage Servive(OSS)、オブジェクトストレージとローカルストレージの両方(BOTH)、または無効(NONE))を設定します。Java Cloud Serviceインスタンスと組み合わせて使用するデータベースインスタンスには、OSSまたはBOTHのバックアップ先が必要です。
Object Storage Serviceの場所とアクセス資格情報は、backupsブロックで設定します。
backups {
cloud_storage_container = "Storage-${var.domain}/my-terraformed-database-backup"
cloud_storage_username = "${var.user}"
cloud_storage_password = "${var.password}"
create_if_missing = true
}
Java Cloud Service Instance
oraclepaas_java_service_instanceリソースを使って、Oracle Java Cloud Serviceインスタンスを定義します。1つのTerraformリソース定義で、Oracle WebLogic Serverの単一インスタンスのデプロイメントから、Oracle CoherenceデータグリッドクラスタおよびOracle Traffic Directorロードバランサを使用する完全なマルチノードOracle WebLogicクラスタまでの構成を表現できます。
別のJava Cloud Serviceインスタンスのスナップショットからインスタンスを作成することもできます。この例では、新たに2ノードのWebLogic Serverクラスタ(ロードバランサ付き)を作成し、先ほど作成したDatabase Cloud Serviceインスタンスに関連付けます。
resource "oraclepaas_java_service_instance" "jcs" {
name = "my-terraformed-java-service"
description = "Created by Terraform"
edition = "EE"
service_version = "12cRelease212"
metering_frequency = "HOURLY"
enable_admin_console = true
ssh_public_key = "${file("~/.ssh/id_rsa.pub")}"
weblogic_server {
shape = "oc1m"
managed_servers {
server_count = 2
}
admin {
username = "weblogic"
password = "Weblogic_1"
}
database {
name = "${oraclepaas_database_service_instance.database.name}"
username = "sys"
password = "${oraclepaas_database_service_instance.database.database_configuration.0.admin_password}"
}
}
oracle_traffic_director {
shape = "oc1m"
listener {
port = 8080
secured_port = 8081
}
}
backups {
cloud_storage_container = "Storage-${var.domain}/my-terraformed-java-service-backup"
auto_generate = true
}
}
細かくみていきましょう。ここでは、これが12c Release 2 (12.2.1.2) Enterprise Edition Java Cloud Serviceのインスタンスで、時間単位の課金ルールを利用すると宣言しています。
edition = "EE"
service_version = "12cRelease212"
metering_frequency = "HOURLY"
ssh_public_keyは、ここでもSSHアクセスを許可するためにインスタンスにプロビジョニングされる公開鍵です。
weblogic_serverブロックでは、このJava Cloud ServiceインスタンスにデプロイされたWebLogic Serverインスタンスの構成の詳細を提供します。 weblogic_server定義は、インスタンス・シェイプを設定します。この場合、oc1m(1 OCPU/15GB RAM)です。
adminブロックでは、WebLogic Serverの管理者ユーザーと初期パスワードを設定します。
admin {
username = "weblogic"
password = "Weblogic_1"
}
databaseブロックでは、すでに上で定義したDatabase ServiceインスタンスにWebLogic Serverを接続します。この例では、Database Cloud ServiceインスタンスとJava Cloud Serviceインスタンスが同じ構成で宣言されていると仮定しているので、データベース構成値を取得できます。
database {
name = "${oraclepaas_database_service_instance.database.name}"
username = "sys"
password = "${oraclepaas_database_service_instance.database.database_configuration.0.admin_password}"
}
The
oracle_traffic_director ブロックでは、ロードバランサを構成してトラフィックをWebLogic Serverの管理対象サーバインスタンスに流すようにします。
oracle_traffic_director {
shape = "oc1m"
listener {
port = 8080
secured_port = 8081
}
}
デフォルトでは、ロードバランサはweblogic_serverブロックで定義された同じ管理者資格情報で設定されますが、必要に応じて異なる資格情報を設定することもできます。安全でないポートが設定されていない場合、secured_portだけが有効になります。
最後に、Database Cloud Serviceインスタンスの設定と同様に、backupsブロックで、Java Cloud ServiceインスタンスのバックアップのObject Storage Serviceの場所を設定します。
backups {
cloud_storage_container = "Storage-${var.domain}/-backup"
auto_generate = true
}
Provisioning
プロバイダとterraformプロジェクトで構成されたリソース定義(例えば、全てがmain.tfファイルに入っている)を使うと、上記構成の展開は簡単ですにプロバイダとリソース定義が設定されているので、上記の設定を展開するのは簡単です。
$ terraform init
$ terraform apply
terraform initコマンドは、oraclepaasプロバイダの最新バージョンを自動的に取得します。terraform applyコマンドでプロビジョニングを開始します。Database CloudおよびJava Cloudインスタンスの完全なプロビジョニングは長時間にわたることがあります。プロビジョニングインスタンスを削除するには、terraform destroyを使います。
Related Content
Terraform Provider for Oracle Cloud Platform
https://www.terraform.io/docs/providers/oraclepaas
Terraform Provider for Oracle Cloud Infrastructure
https://github.com/oracle/terraform-provider-oci
Terraform Provider for Oracle Cloud Infrastructure Classic
https://www.terraform.io/docs/providers/opc/