UNIX型システムでのTerraformの構成について

Terraformを使用してOracle Cloud Infrastructureコンポーネントを作成するには、Terraformをダウンロードしてインストールする必要があります。必要なインフラストラクチャ・コンポーネントを作成する構成ファイルを作成するTerraformモジュールもダウンロードします。

TerraformをインストールしてTeraformモジュールを保存するシステムは、オンプレミスまたはクラウドのいずれかになります。便宜上、これはローカル・システムまたはローカル・ホストと呼ばれます。

Terraformを実行する前に、次のようにします。

  • コンピュート・インスタンスにアクセスできるようにするために使用するSSH鍵ペアを生成します

  • Terraformによって行われたAPIコールの認証に使用するAPI署名キーの生成

  • アクセスの認証とそのプランの実行にTerraformによって使用される環境変数を設定します

これらの手順を完了したら、Terraform構成ファイルを適用して、インフラストラクチャ・コンポーネントをOracle Cloud Infrastructure上に作成します。

Terraformのインストール

TerraformをLinuxまたはUNIXに類似したシステムにインストールするには、Terraform Webサイトから適切なパッケージをダウンロードします。

  1. https://www.terraform.io/downloads.htmlに移動します。
  2. ローカル・システムに適切なパッケージをダウンロードします。
  3. パッケージをパス/usr/local/bin/に抽出します。
    これ以上のインストールは必要ありません。Terraformがインストールされ、使用できる状態になりました。

    Terraformをローカル・システムの他の場所に抽出することもできます。場所がシステムのPATH変数に追加されていることを確認してください。

  4. インストールを確認してバージョンを確認するには、端末を開いてterraform -versionを実行します。
    出力にTerraformバージョンが表示されます。例: Terraform v0.11.8

Terraformモジュールのダウンロード

Terraformを使用したOracle Cloud Infrastructureでのインフラストラクチャ・コンポーネントの作成を開始するには、Terraformモジュールをダウンロードしてください。

  1. GitまたはWebブラウザを使用して、ローカル・システムでTerraformモジュールのクローンを作成またはダウンロードします。Gitリポジトリへのリンクについては、左側のナビゲーションで「コードのダウンロード」をクリックします。
  2. Terraformモジュールを解凍するか、ローカル・システムのディレクトリに抽出します。
  3. Terraformモジュールがあるディレクトリにナビゲートします。terraform initを実行します。これにより、TerraformのOracle Cloud Infrastructureプロバイダもダウンロードされます。
    Terraformは、OCIプロバイダ・プラグインとともにモジュールを初期化します。初期化が完了すると、メッセージTerraform has been successfully initialized!が表示されます。

BastionホストにアクセスするためのSSH鍵ペアの生成

SSH鍵ペアを使用すると、パブリック・サブネットに作成されたインスタンスに安全にアクセスできるようになります。ローカル・ホストにSSH鍵ペアを生成します。そのあと、TerraformモジュールはSSH公開鍵をベース・ホストに追加します。ベース・ホストにパブリック・インターネット経由で接続する必要がある場合は、アクセスを認証するためのSSH秘密鍵を提供します。

ssh-keygenユーティリティを使用してSSH鍵ペアを生成できます。SSH鍵にパスフレーズを設定しないでください。

  • ssh-keygenユーティリティを使用してSSH鍵ペアを生成するには、端末でssh-keygen -t rsa -N "" -b 2048 -C "<key_name>" -f <path/root_name>と入力します。
    コマンドの説明は次のとおりです。
    • -t rsaは、RSAアルゴリズムを使用して鍵を生成することを指定します。

    • -N ""は、このキーに関連付けるパスフレーズを指定します。引用符の間には何も入力しないでください。鍵はパスフレーズなしで作成されます。

    • -b 2048は、2048ビット・キーを生成することを指定します。これがデフォルト値であり、最小推奨値でもあります。

    • -C "<key_name>"は、この鍵ペアの名前を指定します。

    • -f <path/root_name>は、鍵が保存される場所と、公開鍵および秘密鍵のルート名を指定します。公開鍵の末尾には、ルート名に.pubが付加されます。

SSH鍵ペアが生成され、指定した場所に保存されます。この場所を書き留めておきます。

他のインスタンスにアクセスするためのSSH鍵ペアの生成

バックエンド・ホストは、パブリックIPアドレスを持たない他のインスタンスへのSSH転送を可能にし、パブリック・インターネットを介したアクセスを許可しないようにするために使用されます。ベース・ホストから他のインスタンスに安全にアクセスするには、リモート・サブネット内のインスタンスに格納されている公開鍵がローカル・マシンに格納されている秘密鍵と一致するSSH鍵ペアを使用します。セキュリティのベスト・プラクティスとして、このSSH鍵ペアはベース・ホストへのアクセスに使用されるSSH鍵ペアと同じにしないでください。

ローカル・ホストでssh-keygenを使用して、別のSSH鍵ペアを生成します。このSSH鍵ペアを保存する場所を記録しておきます。

API署名キーの生成

Oracle Cloud InfrastructureでTerraformスクリプトを認証するには、「プライバシ拡張メール(PEM)」形式でRSAキー・ペアを指定する必要があります。このAPI署名キーは、インスタンスへのアクセスに使用するSSH鍵ペアとは異なります。OpenSSLを使用すると、この鍵ペアを生成できます。

  1. ホーム領域に非表示のディレクトリを作成して、PEMキーを格納します。入力: mkdir ~/.oci
  2. 秘密鍵を生成するには、OpenSSLを使用します。秘密鍵を生成する場合は、2048ビット以上を指定してください。入力: openssl genrsa -out ~/.oci/key_name.pem 2048
  3. 秘密鍵のアクセス権を変更して、ユーザーのみが秘密鍵を読み取ることができるようにします。入力: chmod go-rwx ~/.oci/key_name.pem
  4. 次に、OpenSSLを使用して、指定した秘密鍵の公開鍵を生成します。入力: openssl rsa -pubout -in ~/.oci/key_name.pem -out ~/.oci/key_name_public.pem
任意の場所にAPI署名キーを格納できます。ただし、この場所をメモしておいてください。

コンソールを使用してAPI署名鍵をアップロードします

API署名キーを生成した後、関連付けられているユーザーの公開鍵をOracle Cloud Infrastructureにアップロードする必要があります。初めてAPI署名キーをアップロードする際には、コンソールを使用する必要があります。その後、APIを使用してAPIキーをアップロードすることもできます。

  1. Oracle Cloud Infrastructureコンソールにサインインします。
  2. アイデンティティ」をクリックし、「ユーザー」をクリックします。
  3. API署名キーを追加するユーザーをクリックします。
  4. 「ユーザーの詳細」ページで、「公開鍵の追加」をクリックします。
  5. ローカル・システムで公開鍵をコピーするには、cat ~/.oci/key_name_public.pem | pbcopyと入力します。
    異なる場所にキーを保存した場合は、かわりにその場所のパスを入力します。
  6. コンソールで公開鍵の値を貼り付けて、「追加」をクリックします。

環境変数の設定

ここで提供されるTerraformモジュールを使用すると、テキスト・ファイルで必要な値を指定して環境変数を設定できます。この場合、ファイルを単にソースにして、必要なすべての環境変数が適切に設定されていることを確認できます。

開始する前に、Oracle Cloud Infrastructureコンソールにログインします。コンソールを使用して次の情報を検索します。

  • Tenancy Oracle Cloud Infrastructure ID (OCID)

  • ユーザーOCID

  • 使用するAPI署名キーのフィンガープリント

  • リージョン

  • コンパートメントOCID

また、API署名キーおよびSSH鍵のペアがローカル・システムに格納されている場所も確認してください。

  1. ローカル・システムで、Terraformモジュールが存在するディレクトリにナビゲートします。
  2. テキスト・エディタでファイルenv-varsを開きます。
  3. env-varsファイルには4つのセクションがあります。「認証の詳細」セクションから始めます。
    1. Tenancy OCIDを入力します。Tenancy OCIDは、Oracle Cloud Infrastructureコンソールの下部にあります。これは、ocid1.tenancy.oc1..aaaaa...のような文字列です。この値をenv-varsファイルに貼り付けます。
    2. ユーザーOCIDを入力します。ユーザーOCIDを検索するには、Oracle Cloud Infrastructureコンソールで、「アイデンティティ」をクリックし、「ユーザー」をクリックします。ユーザーOCIDとともに、ユーザーのリストが表示されます。ユーザー名の下にある「コピー」をクリックして、必要なユーザーOCIDをコピーします。この値をenv-varsファイルに貼り付けます。
    3. API署名キー・フィンガープリントを入力します。Oracle Cloud Infrastructureコンソールの「ユーザー」ページで、ユーザーをクリックするとユーザーの詳細ページが表示されます。「APIキー」セクションにリストされているキーからAPIキー ・フィンガープリントをコピーします。この値をenv-varsファイルに貼り付けます。
    4. ローカル・システム上のAPI秘密鍵の完全なパスとファイル名を入力します。
  4. env-varsファイルのリージョン・セクションで、インフラストラクチャ・コンポーネントを作成するリージョンを入力します。現在表示しているリージョンがOracle Cloud Infrastructureコンソールの上部に表示されます。コンソールを使用して、アクセス権がある他のリージョンを検索することもできます。
  5. env-varsファイルの区分セクションで、インフラストラクチャ・コンポーネントを作成する区分のcompartment OCIDを入力します。前に指定したユーザーが、ここで指定する区分に必要な権限を持つグループに属していることを確認してください。コンパートメントOCIDを検索するには、Oracle Cloud Infrastructureコンソールに移動します。「アイデンティティ」をクリックし、「区分」をクリックします。コンパートメントOCIDとともに、区分のリストが表示されます。区分名の下の「コピー」をクリックして、必要な区分OCIDをコピーします。この値をenv-varsファイルに貼り付けます。
  6. env-varsファイルの公開鍵/秘密鍵セクションで、ベース・ホストおよびその他のインスタンスに対して、ローカル・システム上の適切なSSH公開鍵および秘密鍵の完全なパスとファイル名を入力します。秘密鍵はopenssh形式にする必要があります。
  7. すべての値を正しく入力していることを確認してください。値を省略した場合、Terraformの実行時に入力を求めるプロンプトが表示されます。正しくない値を指定すると、Terraformがエラー・アウトします。すべての値が正しいことを確認したら、env-varsファイルを保存して閉じます。
  8. env-varsファイルに指定された環境変数を設定するには、端末を開き、Terraformモジュールのあるディレクトリにナビゲートします。入力: source ./env-vars

地形構成の検証

必要な環境変数をすべて設定したら、Terraformを実行する準備ができていることを確認します。

  • 端末で、Terraformモジュールがあるディレクトリに移動します。入力: terraform plan
    このコマンドの出力は、現在のディレクトリにあるすべてのモジュールのすべての構成について実行計画を示します。この出力には、現在のインフラストラクチャを構成に合せて変更するためにTerraformに実行されるアクションが記述されます。現在作成されているコンポーネントがない場合、terraform applyを実行すると作成されるコンポーネントのリストが出力に表示されます。このコマンドではコンポーネントが作成されないため、構成が成功し、必要な認証値がすべて適切な環境変数に正しく格納されていることを確認するのみで、安全に実行されます。