OCIの無料枠へスクリプト+Terraformでシステム環境を用意

IaC
スポンサーリンク
スポンサーリンク

はじめに

今回は、無料で試せるクラウドサービスの中でも無料枠の範囲が大きいOCI(Oracle Cloud Infrastructure)にスクリプト+Terraformを使ってクラウド上に環境を構築します。

OCIに環境を構築するには、先に「Oracle Cloud Free Tier」にある「無料で始める」をクリックしてアカウントを作成しておく必要があります。本人確認のためクレジットカードの入力が必要になりますが、有料アカウントにアップグレードしなければ課金されません。詳細は、ここを確認してください。

Terraformの基本的な使い方やコードの書き方を知りたい場合は、下記を参照してください。

実行環境

スクリプトは、拡張子がcomanndとなっていますがzshで書かれています。

拡張子commandは、macOSでスクリプトファイルをダブルクリックで実行出来るようにするためです。macOSでスクリプトファイルをダブルクリックしても実行することが出来ない場合は、ここを参照してください。

Linuxなどzshを実行することが出来るOSの場合は、拡張子をshに変更して実行してください。

クラウド上に仮想的なネットワークやコンピュータを作成する処理は、Teraformを使用しています。

Terraformは、コードでインフラを管理するためのIaC(Infrastructure as Code)ツールのデファクトスタンダードで、拡張子tfとなっているファイルを読み込むことでクラウド上に環境を構築しています。

構築内容

構築される環境は、OCIのAlways Freeのリソースから2つのCompute、2つのAutonomous Database、1つのロード・バランサー、1つの予約済みパブリックIPを使用しています。

すでにAlways Freeで上記リソースを使用している場合は、Always Freeの制限に引っ掛かり環境の構築に失敗するのでリソースを削除して実行するか、拡張子tfファイルを変更してリソース数を調整してください。

2つのComputeには、nginxとSQL Plusがインストールされます。

nginxは、ロード・バランサーを経由してインターネット側からアクセス出来るように構築されます。

SQL Plusは、Computeにsshで接続しAutonomous Databaseにアクセスするために使用します。

構築準備

1. スクリプトのダウンロード

gitここからcl-configureをローカルにダウンロードして圧縮されている場合は、解凍してください。

解凍するとcl-configureディレクトリが作成されます。

2. Terraformのインストール

Terraformがインストールされていない場合は、以下のスクリプトを実行してTerraformをインストールします。

cl-configure/install-terraform.command

スクリプトでダウンロードしているTerraformはmacOS用となっています。

macOS以外の場合は、https://releases.hashicorp.com/terraform/0.14.4/を参照してスクリプト内のダウンロード先URLに含まれる「darwin_amd64.zip」を「windows_amd64.zip」など実行環境に合わせてからスクリプトを実行してください。

3. 秘密鍵・公開鍵の作成

OCIやComputeの接続に使用するための秘密鍵・公開鍵を以下のスクリプトを実行して作成します。

スクリプトの実行中にHTTPSで使用するディスティングイッシュネームの入力が求められます。何も入力しないでEnterで進めてしまうと作成されないのでCountry NameにJPなど入力してください。

cl-configure/generate-keys.command

スクリプト内でssh-keygenとopensslを使用しています。インストールされていない場合は、インストールしてください。

スクリプトによって作成されるSSL証明書は、自己証明書となっており個人レベルでOCIの環境構築の検証を行うために作成している証明書となります。

スクリプトにより作成される秘密鍵・公開鍵は、cl-configure/keysディレクトリに格納されます。これらのファイルはOCIやComputeに接続するための鍵となるので厳重に保管してください。

4. OCIに接続するための設定

Terraformを使ってOCIに環境を構築するには、OCIに接続するためのAPIキーを設定する必要があります。

OCIにAPIキーを登録するため、OCIのコンソールにサインインし、画面右上の「プロファイルアイコン」をクリックして開いた中にある「ユーザー設定」をクリックします。

OCIの管理画面のURLは、OCIのアカウントを作成した時に送られてくる「Get Started Now with Oracle Cloud」という件名のメールに含まれています。

ユーザー設定画面の「APIキー」をクリックし、「APIキーの追加」ボタンをクリックします。

APIキーの追加画面が表示されるので「公開キー・ファイルの選択」を選択し、「公開キー」には、前の作業(秘密鍵・公開鍵の作成)で作成した「cl-configure/keys/soci_api_key_public.pem」を選択し、下の画面の表示状態で「追加」をクリックします。

「cl-configure/oci/envs/dev/terraform.tfvars」ファイルをテキストエディタで開き「構成ファイルのプレビュー」に表示されている文字列の=の後の文字列をコピーして、下記の対応表にそって貼り付けて保存します。

構成ファイルのプレビューterraform.tfvarsX
tenancytenancy_ocid
useruser_ocid
fingerprintfingerprint
regionregion

環境を構築

以下のスクリプトを実行することでOCI上に環境を作成することが出来ます。

cl-configure/oci/envs/dev/oci-apply.command

スクリプトを実行すると以下のメッセージが表示されるのでメッセージに従って「yes」を入力するとOCI上に環境の構築が開始され数分程度で処理が完了します。

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

  Enter a value:

ここまでの処理でOCI上にCompute、Autonomous Databaseなどが作成されています。

Autonomous Databaseに接続するための情報を取得するためにOCIのコンソールにサインインし左上の「メニュー」を開き「Autonomous Database Warehouse」をクリックします。

左側の「Autonomous Database」をクリックすると作成されたAutonomous Databaseの一覧が表示されるので1行目のリンク「dev-adb-1」をクリックします。

「DB接続」をクリックします。

「ウォレット・タイプ」をリージョナル・ウォレットにして「ウォレットのダウンロード」をクリックします。

ウォレットのパスワードを設定し、「ダウンロード」をクリックします。ダウンロードしたファイルを「cl-configure/keys」ディレクトリにファイル名を「Wallet_devadb.zip」として保存してください。

OCIに作成した2つのComputeの設定やnginx、SQL Plusをインストールするためのスクリプトを実行します。

このスクリプトで先程ダウンロードしたウォレットをComputeにアップロードし、SQL PlusからAutonomous Databaseに接続出来るように構成を行っています。

cl-configure/oci/envs/dev/oci-setup.command

スクリプト内でscpとsshを使用しています。インストールされていない場合は、インストールしてください。

スクリプトを実行すると初めてssh接続する時に表示される以下のメッセージが2回表示されるので「yes」を入力すると更新が開始され数分程度で処理が完了します。

Are you sure you want to continue connecting (yes/no/[fingerprint])?

動作確認

Computeに接続

以下のスクリプトを実行すると1つ目のComputeにssh接続を行うことが出来ます。

cl-configure/oci/envs/dev/oci-ssh-1.command

以下のスクリプトを実行すると2つ目のComputeにssh接続を行うことが出来ます。

cl-configure/oci/envs/dev/oci-ssh-2.command

Autonomous Databaseに接続

上記のComputeに接続するためのスクリプトでどちらかのComputeに接続後、SQL Plusを使ってAutonomous Databaseに接続します。

下記のコマンドを実行した際に求められるパスワードは「C0llbow_Pass」です。

1つ目のAutonomous Databaseに接続する場合は、下のコマンドを実行してください。

sqlplus admin@devadb1_medium

2つ目のAutonomous Databaseに接続する場合は、下のコマンドを実行してください。

sqlplus admin@devadb2_medium

ロード・バランサー経由でWebサーバーに接続

インターネットからWebサーバーに接続するにはロード・バランサーを経由して接続することになるのでロードバランサのパブリックIPアドレスを以下のスクリプトを実行して確認します。

cl-configure/oci/envs/dev/oci-output.command

スクリプトの実行後コンソールにlb_public_ip = "xxx.xxx.xxx.xxx"と表示されている行のxxx.xxx.xxx.xxxがロード・バランサーのパブリックIPアドレスとなります。

ブラウザを開きURLに「https://xxx.xxx.xxx.xxx」を入力すると下の画面が表示されます。

ブラウザの表示を更新すると更新するたびに「Welcome to nginx(xxx.xxx.xxx.xxx)!」のxxx.xxx.xxx.xxxの表示が交互に変わります。xxx.xxx.xxx.xxxは、2つのComputeのパブリックIPアドレスになります。

これは、ロード・バランサーの設定がラウンドロビンになっているため方式になっているため2つのComputeのnginxに交互に接続し負荷分散を行っているためです。

環境の破棄

作成した環境が不要になった場合や再度作り直したい場合は、以下のスクリプトを実行して破棄することが出来ます。破棄後、再構築する場合は「環境を構築」の手順を再度実行することで数分程度で綺麗な環境に作り直すことが出来ます。

cl-configure/oci/envs/dev/oci-destroy.command

スクリプトを実行すると以下のメッセージが表示されるのでメッセージに従って「yes」を入力するとリソースの破棄が開始され数分程度で処理が完了します。

Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value:

OCIの管理画面でリソースの変更等を行っていた場合、Terraformによる管理状態とズレが発生するためエラーが発生し完全に削除出来ない場合があります。

この場合は手動でリソースの削除を行ってください。

Comment

スポンサーリンク