原文はこちら。
https://blogs.oracle.com/developers/announcing-built-in-terraform-provider-for-oracle-compute-cloud
Terraform release 0.9.4以後、Oracle Public Cloud ServiceのビルトインTerraformプロバイダにより、Oracle Compute Cloudはフルサポートされています。
main.tfの最初のアイテムは、必要な認証属性を持つプロバイダの宣言です。Oracle Compute CloudリソースはOPC(Oracle Public Cloud)プロバイダに含まれています。Oracle CloudのCloud APIやCLIを使っている場合、これらの認証属性はよくご存知でしょう。
以下は今回作成したmain.tfです。
インスタンスがプロビジョニングされ、完全にブートされると、以下のようにssh経由でアクセスできます。
設定ファイルが変更されると、terraform plan/applyを再度実行すれば、配備されたリソースの作成や更新に必要な変更だけが計算され、ターゲットとする設定に一致させます。
最後に、この基本的なチュートリアルを完了するために、作成したすべてのリソースを削除してクリーンアップします。すべてのTerraformプロビジョニングされたリソースは、以下のコマンドを実行すれば削除できます。
サポート対象リソースの完全なセットは、Oracle Public Cloud Providerのドキュメントを参照してください。
https://blogs.oracle.com/developers/announcing-built-in-terraform-provider-for-oracle-compute-cloud
Terraform release 0.9.4以後、Oracle Public Cloud ServiceのビルトインTerraformプロバイダにより、Oracle Compute Cloudはフルサポートされています。
What is Terraform?
HashiCorp Terraform とは、クラウド基盤や関連するリソースのプロビジョニングのためのオープンソースのオーケストレーションツールです。Terraform by HashiCorp所望のインフラストラクチャ状態を表す構成ファイルをTerraformが処理すると、必要な変更をターゲット環境に適用し、構成されたリソースを作成および更新します。 "infrastructure-as-code"ということで、Terraformを使うと、DevOpsのプラクティスとCI/CDの自動化に容易に組み込み可能で繰り返し可能なプロビジョニングが可能になります。
https://terraform.io/
- Learn more
- Double the Number of Apps You Release? The Why and How
http://blogs.oracle.com/developers/doubling-your-app-releases - Terraform and Oracle Bare Metal Cloud Services
http://blogs.oracle.com/developers/terraform-and-oracle-bare-metal-cloud-services
- Double the Number of Apps You Release? The Why and How
Getting Started
Terraformは直感的で使いやすいツールです。以下の手順は開始プロセスについて説明しています。まず、以下のURLから最新のTerraformをダウンロードしてください。Download Terraformバージョンが0.9.4以降であることを確認しましょう(訳注:2017/05/22現在、0.9.5です)。
https://www.terraform.io/downloads.html
Terraformの初心者ということであれば、一般的なintroductionを一読して主要なコンセプトを理解することをお勧めします。$ terraform version
Terraform v0.9.4
Introduction to Terraform必要なリソース構成を宣言するためにTerraform .tf ファイルを作成することから始めていきます。構成は複数の .tfモジュールファイルにまたがることも可能ですが、今回の例では1個のmain.tfファイルだけを作成することにします。
https://www.terraform.io/intro/index.html
main.tfの最初のアイテムは、必要な認証属性を持つプロバイダの宣言です。Oracle Compute CloudリソースはOPC(Oracle Public Cloud)プロバイダに含まれています。Oracle CloudのCloud APIやCLIを使っている場合、これらの認証属性はよくご存知でしょう。
RESTエンドポイントURLはOracle Compute Cloudコンソールにあります。ご自身のアイデンティティ・ドメインで複数のサイトが利用可能である場合、所望のサイトのための正しいエンドポイントURLを使う必要があります。それではリソースを追加しましょう。opc_compute_instanceリソースは指定されたイメージおよびシェイプでコンピュート・インスタンスを立ち上げます。provider "opc" {
identity_domain = "mydomain"
endpoint = "https://api-z27.compute.us6.oraclecloud.com/"
user = "user.name@example.com"
password = "Pa$$w0rd"
}
この時点でterraform設定を適用してインスタンスを作成することもできますが、その前にいくつかの追加設定を追加して、インスタンスにパブリックIPアドレス付きでプロビジョニングし、SSH経由でインスタンスにログインできるようにしましょう。opc_compute_ssh_keyリソースでは新しいSSH公開鍵を作成し、opc_compute_ip_reservationではパブリックIPアドレス予約を作成します。networking_info設定ブロックでは、インスタンスのネットワーキングインターフェイス属性を設定します。resource "opc_compute_instance""instance1" {
name = "example-instance1"
shape = "oc3"
image_list = "/oracle/public/OL_7.2_UEKR3_x86_64"
}
以下は今回作成したmain.tfです。
構成ファイル内のリソース定義の順序は関係ありません。Terraformは自動的に作成するリソースの順序を依存関係に基づいて決定します。他にもこの構成で興味深い点があります。provider "opc" {
identity_domain = "mydomain"
endpoint = "https://api-z27.compute.us6.oraclecloud.com/"
user = "user.name@example.com"
password = "Pa$$w0rd"
}
resource "opc_compute_ssh_key""sshkey1" {
name = "example-sshkey1"
key = "${file("~/.ssh/id_rsa.pub")}"
}
resource "opc_compute_instance""instance1" {
name = "example-instance1"
shape = "oc3"
image_list = "/oracle/public/OL_7.2_UEKR3_x86_64"
ssh_keys = [ "${opc_compute_ssh_key.sshkey1.name}" ]
networking_info {
index = 0
shared_network = true
nat = ["${opc_compute_ip_reservation.ipreservation1.name}"]
}
}
resource "opc_compute_ip_reservation""ipreservation1" {
name = "example-ipreservation1"
parent_pool = "/oracle/public/ippool"
permanent = true
}
output "public_ip" {
value = "${opc_compute_ip_reservation.ipreservation1.ip}"
}
- $ {}形式の属性値は、他のリソースの属性を参照するためにTerraformの補間構文(interpolation syntax)を使用しています。
interpolation syntax
https://www.terraform.io/docs/configuration/interpolation.html - SSH鍵属性では、 ${file()} という補間関数(interporation function)を使い、SSH公開鍵コンテンツをファイルから読みこんでいます。
Built-in Functions
必要に応じて、ローカルのssh鍵ファイルを指すようにパスを更新するか、属性文字列全体をssh公開鍵の内容で置き換えます。
https://www.terraform.io/docs/configuration/interpolation.html#built-in-functions - ssh_keys属性は、opc_compute_ssh_keyリソース定義からSSH鍵名を参照しています。手作業で作成され、terraformの構成で定義されていない既存のリソースを参照することもできます。たとえば、既に作成されているsshキーを参照する場合は、
ssh_keys = ["my_sshkey"]
を宣言します。また、SSH鍵を別のユーザーが作成した場合には、ssh_keys = ["/Compute-mydomain/john@example.com/johns_sshkey"]
と宣言します。 - networking_info ブロックでは、interface 0 (つまりeth0) が共有ネットワーク(Shared Network)上にあることを宣言し、パブリックIPプールからIPアドレス予約を割り当てるopc_compute_ip_reservationリソースを参照します。
- output 定義は、プロビジョニング終了時に、割り当てられたパブリックIPアドレスを表示するためのものです。
Terraformは、作成済(+)、更新済(~)、または破棄済( - )リソースの詳細を出力します。今回の場合、3つのリソースが作成されています。すべてがうまくいっているようなので、リソースをプロビジョニングしてみましょう。$ terraform plan
+ opc_compute_instance.instance1
...
+ opc_compute_ip_reservation.ipreservation1
...
+ opc_compute_ssh_key.sshkey1
...
$ terraform apply
opc_compute_ip_reservation.ipreservation1: Creating...
...
Apply complete! Resources: 3 added, 0 changed, 0 destroyed.
Outputs:
public_ip = 129.144.xx.126
インスタンスがプロビジョニングされ、完全にブートされると、以下のようにssh経由でアクセスできます。
ただし、明示的なセキュリティ・リストの関連付けを宣言していないため、Oracle Compute Cloudは、sshアクセスを可能にするデフォルトのセキュリティ・リストにインスタンスを自動的に関連付けます。ssh opc@129.144.xx.126 -i ~/.ssh /id_rsa
設定ファイルが変更されると、terraform plan/applyを再度実行すれば、配備されたリソースの作成や更新に必要な変更だけが計算され、ターゲットとする設定に一致させます。
最後に、この基本的なチュートリアルを完了するために、作成したすべてのリソースを削除してクリーンアップします。すべてのTerraformプロビジョニングされたリソースは、以下のコマンドを実行すれば削除できます。
$ terraform destroy
...
Destroy complete! Resources: 3 destroyed.
What Next?
ここまでの説明で基本的な例をご紹介しました。ストレージ、セキュリティ、およびネットワークの追加リソースを追加し、他のプロバイダやプロビジョナーと組み合わせて、複数のサービスにわたって完全なインフラストラクチャとアプリケーションのデプロイをオーケストレーションすることができます。サポート対象リソースの完全なセットは、Oracle Public Cloud Providerのドキュメントを参照してください。
Oracle Public Cloud Providerより詳細なOracle Compute Cloud Terraform構成例については、以下のURLを参照してください。
https://www.terraform.io/docs/providers/opc/index.html
Terraform examples for the built-in Oracle OPC ProviderOracle Bare Metal Cloud ServiceのTerraformのサポートは、現時点では外部プラグインとして利用できます。外部プラグインは以下から入手できます。
https://github.com/oracle/terraform-provider-compute/tree/master/examples/opc
Terraform provider for Oracle Bare Metal Cloud Services
github.com/oracle/terraform-provider-baremetal
Get Involved
Oracle Public Cloud Terraform ProviderはOracleとHashiCorpで完全サポートされています。Oracle Public Cloud opcプロバイダの使用に関する質問や問題がありましたら、TerraformのGithubリポジトリに直接記録できますhashicorp/terraformオープンソースプロジェクトとして、Terraform Oracle Public Cloudプロバイダへのコミュニティによるコントリビュートを歓迎しています。詳細については、Terraform寄稿ガイドラインを参照してください。
https://github.com/hashicorp/terraform/issues
Contributing to Terraform
https://github.com/hashicorp/terraform/blob/master/.github/CONTRIBUTING.md