TerraformでOCI環境にSSH接続できるWebサーバを構築

目次

はじめに

この記事では、Terraformを利用してOCI環境にVCNのネットワークリソースを構築し、さらにOracle Linux 9とApacheを実装したインスタンスを作成する方法について詳しく紹介します。

この記事の目的は、OCI環境の基本的な構築方法から、ネットワーク設定、インスタンスの作成、そしてローカルPCからのSSH接続までを一連の手順として解説することです。

Terraformとは

HashiCorpが開発しているインフラ構成をコードを使って管理するためのツールです。
HCLという記法でコードを記述し、インフラの状態を管理することができます。

IaC(Infrastructure as Code) を実現するツールのことであり、
サーバーやネットワークといったインフラの構成をプログラムのコードで書いて、書いたコードを元にインフラを構築することができます。

Terraformはシンプルな構文を使用し、複数のクラウドとオンプレミスのデータセンターにわたってインフラストラクチャーをプロビジョニングし、構成の変更に応じてインフラストラクチャーを安全かつ効率的に再プロビジョニングします。

前提条件

  • 開発環境:開発環境としてVisual Studio Code(VSCode)を使用しています。

  • Terraformのインストール:VSCode上でTerraformが利用できるようにインストールをしてください。Terraformの拡張機能がVSCodeにインストールされているか、Terraform CLIがローカルマシンにインストールされていることを確認してください。

  • OCIアカウント: Oracle Cloud Infrastructureのアカウントを持っていることを確認んしてください。必要なAPIキーや秘密鍵などの設定も事前に行っておいてください。OCI上にAPIキーを登録する方法は、TerraformでOCIの構築を自動化するのチュートリアルの、「2.Terraform環境の構築」で登録方法が記載されていますので、ご参照をして頂ければと思います。

  • SSHキーの準備:ローカルPCからインスタンスにSSH接続するための公開鍵と秘密鍵を事前に生成しておいてください。

Terraformで作成するリソースの構成図

ローカルのPCからインスタンスにSSH接続できるようにする環境のイメージです。 VCNを作成して、その中にインスタンスを起動し、そのインスタンスにApacheをインストールして、インターネット経由でアクセスできる環境を構築します。

ディレクトリの構造

以下は、本記事で作成するtfファイルのディレクトリの構成を記載しています。

ファイルとディレクトリの説明

以下に、各ディレクトリとファイルの役割についてを説明します。

実行環境

本記事に記載している手順は、以下の環境にて実施しています。

tfファイルの作成

本記事では、Terraformを利用してOCI(Oracle Cloud Infrastructure)環境にリソースを作成するための設定ファイルについて解説します。

まずは、Terraformのバージョンとプロバイダーのバージョンを指定するためのmain.tfファイルの中身を説明します。

main.tfファイルの構造

ファイルの中身は、HCL(HashiCorp Configuration Language)形式で記載しています。

今回はOCIにリソースを作成するため、providersブロックはociを指定します。

terraformブロック内で使用するTerraformのバージョンとOCIプロバイダーのソースとバージョンを追記しています。

以下がその具体的な内容です。

説明

・terraformブロック: 使用するTerraformのバージョンを指定します。本記事では、バージョン1.3.7を使用しています。

・required_providersブロック: 使用するプロバイダーを指定します。OCIプロバイダーを使用するために、hashicorp/ociをソースとして指定し、バージョン4.123.0を使用しています。

このように、プロバイダーのバージョンを明示的に指定することで、プロジェクトの依存関係を明確にし、一貫性のある環境を構築することができます。

provider.tfファイルの構造

以下は、プロバイダーを設定するためのファイルであるprovider.tfの内容について解説します。

説明

・provider "oci"ブロック: OCIプロバイダーを指定しています。これにより、TerraformがOCI上でのリソースの作成や管理を行うことが可能になります。

・tenancy_ocid: テナンシーのOCID(Oracle Cloud Identifier)を設定します。この値は、OCIアカウントのテナンシーを一意に識別します。

・user_ocid: ユーザーのOCIDを設定します。この値は、TerraformがOCIにアクセスする際のユーザーを識別します。

・private_key_path: プライベートキーのファイルパスを設定します。このファイルは、OCIにアクセスするための認証情報として使用されます。

・fingerprint: フィンガープリントを設定します。この値は、SSHキーのフィンガープリントとして使用され、認証時に使用されます。

・region: リージョンを設定します。OCIリソースが作成される地理的な場所を指定します。

variables.tfファイルの構造

以下は、グローバル変数のファイルの構造で、外部から変数の値を変更できます。

.tf拡張子のファイルでvariableブロックを定義し、.tfvars拡張子のファイルで変数に代入します。

また、特別なファイルを使用せず環境変数から値を渡すことも可能です。その場合はTF_VAR_変数名という環境変数に値を代入します。
グローバル変数に設定された値を参照するにはvar.変数名を使用します。

変数に設定できる型については、Terraformの公式ホームページで公開しているTypes and Valuesを参照してください。

説明

・variables.tfファイルでは、プロジェクト全体で使用されるグローバル変数を定義しています。

・各変数には、typeで型を指定しています。これにより、Terraformが入力値を適切にバリデーションし、型が一致しない場合はエラーを返します。

variable.tfvarsファイルの構造

以下は、variable.tfvarsファイルを使用することで、プロジェクトごとに異なる設定値を簡単に管理し、再利用することができるファイルの構造です。

説明

・variable.tfvarsファイルでは、プロジェクトに固有の変数の値を指定します。

・各変数には、その名前と値が含まれています。これらの値は、Terraformコードで使用され、OCI環境を構築する際のパラメーターとして機能します。

network.tfファイルの構造

以下は、network.tfファイルを使用して、ネットワークリソースを一元的に管理し、インフラストラクチャの構成を簡単に設定できるファイルです。

説明

・oci_core_virtual_networkリソースはVCN(仮想クラウドネットワーク)を作成します。
CIDRブロック、コンパートメントID、表示名、およびDNSラベルを設定します。

・oci_core_subnetリソースは、作成したVCN内にサブネットを作成します。
CIDRブロック、コンパートメントID、表示名、DNSラベル、セキュリティリスト、およびルートテーブルを指定します。

・oci_core_security_listリソースは、セキュリティリストを作成し、インバウンドおよびアウトバウンドのセキュリティルールを定義します。
これにより、特定のプロトコル(TCP、ICMP)とポート範囲が許可されます。

・oci_core_route_tableリソースは、ルートテーブルを作成し、ルートルールを定義します。
ここでは、すべてのトラフィック(0.0.0.0/0)がインターネットゲートウェイにルーティングされるように設定します。

・oci_core_internet_gatewayリソースは、インターネットゲートウェイを作成し、VCNに接続します。
これにより、インターネットアクセスが可能になります。

compute.tfファイルの構造

以下は、コンピュートインスタンスを構築するためのcompute.tfファイルの内容です。

説明

・oci_core_instanceリソースは、Oracle Cloud Infrastructureでインスタンスを作成します。

・availability_domainは、インスタンスを配置するアベイラビリティドメインを指定します。

・compartment_idは、インスタンスが属するコンパートメントのIDを指定します。

・shapeは、インスタンスの形状を指定します。
ここでは、"VM.Standard.E4.Flex"を使用しています。

・create_vnic_detailsブロックでは、VNIC(仮想ネットワークインターフェースカード)の詳細を設定します。
ここでは、サブネットIDとパブリックIPの割り当てを指定しています。

・shape_configブロックでは、インスタンスのCPU数とメモリサイズを設定します。

・source_detailsブロックでは、インスタンスのソースイメージIDとソースタイプを指定します。

・display_nameは、インスタンスの表示名を設定します。

・preserve_boot_volumeは、インスタンスが終了した後にブートボリュームを保持するかどうかを指定します。
ここではfalseを設定しています。

・metadataブロックでは、インスタンスのメタデータを設定します。
ここでは、SSH公開鍵とuser_dataを指定しています。

リソースのプロビジョニング

.tfファイルの作成が完了したら、Terraformのコマンドを使用してリソース作成します。

terraform init

Terraformの設定に必要なプラグインやモジュールをダウンロードし、Terraformの環境を初期化します。

terraform validate

.tfファイルの構文と設定の妥当性をチェックをしてくれます。

terraform plan

Terraformがリソースを作成、変更、削除する前に実行計画を確認できます。

今回は、-var-file オプションを使用して、変数を定義したvariable.tfvarsファイルを指定して、variable.tfvars ファイルから変数の値を読み込んで、Terraformのプランを作成するコマンドを使います。

これにより、変数を外部ファイルで管理し、異なる設定ファイルを簡単に切り替えて使用することができます。

terraform apply

実際にリソースの追加・更新・削除が実行されます。 Enter a value:が表示されたあとにyesを入力してEnterキーを押下すると、リソースの作成が開始されます。

terraform planと同様に、-var-fileオプションを使用して、variable.tfvars ファイルから変数の値を読み込み、それを使用してインフラストラクチャの変更を適用するコマンドを使います。

OracleLinux9にSSH接続

作成したインスタンスのパブリックIPアドレスにSSH接続してみます。 SSH接続時に使用する秘密鍵は、事前に作成した鍵を使用します。

以下のように、インスタンスに接続できれば完了です。

また、Apacheが自動で立ち上がっているか確認をしてみます。

上記の画像の通り、Terraformでインスタンスを作成時に、Apacheのインストールから自動で立ち上がっていることの確認ができました。

Apacheのテストページへ接続

最後に、ブラウザでのHTTPアクセスでApacheのテストページを見れるかどうか確認をしてみます。

上記の通り、http接続が確認でき、Apacheのテストページも確認ができました。

まとめ

今回のブログでは、Terraformを利用してOCI上にOracle Linux 9のインスタンスを構築し、VCNの作成からインスタンスのセットアップ、さらにApacheのインストールとそのテストページの確認までの一連の手順を詳しく説明しました。

この一連の作業を通じて、以下の点が確認できました:

Terraformの利便性: インフラの構築から設定までをコードベースで管理できるため、再現性と効率性が向上します。手動で行うとミスが発生しやすい設定作業も自動化できるため、安定した環境の構築が可能です。

この記事を通じて、Terraformを使用したインフラの自動化に興味を持ち、実際にOCI上での環境構築に挑戦してみたいと思った方も多いのではないでしょうか。

インフラの自動化は、運用の効率化やエラーの減少に大きく貢献します。ぜひ、この記事を参考に、ご自身のプロジェクトでも試してみてください。

スマートスタイルTECHブログについて

スマートスタイルTECHブログでは、日頃OCIのサポート業務に従事している有資格者で構成された技術サポートチームがOCIに関する技術情報を発信しています。データベースのお困りごとはお気軽にご相談下さい。

よかったらシェアしてね!
  • URLをコピーしました!
目次