TerraformでOCIのインスタンスを確保する
Ubuntu(20.04)より操作。
なぜ Oracle なのか
VPS を使うときに GCP や AWS、さくらクラウドなど様々なものがあるが、なるべくコストをかけずに済ませたいと考えたときに Free tier という存在がある。
GCP はサービスにもよるが一年間、AWS もサービスによるが一年間というイメージだ。
その中で Oracle が運営している Oracle Cloud Infrastructure は、
・1/8 OCPU と 1GB メモリをそれぞれ備えた 2 つの AMD ベースのコンピュート VM
・1 つの VM または最大 4 つの VM として使用可能な 4 つの Arm ベースの Ampere A1 コアと 24GB のメモリ
を Free tier として提供している。
あまりにも豊富な Free tier のため、使ってみたいと思うのはいうまでもない。
私もpleromaや身内で使っている Minecraft サーバーを下の1つのVMまたは最大4つのVMとして使用可能な4つのArmベースのAmpere A1コアと24GBのメモリ
で運用している。
今のところ使用する上でのストレスはほぼ感じていない。がこの OCI やはり他が提供している Free tier より提供しているマシンが強いため、人気がとてもある。
そのため Tokyo リージョンはほぼほぼ取れない。(Osaka リージョンは楽に取れたと夏頃風の噂で聞いたが)
管理画面から確保できるまで粘るのもいいが、Terraform という自動でインスタンスを確保してくれる便利なツールがある。今回はこれを使う。
- 1.Terraform のインストール
- 2.RSA キーを作成する
- 3.公開鍵をユーザーアカウントに追加する
- 4.必要な情報を収集する
- 5.スクリプトを作成する
- 3.スクリプトを実行スクリプトを実行
- 4.tfファイルを生成する。
- 5.cronに設定する
1.Terraform のインストール
Terraform をインストールする
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add - |
terraform -v
で terraform が入ってることが確認できたら ok
2.RSA キーを作成する
<your-rsa-key-name>
は自分の好きな名前に変更してほしい
.oci ディレクトリを作成する。
mkdir $HOME/.oci |
次に秘密鍵を生成する
openssl genrsa -out $HOME/.oci/<your-rsa-key-name>.pem 2048 |
権限を変更する、自分だけが読み書きできるようにする
chmod 600 $HOME/.oci/<your-rsa-key-name>.pem |
公開鍵を生成する
openssl rsa -pubout -in $HOME/.oci/<your-rsa-key-name>.pem -out $HOME/.oci/<your-rsa-key-name>\_public.pem |
公開鍵をコピーする
cat $HOME/.oci/<your-rsa-key-name>\_public.pem |
3.公開鍵をユーザーアカウントに追加する
ユーザーアバターをクリックし、
ユーザー設定をクリックする。
リソースから API キーをクリックする
API キーの追加をクリックし
公開キーの貼り付けを選択し、BEGIN PUBLIC KEY
からEND PUBLIC KEY
までを入力欄に貼り付け、追加をクリック。
4.必要な情報を収集する
Terraform に必要な情報を収集する。
- tenancy-ocid:
- ユーザーアバターから、Tenancy:your-tenancy をクリック
- OCID の横にあるコピーをクリックし、メモ帳にコピーする
- user-ocid:
- ユーザーアバターから、ユーザー設定を選択
- OCID の横にあるコピーをクリックし、メモ帳にコピーする
- finger:
- ユーザーアバターから、ユーザー設定に移動
- リソース内にある API キーをクリックする
- 登録した公開鍵のフィンガープリントをメモ帳にコピーする
- region-identifier:
- 上部のリージョンが書いてある部分をクリック
- リージョンの管理をクリックする
- 一番上にあるはずの利用しているリージョンのリージョン識別子をメモ帳にコピーする
- rsa-private-key-path:
- 2.RSA キーを生成するで生成したパスをコピー
- (私の環境ではうまくいかなかったため`/home/your-user/.oci/
.pem とした)
5.スクリプトを作成する
ディレクトリを作成する
mkdir tf-provider |
provider.tf
というファイルを作成する
touch provider.tf |
provider.tf
を編集する。
4の必要な情報を収集するで収集した
provider "oci"{ |
availability-domeins.tf
というファイルを作成する。
touch availability-domains.tf |
availability-domains.tf
を編集する。
4の必要な情報を収集するで収集した
1 | // Source from https://registry.terraform.io/providers/hashicorp/oci/latest/docs/data-sources/identity_availability_domains |
output.tf
を作成する
touch output.rf |
output.tf
を以下のように編集する
// Output the "list" of a;; availability domains |
3.スクリプトを実行スクリプトを実行
terraform init
を実行する。ls -al
でtf-provider
内に.terraform
というフォルダが生成されているのを確認する。
terraform plan
を実行し、Plan: 0 to add, 0 to change, 0 to destroy
を返していることを確認する。
terraform apply
を実行しApply complete! Resources: 0 added, 0 changed, 0 destroyed.
と返していることを確認する。
これで問題なければ、terraformでociを叩けることができた。
4.tfファイルを生成する。
インスタンスを作るときに、作成
ではなくスタックとして保存
を使う。
インスタンス名やコンパーメントを選んだら作成をクリック。
管理画面に遷移したら、tfファイルをダウンロードする
ダウンロードしたzipファイルを解答し、中身のmain.tfを適当な名前に変え、編集する
- provider "oci" {} |
provider “oci” {}は既に定義済みなので削除する。
保存できたらterraform plan
で1 added
となっていることを確認し、terraform apply
で実際に生成される。
5.cronに設定する
always free枠を狙う場合、毎回毎回コマンド実行するのも面倒なのでcronに設定する。今回は一分おきにした
*/1 * * * * cd /terraform-dir/ && /usr/bin/terraform apply -auto-approve >> /var/log/cron.log |
terraformの構成ファイルが入っているディレクトリにアクセス、そのディレクトリでサイレントで構築するような形態になっている。