原文はこちら。
https://blogs.oracle.com/developers/announcing-oracle-cloud-infrastructure-modules-for-the-terraform-modules-registry
新たに発表されたHashiCorp Terraform Module Registryを使用して、OracleはOracle Cloud Infrastructure Classic(OPC)Provider用の検証済みモジュールの初期セットを提供しています。このモジュールは現在HashiCorpによる認定および互換性テストを受けています。
compute-instanceモジュールを使うと、ストレージリソースならびにインスタンスリソースの両方の作成が1個の再利用可能なコンポーネントに結合され、複数のリソースの定義と関連付けの詳細が、単一の簡潔なインスタンス定義にカプセル化されます。
では、この最小設定と同等の、全て宣言した基本リソースセットと比べてみましょう。
https://blogs.oracle.com/developers/announcing-oracle-cloud-infrastructure-modules-for-the-terraform-modules-registry
新たに発表されたHashiCorp Terraform Module Registryを使用して、OracleはOracle Cloud Infrastructure Classic(OPC)Provider用の検証済みモジュールの初期セットを提供しています。このモジュールは現在HashiCorpによる認定および互換性テストを受けています。
HashiCorp Terraform Module RegistryTerraform Moduleは、Terraform構成の再利用可能なパーツを内蔵パッケージとしてカプセル化しています。Terraform Moduleを使用すると、インフラストラクチャ構成全体の再利用性と保守性の両方を向上することができ、テスト済みの構成パターンを一貫して使用できます。
https://www.hashicorp.com/blog/hashicorp-terraform-module-registry/
Module ConfigurationTerraform Module Registryを使用すると、Oracle Cloud Infrastructureの検証済みモジュールとコミュニティ・モジュールの両方を簡単に検出して使用することができます。以下で、Oracle Cloud Infrastructure Classic(OPC)モジュールの初版を2個組み合わせた構成で使用する方法を詳しく見ていきます。
https://www.terraform.io/docs/configuration/modules.html
Oracle Cloud Infrastructure Classic Modules
Terraform Providerは、Compute、Networking、Storageサービスなどを構成およびプロビジョニングするために使用される個々のリソースをきめ細かく制御することができます。Resource Configurationインフラストラクチャ構成を完全に制御するにあたり、個々のリソースを宣言することは非常に強力な方法ではありますが、例えばComputeインスタンスの起動やネットワークの作成、セキュリティ・ルールの宣言といった、具体的な構成要件を満たすために、何度もリソースのグループを共通パターンで使う必要があります。
https://www.terraform.io/docs/configuration/resources.html
Compute Instance Module
opc_compute_instanceリソースは、デフォルトで、ローカルブートストレージを持つ一時インスタンスを作成しますが、永続インスタンスを作成するには、追加のopc_compute_storage_volumeリソースをブートボリューム用に宣言し、作成時にインスタンスにアタッチする必要があります。compute-instanceモジュールを使うと、ストレージリソースならびにインスタンスリソースの両方の作成が1個の再利用可能なコンポーネントに結合され、複数のリソースの定義と関連付けの詳細が、単一の簡潔なインスタンス定義にカプセル化されます。
Terraform Module for creating Oracle Cloud Infrastructure OPC Compute instancesでは、最も簡単なcompute-instanceモジュール定義から始めましょう。
https://registry.terraform.io/modules/oracle/compute-instance/opc
この最小限の設定で、通常明示的に定義が必要な多くの属性に対して、共通のデフォルト値や派生値を使用して、永続ブータブルストレージボリュームを持つインスタンスを作成します。module "persistent-instance1" {
source = "oracle/compute-instance/opc"
instance_name = "instance1"
instance_shape = "oc3"
}
では、この最小設定と同等の、全て宣言した基本リソースセットと比べてみましょう。
resource "opc_compute_instance""persistent-instance1" {
name = "instance1"
hostname = "instance1"
label = "instance1"
shape = "oc3"
networking_info {
index = 0
shared_network = true
}
storage {
index = 1
volume = "${opc_compute_storage_volume.boot-volume.name}"
}
boot_order = [1]
}
resource "opc_compute_storage_volume""boot-volume" {
name = "instance1-boot"
description = "$instance1 boot storage volume "
image_list = "/oracle/public/OL_7.2_UEKR4_x86_64"
image_list_entry = 1
size = 12
bootable = true
}
IP Networks Modules
2個目のモジュールはip-networksモジュールです。 このヘルパーモジュールは、共有IPネットワーク交換(IP Network Exchange)を使って、相互に接続された複数のIPネットワークの作成を簡素化します。これは、異なるアプリケーションデプロイメント層に使用される複数のサブネットを宣言する場合に便利です。Terraform Module for creating Oracle Cloud Infrastructure OPC IP Neworksこのip-networksモジュールはIPネットワーク交換の名前、サブネットと対応するサブネットワーク名のリストを使ってインスタンス化します。
https://registry.terraform.io/modules/oracle/ip-networks/opc
ここでも、同じ構成の同等の基本リソース定義を見てみましょう。module "ip-networks" {
source = "oracle/ip-networks/opc"
ip_exchange_name = "example"
subnet_cidrs = [ "192.168.1.0/24", "192.168.2.0/24", "192.168.3.0/24" ]
subnet_names = [ "network1", "network2", "network3" ]
}
resource "opc_compute_ip_network_exchange""exchange" {
name = "example"
}
resource "opc_compute_ip_network""network" {
name = "network1"
ip_address_prefix = "192.168.1.0/24"
ip_network_exchange = "${opc_compute_ip_network_exchange.exchange.name}"
}
resource "opc_compute_ip_network""network" {
name = "network2"
ip_address_prefix = "192.168.2.0/24"
ip_network_exchange = "${opc_compute_ip_network_exchange.exchange.name}"
}
resource "opc_compute_ip_network""network" {
name = "network3"
ip_address_prefix = "192.168.3.0/24"
ip_network_exchange = "${opc_compute_ip_network_exchange.exchange.name}"
}
Using Modules as part of a complete configuration
今度は、上記の2つのモジュールを組み合わせを見てみましょう。 相互接続されたIPネットワークのサブネットワークを2個作成し、各サブネットに1つのCompute インスタンスを作成します。構成を完了するために追加のリソースが2つ作成され、実行中のインスタンスにアクセスできるようにSSHキーが作成されます。 パブリックIPアドレス予約はインスタンスの1つに関連付けられます。この例では、IPネットワーク上にインスタンスを作成しているため、opc_compute_ip_address_reservationでパブリックIP予約を使っていますが、IPネットワークを使わない場合、共有ネットワークインターフェースでIP予約を作成するために、opc_compute_ip_reservationを使う必要があります。module "ip-networks" {
source = "oracle/ip-networks/opc"
ip_exchange_name = "example"
subnet_cidrs = [ "192.168.1.0/24", "192.168.2.0/24" ]
subnet_names = [ "network1", "network2" ]
}
module "persistent-instance1" {
source = "oracle/compute-instance/opc"
instance_name = "instance1"
instance_shape = "oc3"
ip_network = "${module.ip-networks.ip_networks[0]}"
ssh_key = "${opc_compute_ssh_key.ssh-key.name}"
}
module "persistent-instance2" {
source = "oracle/compute-instance/opc"
instance_name = "instance1"
instance_shape = "oc3"
ip_network = "${module.ip-networks.ip_networks[1]}"
ip_reservation = "${opc_compute_ip_address_reservation.ip-reservation.name}"
ssh_key = "${opc_compute_ssh_key.ssh-key.name}"
}
resource "opc_compute_ssh_key""ssh-key" {
name = "example-sshkey1"
key = "${file("~/.ssh/id_rsa.pub")}"
enabled = true
}
resource "opc_compute_ip_address_reservation""ip-reservation" {
name = "example-ip-reservation"
ip_address_pool = "public-ippool"
}
Summary
どのようなプログラミング言語でも、再利用可能なコード要素にカプセル化し分解することで、開発と保守が大幅に省力化できますが、この原則は、宣言的および機能的な構造を使用してクラウドインフラストラクチャを定義できる、infrastructure-as-codeの領域でも等しく適用されます。Terraform ModuleとTerraform Modules Repositoryを使うと、ベンダーが提供するモジュールとコミュニティが提供するモジュールの両方を信頼性の高い方法で採用して、素早く初期設定を作成できます。More Information
- Terraform Modules
https://www.terraform.io/docs/configuration/modules.html - Terraform Modules Repository
https://registry.terraform.io/ - Terraform Provider for Oracle Cloud Infrastructure Classic (OPC)
https://www.terraform.io/docs/providers/opc/index.html - Terraform Provider for Oracle Cloud Infrastructure
https://github.com/oracle/terraform-provider-oci - Oracle Cloud Infrastructure Classic (OPC) compute-instance Module
https://registry.terraform.io/modules/oracle/compute-instance/opc - Oracle Cloud Infrastructure Classic (OPC) ip-networks Module
https://registry.terraform.io/modules/oracle/ip-networks/opc
Related Content
- Announcing Built-in Terraform Provider for Oracle Compute Cloud
https://blogs.oracle.com/developers/announcing-built-in-terraform-provider-for-oracle-compute-cloud
https://orablogs-jp.blogspot.jp/2017/05/announcing-built-in-terraform-provider.html - Get a highly available Kubernetes Cluster on Oracle Cloud Infrastructure in minutes
https://blogs.oracle.com/developers/get-a-highly-available-kubernetes-cluster-on-oracle-cloud-infrastructure-in-minutes
https://orablogs-jp.blogspot.jp/2017/09/get-highly-available-kubernetes-cluster.html - Terraform and Oracle Bare Metal Cloud Services
https://blogs.oracle.com/developers/terraform-and-oracle-bare-metal-cloud-services