🚀

TerraformでOCIのA1インスタンス無料枠争奪戦を戦う

2021/06/04に公開

2021年5月26日に、Oracle Cloud InfrastractureのComputeインスタンスのラインナップにArmベースのプロセッサが追加されました。

https://www.oracle.com/jp/corporate/pressrelease/jp20210526.html

注目すべきは「Always Freeで4つのA1コアと24GBのメモリを提供」というところです。
月額7,000円相当が無料で利用できる、ということで提供開始から2日も経たずに東京リージョンのA1リソースに空きが無くなり、A1インスタンスが新規に割り当てられなくなってしまいました。

何度かインスタンスの作成を試ましたがやはり空きが無いのでインスタンスは作れず。
なにかいい方法無いかな~と思いながら操作していると「スタックとして保存」というボタンが気になりました。
押してみると「スタックの作成」ページに移動しました。

む、Terraform。仮想マシンとかネットワークの自動配備に使うやつですね。中規模・大規模向けと思って触ったことはありませんでした。

「次へ」を押していくと、「RUN APPLY」とあります。これにチェックを入れるとインスタンスの作成が行われるようです。

残念。まだリソースは空いてませんでしたね。

「スタックの詳細」ページに戻って、「適用」ボタンを押すとまたプロビジョニングを開始できました。これなら今までの方法よりは楽ですね。

「Terraform構成のダウンロード」というボタンがありましたので、ボタンを押してダウンロードすると、今回作ったインスタンス用のTerraformファイル(main.tf)が含まれていました。
CLIならばバッチファイルなどで定期実行できるので楽できるかも!ということで調査を開始。

TerraformでOracle Cloud(OCI)の基本的なリソースを一通り作ってみた

TerraformでOCI上にリソースを作ってみた

上記ページを参考に、TerraformをPCにインストールし、ダウンロードしてきたmain.tfファイルの1行目を編集します。ocidなどはOCIのコンソールから確認できます。

provider "oci" {
  tenancy_ocid = "ocid1.tenancy.oc1..aaaaaaaapnfputyourtenancyocid"
  user_ocid = "ocid1.user.oc1..aaaaaaaamckputyouruserocid"
  fingerprint = "秘密キーのフィンガープリント"
  private_key_path = "C:\\Terrawork\\privatekey.pem"
  region = "リージョン名。東京だとap-tokyo-1"
}

Terraformファイルができたので、インスタンスの作成をしていきます。

terraform init
terraform plan
terraform apply

terraform applyを実行すると、「Error: 500-InternalError」と返ってきました。
リソースに空きが無いのでインスタンスの作成ができませんでしたが、CLIでできるところまで来ました。

あとはバッチファイルで5分おきぐらいでリクエストを出していきましょう。

@echo off
set count=0
:loop
  set /a count+=1
  echo try %count%
  call terraform apply  -auto-approve
  if %errorlevel% neq 1 (
  echo Resource Created! >> result.txt
  exit /b
) 
timeout 300
goto :loop

インスタンスが作成できると、errorlevel 0 でTerraformが終了します。
エラーで終了すると5分待ってリトライ、インスタンスを作り終わったらバッチファイルも終了するようにしてあります。

あとはPCがスリープしないように設定し、放置しておきます。
私の場合は半日ほどPCを放置していたら1コア・6GBのA1インスタンスの作成に成功しました。

やったね!

Discussion