TerraformのOCI向けProviderがTerraform公式で提供されるようになりました🎉

こんにちは id:dhigashi です。

当ブログでは何度か Terraform を利用して Oracle Cloud Infrastructure を操作する方法をご紹介してきました。

これまで OCI 向けの Provider は オラクルによって提供されており、利用者がプラグインとして導入する必要がありましたが、先日 Terraform の公式の Provider として提供され、すぐに利用できるようになりました。

先月のリリースなので若干遅くなってしまいましたが、試してみたいと思います。

Oracle Cloud Infrastructure BlogHashiCorp Blogでの紹介

検証

今回は、過去に手動で導入した terraform-provider-oci バージョン2系 を用いて構成した環境に対して、公式で提供されるようになった バージョン3系 にアップグレードし操作を行ってみます。

検証に用いた Terraform のバージョンは以下の通りです。

$ terraform version
Terraform v0.11.8

まず、バージョン3へのアップグレードガイド に従い、導入していた古いプラグイン (バージョン2系) を削除し、
terraform init コマンドを実行します。

$ terraform init

Initializing the backend...

Initializing provider plugins...
- Checking for available provider plugins on https://releases.hashicorp.com...
- Downloading plugin for provider "oci" (3.4.0)...

The following providers do not have any version constraints in configuration,
so the latest version was installed.

To prevent automatic upgrades to new major versions that may contain breaking
changes, it is recommended to add version = "..." constraints to the
corresponding provider blocks in configuration, with the constraint strings
suggested below.

* provider.oci: version = "~> 3.4"

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

oci provider が降ってくるようになっています。バージョンは最新の 3.4.0 でした。
確認の為に terraform plan コマンドを実行します。

$ terraform plan
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.

oci_core_vcn.SampleVCN: Refreshing state... (ID: ocid1.vcn.oc1.phx.aaaaaaaa....)
略

------------------------------------------------------------------------

No changes. Infrastructure is up-to-date.

This means that Terraform did not detect any differences between your
configuration and real physical resources that exist. As a result, no
actions need to be performed.

構成には何も変更を加えていないので、正しい結果となっています。

次に構成を変更して環境に適用できるかを、Object Storage のバケットを追加して試します。

$ terraform plan
略

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  + oci_objectstorage_bucket.TEST
      id:              <computed>
      access_type:     "NoPublicAccess"
      compartment_id:  "<<compartment_id>>"
      created_by:      <computed>
      etag:            <computed>
      freeform_tags.%: <computed>
      name:            "test"
      namespace:       "<<namespace>>"
      storage_tier:    <computed>
      time_created:    <computed>


Plan: 1 to add, 0 to change, 0 to destroy.

------------------------------------------------------------------------

Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.

変更が確認できたので適用します。

$ terraform apply
略

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  + oci_objectstorage_bucket.TEST
      id:              <computed>
      access_type:     "NoPublicAccess"
      compartment_id:  "<<compartment_id>>"
      created_by:      <computed>
      etag:            <computed>
      freeform_tags.%: <computed>
      name:            "test"
      namespace:       "<<namespace>>"
      storage_tier:    <computed>
      time_created:    <computed>


Plan: 1 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

oci_objectstorage_bucket.TEST: Creating...
  access_type:     "" => "NoPublicAccess"
  compartment_id:  "" => "<<compartment_id>>"
  created_by:      "" => "<computed>"
  etag:            "" => "<computed>"
  freeform_tags.%: "" => "<computed>"
  name:            "" => "test"
  namespace:       "" => "<<namespace>>"
  storage_tier:    "" => "<computed>"
  time_created:    "" => "<computed>"
oci_objectstorage_bucket.TEST: Creation complete after 1s (ID: atomitech/test)

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

構成の適用が完了し、Object Storage のバケットが正しく作成できる事を確認できます。

f:id:dhigashi:20181017100721p:plain

以上の通り、過去のバージョンで構成した環境に対してプロバイダをアップグレードし、正しく操作できる事が確認できました。

OCI Provider について

冒頭の Oracle Cloud Infrastructure Blog で Terraform Provider への注力について以下のように述べていたり、

Over the last few months, we have invested heavily in Terraform and now support Terraform provisioning across all Oracle Cloud Infrastructure resources.

HashiCorp とパートナーシップを結んだりと OCI Provider には本腰を入れているようです。

f:id:dhigashi:20181017094741p:plain

前述のコメントの通り開発はとても活発で、毎週のように新しいバージョンがリリースされ機能が追加されていっているので、しっかりウォッチしたいと思います。

参考資料