TerraformでOCIの構築を自動化する - Oracle Cloud Infrastructureアドバンスド

Version 17

    目次に戻る : チュートリアル : Oracle Cloud Infrastructure を使ってみよう

     

    このチュートリアルのシリーズでは、Oracle Cloud Infrastructure (OCI) で環境の構築を行う方法として、主にGUIのコンソールから実施する方法や、APIやCLIを利用してコーディングで実施する方法について解説してきました。

    クラウド上でちょっとアプリの動作検証をしたり、POC(Proof of Concept)を行ったり、という用途であればコンソールやCLIでも十分なのですが、何度も同じような環境を構築したり、開発の状況に応じてクラウドの環境の構成を変化させていくような場合には、専用のオーケストレーションツールを利用してクラウド上のインフラ構成の標準化(コード化)と構築の自動化を行って効率化を行うといい場面があります。

     

    OCI では、そのような Infrastructure as Code を実現する専用のオーケストレーションツールを持っているわけではありませんが、世の中でよく使われるオーケストレーションツールを利用して OCI のインフラ構築を効率化できるように、さまざまなプラグイン(ツールによって呼び名が違います)を開発して公開しています。

     

    Oracle社が開発している、サードパーティ製オーケストレーションツール向けのOCIプラグインの例としては、以下のようなものがあります。

    すべてオープンソースとしてGitHubなどでソースを公開しています。サポートはOracle Cloudサポートのほか、GitHub上でもバグレポートなどが可能です。

     

     

    この章では、このうちの Terraform provider for Oracle Cloud Infastructure を利用して、OCI構築の自動化と、構成のコード化 (Infrastructure as Code) を実現する方法について、学習します。

     

    所要時間 : 約60分

     

    前提条件 :

    1. Bashターミナル・コンソールがセットアップされていること
    2. チュートリアル : Oracle Cloud Infrastructure を使ってみよう - 第1章 コンソールへのアクセスとサービスの理解 を完了し、Oracle Cloud Infrastructure コンソールにアクセスでき、どこかのコンパートメント(ルート・コンパートメントも可)に対して管理権限を持っていること
    3. コマンドライン(CLI)でOCIを操作する - Oracle Cloud Infrastructureアドバンスド を完了していること

     

    注意 : チュートリアル内の画面ショットについては Oracle Cloud Infrastructure の現在のコンソール画面と異なっている場合があります

     

    1. Terraform環境のセットアップ

    今回のチュートリアルでは、Terraformを手元のPC環境にセットアップし、OCIにリモートでアクセスする形式で実行します。

    Terraformは、GO言語で書かれているため、様々なOS環境にインストールすることができることができますので、好きなクライアントOSを選択して実行してください。

     

    1-1. Terraformのインストール

    Terraformをダウンロードし、インストールします。

    下記の例では、Windows OSのクライアントに Terrafrom for Windows 64-bit版をインストールする例を示しています。

     

    1. https://www.terraform.io/downloads.html にアクセスし、お使いの環境に合わせた Terraform実行ファイルをダウンロードします
      64-bitのOSであれば、32-bit版/64-bit版いずれのTerraformもインストールすることができます。32-bit版のOSを利用する場合は、32-bit版のTerraformをダウンロードしてください。

      WS000295.JPG

    2. ダウンロードしたzipファイルを解凍します

    3. 任意の場所にTerraform用のディレクトリを作成し、terraform.exe を配置します
      (例) C:\Program Files\Terraform\terraform.exe

    4. Path環境変数に、作成したディレクトリを追加します。
      Windows OSでは、コマンドプロンプトで以下コマンドを発行すると、環境変数の操作が行なえます。
      setx PATH=%PATH%;<Terraformのインストールフォルダ>
      <Terraformのインストールフォルダ> を C:\Program Files\Terraform などの適切な値に変更してください

    5. コマンドプロンプトを開いて以下のコマンドを実行し、terraform が起動できることを確認します
      $ terraform
      以下のような応答が返ってきていれば、インストールとパスの設定が無事に完了しています。

      Usage: terraform [--version] [--help] <command> [args]

      The available commands for execution are listed below.
      The most common, useful commands are shown first, followed by
      less common or more advanced commands. If you're just getting
      started with Terraform, stick with the common commands. For the
      other commands, please read the help and docs before usage.

      Common commands:
          apply              Builds or changes infrastructure
          console            Interactive console for Terraform interpolations
      ...(以下略)...


    1-2. Terraform Provider for Oracle Cloud Infrastructure のインストール

    OCI向けのTerraformプラグイン (Terraform Provider for Oracle Cloud Infrastructure) をインストールします。

     

    1. ブラウザから以下のURIにアクセスし、お使いのOSに合わせた最新リリースのTerraform Provider for Oracle Cloud Infastructure をダウンロードします。
      バイナリーのタイプは、1-1でダウンロードしたTerraformと同じものを選択してください。64bit版Windowsの場合は windows_amd64.zip をダウンロードします。
      https://github.com/oracle/terraform-provider-oci/releases

    2. ダウンロードしたzipファイルを解凍します

    3. 以下のフォルダーを新規作成します
      %APPDATA%\terraform.d\plugins

    4. 解凍したフォルダの中にある terraform-provider-oci_vx.x.x.exe を作成したフォルダに配置します

     

    2. Oracle Cloud Infrastructure へのアクセス情報の収集

    Terraform は基本的にAPIを利用して Oracle Cloud Infrastructure にアクセスを行います。このためアクセスの設定に関しては、CLI等の他のツールを利用する場合と共通しています。

    ここでは、Terraform に対してOCIへのアクセス権限への設定を行うための情報を収集しますが、作業ステップ自体はOCI-CLIの手順を参考に実施してください。既にOCI-CLIのセットアップを完了している場合は、その設定をそのまま利用することができますので、この章はスキップできます。

     

    1. コマンドライン(CLI)でOCIを操作する - Oracle Cloud Infrastructureアドバンスド2. Oracle Cloud Infrastructure へのCLIアクセスの準備 に従って、ユーザーの作成とOCID情報の収集を完了してください

       

    2. コマンドライン(CLI)でOCIを操作する - Oracle Cloud Infrastructureアドバンスド 3-1. 設定ファイルとAPIキーの生成 と、3-2. APIキーのアップロード に従って、アクセス鍵ペアの作成とOCIへの公開鍵登録を完了してください

     

    3. インスタンス用の鍵ペアの作成

    後のステップで利用するサンプルでは、TerraformからOCI上に新しいコンピュート・インスタンスを作成する工程があります。その際にアクセス用として埋め込むssh鍵ペアを作成します。

    2048bit以上のOpenSSH形式のRSA鍵ペアを作成済の方は、このステップはスキップすることができます。

     

    1. 任意の Bash ターミナルを起動します

    2. 以下のコマンドを実行し、新しい鍵ペアを作成します

      $ ssh-keygen

      対話式ダイアログが起動していきますので、指示に従って入力してください。基本的にはそのままリターンキーを押していけばOKです。

    3. ~/.ssh 以下に、id_rsa.pub (公開鍵) と、id_rsa (秘密鍵) のセットが作られていることを確認します

     

    4. Terraformの動作テスト

    Terraformの動作をテストします。

     

    1. このチュートリアルの末尾に添付されている tf.zip というファイルをダウンロードし、解凍します

    2. 解凍された tflab というフォルダを、%USERPROFILE%以下に配置します

    3. ステップ2で確認したOCIへのアクセス情報を、ユーザー環境変数の設定スクリプトに設定します。
      USERPROFILE%\tflab\demo\env-vars を任意のテキストエディタで開き、以下の箇所をご自身の環境に合わせて編集します
      ### Authentication details
      export TF_VAR_tenancy_ocid=<テナントのOCID>
      export TF_VAR_user_ocid=<ユーザーのOCID>
      export TF_VAR_fingerprint=<鍵のフィンガープリント>
      export TF_VAR_private_key_path=~/.oci/oci_api_key.pem
      ### Compartment
      export TF_VAR_compartment_ocid=<コンパートメントのOCID>
      ### Public/private keys used on the instances
      export TF_VAR_ssh_public_key=$(cat ~/.ssh/id_rsa.pub)
      export TF_VAR_ssh_private_key=$(cat ~/.ssh/id_rsa)
      ### Region
      export TF_VAR_region=us-ashburn-1
      <ユーザーのOCID>、<テナントのOCID>、<コンパートメントのOCID> には、作業ステップ1で確認した値を入力してください。
      鍵のフィンガープリントがわからない場合は、%USERPROFILE%/.oci/config ファイルの中か、またはOCIコンソールのapi.userというユーザーに登録されている鍵から値を取得できます。
      リージョンについては、us-asuburn-1である必要はありませんので、チュートリアルで利用したい有効なリージョンを選択してください。

    4. Bash ターミナルを起動し、~/tflab/demo ディレクトリに移動します
      $ cd tflab/demo
    5. 以下のコマンドで環境変数を設定します
      $ source env-vars
    6. 以下のコマンドで、環境変数が適切に設定されていることを確認します
      $ env | grep TF_VARS


    7. 以下のコマンドでテストを実行し、Terraform が適切に動作することを確認します
      $ terraform init
      $ terraform plan

      terraform init コマンドは、インターネットにアクセスして必要なプロバイダーをインストールします。Bash ターミナル・コンソールからインターネットに接続できない場合はコマンドはエラーで失敗します。特にインターネットへのアクセスにプロキシサーバーを経由する必要がある環境の場合、Bash ターミナルによってはWindowsのプロキシサーバー設定を参照しない場合があります。その際は HTTPS_PROXY 環境変数に適切にプロキシサーバーの情報を設定してください。

      export HTTPS_PROXY=<プロキシサーバーのホスト>:<プロキシサーバーのポート>

     

    5. サンプル1 - Terraformを使った単純なインスタンスの作成

    Terraformの環境のセットアップは完了したので、実際にサンプルのテンプレートを利用してOracle Cloud Infrastructure上にコンポーネントを作成していきます。

    tflabsフォルダの中のdemoというフォルダにあるテンプレートを使うと、以下のようなVCNの中にひとつインスタンスがある簡単な環境を作成することができます。

    WS000335.JPG

     

    5-1. 環境の作成

    まずは、インスタンスの作成を行います。

     

    1. ~/tflab/demoディレクトリに移動します
      $ cd ~/tflab/demo
    2. env-varsを読み込んで環境変数を設定します
      $ source env-vars
    3. Terraform実行にあたってのプランを作成します、その際に作成したプランをplan1というファイルに出力します
      $ terraform plan -out=plan1
      プランコマンドは、実際に構成を行う前のドライテストを行い、その結果をプランファイルに格納します。
      This plan was saved to: plan1
      と出力されたら、プランは成功しています。

      例えばこのサンプルを実行するプランでは、+ で示された6つのコンポーネントが追加され、~ で示された1つのコンポーネントが更新されることがわかります。

    4. プランが問題ないことを確認したら、そのプランをもとに適用(Apply)を行います
      $ terraform apply plan1
      確認のためのダイアログが表示されるので、Enter a value : のところに yes と入力し、Enterキーを押します。

      このdemoの実行にはしばらく時間がかかります。(5分~10分程度)
      また、実行中はたくさんの出力がスクロールします。

      処理が成功すると、Apply complete! Resources: 6 added, 0 changed, 0 destroyed というメッセージが表示されます。


    5. Terraform は、Apply の実行結果を terraform.tfstate というファイルに書き込みます。
      Applyの実行が完了したら、以下のコマンドでtfstateファイルが出力されていることを確認します。
      $ cat terraform.tfstate
      tfstateは、Terraformがデプロイを行ったリソースの状態を管理するために作成するファイルです。tfstateファイル事態はバイナリで保存されていますが、以下のshowコマンドを発行するとtfstateファイルの中身を人がわかるように出力してくれます。
      $ terraform show



    6. OCIのコンソールにアクセスし、Terraformによって関連するコンポーネントが作成されていることを確認します



    5-2. 環境の変更

    Terraform の特長の一つとして、宣言型でツールが実行されるためにスクリプトを変更することで既存の環境を変更することができる点が挙げられます。

    このステップではその特長を掴むために、既に環境を作成済みのdemoフォルダのスクリプトに変更を加えて、その変更をデプロイ済み環境に適用する方法を実行してみます。

     

    1. Windowsエクスプローラーで、%USERPROFILE%/tflab/demo フォルダを開きます

    2. フォルダの中には、Terraformに指示を与えるための .tf という拡張しのファイルが複数定義されています。
      今回は、作成済みのインスタンスに新しくブロック・ボリュームを作成してアタッチしてみますので、まずはブロック・ボリュームの定義がされている block.tf というファイルをテキストエディタで開いてみます。

    3. block.tf ファイルの中には、既にブロック・ボリュームを作成する定義が記述されていますが、初期状態ではコメントアウトされています。
      2行目 (##resource...) 以降のコメントアウト(##)をすべて削除し、保存してファイルを閉じます。


    4. Bash ターミナルに戻り、以下のコマンドを発行します
      $ terraform plan -out=plan2
      planコマンドを実行すると、既に作成されている環境の情報をtfstateファイルから読み出して、tfファイルの指示との差分を抽出してデプロイ・プランを作成します。
      今回は、VCN等のネットワークコンポーネントや、インスタンスそのものには変更がなく、新たにブロック・ボリュームとそのボリュームのインスタンスへのアタッチのみが作成されるプランが作成されます。


    5. applyコマンドで、作成したplan2を適用します。
      $ terraform apply plan2
      今回は、ブロック・ボリュームの作成とアタッチ作業のみですので、1分以内には適用が完了します。
      処理が完了し、Apply complete! Resources: 2 added, 0 changed, 0 destroyed というメッセージを確認します。


    6. OCIのコンソールにアクセスし、インスタンスに新しく作成したブロック・ボリュームがアタッチされているこを確認します。


    5-3. 環境の破棄

    Terraformで作成したリソースは、Terraformを使って破棄することができます。ここではその手順について学びます。

     

    1. Bash ターミナルに戻り、以下のコマンドを発行します。
      $ terraform plan -destroy
      plan -destroy コマンドは、実際の破棄を行う前に、どのような作業を行うかのプランを表示するコマンドです。

      プランの出力結果からは、- の印がついた8つのリソースが破棄(destroy)されることがわかります。

    2. 以下のコマンドを発行し、OCIのリソースを破棄します。
      $ terraform destroy

      破棄にあたっては、本当に破棄していいかの確認を求めるダイアログへの返答が求められます。
      Do you really want to destroy? と聞かれますので、 yes と入力して Enter キーを押します。
      すると、リソースの破棄処理が開始されます。
    3. 処理完了のメッセージを確認します


    4. OCIコンソールにアクセスし、Terraformが作成したオブジェクトが破棄されていることを確認します。


     

    6. その他のシナリオの実行

    tflab フォルダの中には、他にも lbaas_fullv4 というフォルダの中にAPサーバー2台とロードバランサーを構成するシナリオが収録されています。

    また、その他にも GitHub の terraform-provider-oci リポジトリの中には、各種サンプルが収録されています。

    これらのサンプルを参考に、いろいろと試してみてください。

     

    目次に戻る : チュートリアル : Oracle Cloud Infrastructure を使ってみよう