[Cloud] Announcing Built-in Terraform Provider for Oracle Compute Cloud

原文はこちら。
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
https://terraform.io/
所望のインフラストラクチャ状態を表す構成ファイルをTerraformが処理すると、必要な変更をターゲット環境に適用し、構成されたリソースを作成および更新します。 "infrastructure-as-code" ということで、Terraformを使うと、DevOpsのプラクティスとCI/CDの自動化に容易に組み込み可能で繰り返し可能なプロビジョニングが可能になります。
Terraformは幅広いTerraformプロバイダを通じて、複数のインフラストラクチャやサービスのプロビジョニングをサポートします。Prior to Terraform 0.9.4より前は、外部プロバイダ・プラグインとしてOracle Compute Cloudをサポートしていました。が、Terraform release 0.9.4で、ビルトイン・プロバイダとしてOracle Compute Cloudは完全にサポートされ、主要なTerraformディストリビューションに含まれています。

Getting Started

Terraformは直感的で使いやすいツールです。以下の手順は開始プロセスについて説明しています。まず、以下のURLから最新のTerraformをダウンロードしてください。
Download Terraform
https://www.terraform.io/downloads.html
バージョンが0.9.4以降であることを確認しましょう(訳注:2017/05/22現在、0.9.5です)。
$ terraform version
Terraform v0.9.4
Terraformの初心者ということであれば、一般的なintroductionを一読して主要なコンセプトを理解することをお勧めします。
Introduction to Terraform
https://www.terraform.io/intro/index.html
必要なリソース構成を宣言するためにTerraform .tf ファイルを作成することから始めていきます。構成は複数の .tfモジュールファイルにまたがることも可能ですが、今回の例では1個のmain.tfファイルだけを作成することにします。
main.tfの最初のアイテムは、必要な認証属性を持つプロバイダの宣言です。Oracle Compute CloudリソースはOPC(Oracle Public Cloud)プロバイダに含まれています。Oracle CloudのCloud APIやCLIを使っている場合、これらの認証属性はよくご存知でしょう。
provider "opc" {
  identity_domain = "mydomain"
  endpoint        = "https://api-z27.compute.us6.oraclecloud.com/"
  user            = "user.name@example.com"
  password        = "Pa$$w0rd"
}
RESTエンドポイントURLはOracle Compute Cloudコンソールにあります。ご自身のアイデンティティ・ドメインで複数のサイトが利用可能である場合、所望のサイトのための正しいエンドポイントURLを使う必要があります。それではリソースを追加しましょう。opc_compute_instanceリソースは指定されたイメージおよびシェイプでコンピュート・インスタンスを立ち上げます。
resource "opc_compute_instance" "instance1" {
  name = "example-instance1"
  shape = "oc3"
  image_list = "/oracle/public/OL_7.2_UEKR3_x86_64"
}
この時点でterraform設定を適用してインスタンスを作成することもできますが、その前にいくつかの追加設定を追加して、インスタンスにパブリックIPアドレス付きでプロビジョニングし、SSH経由でインスタンスにログインできるようにしましょう。opc_compute_ssh_keyリソースでは新しいSSH公開鍵を作成し、opc_compute_ip_reservationではパブリックIPアドレス予約を作成します。networking_info設定ブロックでは、インスタンスのネットワーキングインターフェイス属性を設定します。
以下は今回作成したmain.tfです。
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は自動的に作成するリソースの順序を依存関係に基づいて決定します。他にもこの構成で興味深い点があります。
  • $ {}形式の属性値は、他のリソースの属性を参照するためにTerraformの補間構文(interpolation syntax)を使用しています。
    interpolation syntax
    https://www.terraform.io/docs/configuration/interpolation.html
  • SSH鍵属性では、 ${file()} という補間関数(interporation function)を使い、SSH公開鍵コンテンツをファイルから読みこんでいます。
    Built-in Functions
    https://www.terraform.io/docs/configuration/interpolation.html#built-in-functions
    必要に応じて、ローカルのssh鍵ファイルを指すようにパスを更新するか、属性文字列全体をssh公開鍵の内容で置き換えます。
  • 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がプロビジョニングする様子を確認しましょう。
$ terraform plan
+ opc_compute_instance.instance1
...
+ opc_compute_ip_reservation.ipreservation1
...
+ opc_compute_ssh_key.sshkey1
... 
Terraformは、作成済(+)、更新済(~)、または破棄済( - )リソースの詳細を出力します。今回の場合、3つのリソースが作成されています。すべてがうまくいっているようなので、リソースをプロビジョニングしてみましょう。
$ 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経由でアクセスできます。
ssh opc@129.144.xx.126 -i ~/.ssh /id_rsa
ただし、明示的なセキュリティ・リストの関連付けを宣言していないため、Oracle Compute Cloudは、sshアクセスを可能にするデフォルトのセキュリティ・リストにインスタンスを自動的に関連付けます。
設定ファイルが変更されると、terraform plan/applyを再度実行すれば、配備されたリソースの作成や更新に必要な変更だけが計算され、ターゲットとする設定に一致させます。
最後に、この基本的なチュートリアルを完了するために、作成したすべてのリソースを削除してクリーンアップします。すべてのTerraformプロビジョニングされたリソースは、以下のコマンドを実行すれば削除できます。
$ terraform destroy
...
Destroy complete! Resources: 3 destroyed.

What Next?

ここまでの説明で基本的な例をご紹介しました。ストレージ、セキュリティ、およびネットワークの追加リソースを追加し、他のプロバイダやプロビジョナーと組み合わせて、複数のサービスにわたって完全なインフラストラクチャとアプリケーションのデプロイをオーケストレーションすることができます。
サポート対象リソースの完全なセットは、Oracle Public Cloud Providerのドキュメントを参照してください。
Oracle Public Cloud Provider
https://www.terraform.io/docs/providers/opc/index.html
より詳細なOracle Compute Cloud Terraform構成例については、以下のURLを参照してください。
Terraform examples for the built-in Oracle OPC Provider
https://github.com/oracle/terraform-provider-compute/tree/master/examples/opc
Oracle Bare Metal Cloud ServiceのTerraformのサポートは、現時点では外部プラグインとして利用できます。外部プラグインは以下から入手できます。
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
https://github.com/hashicorp/terraform/issues
オープンソースプロジェクトとして、Terraform Oracle Public Cloudプロバイダへのコミュニティによるコントリビュートを歓迎しています。詳細については、Terraform寄稿ガイドラインを参照してください。
Contributing to Terraform
https://github.com/hashicorp/terraform/blob/master/.github/CONTRIBUTING.md

0 件のコメント:

コメントを投稿