Oracle CloudのOCI Resource Manager(以下、Resource Manager)とGitHubを連係させてTerraformを実行してみました。
参考情報
- こちらの記事を実施しています
Resource Managerとは
- Terraformをクラウドで記述しOCIの各リソースを作成するサービスです
- Resource Manager自体は無償です(作成したリソースに対し課金)
- Resource Managerの基本用語
- 構成ソース・プロバイダ
- Terraform設定ファイルのバージョン管理のために使用している外部のソースコントロールシステム。これにより、直接ビルドできる(ファイルをZIP化しアップロードする必要がない)。
- Statcks
- ひとつのプランの一部として実行されるスクリプトのグループ
- ZIPファイルとしてアップロード or 構成ソース・プロバイダから直接プル
- Job
- Stacksに対して実行されるもの
- Plan、Apply、Destoryのジョブ
*Drift - 実際のステートとそのスタックに対して最後に実行したジョブが保存していたステートとの差分
- 構成ソース・プロバイダ
- Resource Managerは以下から利用可能
- OCIコンソール
- SDK
- OCI CLI
検証の流れ
- Object Storageのバケットを作成するTerraformファイルを作成
- そのファイルをGitHubに連係
- Resource ManagerからGitHub上のファイルを読み込み、バケット作成(terrafrom plan/apply)
- Resource Managerから作成したバケットを削除(terraform destory)
1. Gitリポジトリの作成
$ git clone https://github.com/<アカウント名>/oci-resource-manager-demo.git
2.Configuration Source Providerの設定
- GitHubプロジェクトからスタックを直接ビルドできるようにConfiguration Source Providerを設定する
- GitHubのパーソナルアクセストークンを生成する
- こちらをクリック → https://github.com/settings/tokens
- GitHubのホーム画面 → Settings → Developer settings → Personal access tokens からでもいけます
- こちらをクリック → https://github.com/settings/tokens
-
Generate new tokenをクリック
- 以下のように設定しました。
- 作成できたらトークンをコピーしメモしておきます(コピー忘れに注意!)
- GitHub側の設定はここまでです。
3.Resource Managerの設定
- Resouce Managerを開きます
-
構成ソース・プロバイダ をクリック
-
構成ソース・プロバイダの作成 をクリック(今回は以下の用に設定し作成しています)
- 名前:任意の名前(例:GitHub source Provider)
- 説明(オプション):任意のコメント
- 例:A configuration source provider for GitHub.
- コンパートメント:任意のコンパートメント
- タイプ:GitHub
- サーバーURL:https://github.com
- 個人アクセス・トークン:先程作成しコピーしておいたトークン
- 拡張オプション:タグ・ネームスペース(今回は設定しない)
- これでプロバイダを使う設定が完了
3. テスト用のTerraformスクリプトを作成
- 事前に環境変数を設定
export TF_VAR_compartment_ocid=<compartment_OCID>
export TF_VAR_region=<region>
export TF_VAR_namespace=<namespace>
- Object Storageのバケットを作成するテスト用のtfファイルを作成
- demo.tfを作成
variable "compartment_ocid" {}
variable "region" {}
variable "bucket_name" {
default = "resource_manager_demo_bucket"
}
provider "oci" {
region = var.region
}
data "oci_objectstorage_namespace" "namespace" {
compartment_id = var.compartment_ocid
}
resource "oci_objectstorage_bucket" "create_bucket" {
# required
compartment_id = var.compartment_ocid
name = var.bucket_name
namespace = data.oci_objectstorage_namespace.namespace.namespace
# optional
access_type = "NoPublicAccess" # <---- プライベートバケット
}
output "new_bucket" {
value = oci_objectstorage_bucket.create_bucket
}
- ローカルリポジトリの状態確認(git status)
$ git status
表示例
(略)
Untracked files:
(use "git add <file>..." to include in what will be committed)
demo.tf
nothing added to commit but untracked files present (use "git add" to track)
- 作成したファイルをステージングエリアに登録(git add)
$ git add demo.tf
$ git status
表示例
(略)
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: demo.tf
- コミットを実行(git commit)
$ git commit -m "initial commit"
$ git status
表示例
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
- ローカルリポジトリの内容をリモートリポジトリに反映(git push)
$ git push -u origin main
$ git stauts
表示例
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
4. Resource ManagerでObject Storageバケットを作成
- OCIコンソールのResource Managerに戻り スタック → スタックの作成をクリック
- 変数の構成を確認し次へ
- 確認画面で 適用の実行 のチェックが外されていることを確認し作成
- スタックが作成されました。計画をクリックすると「terrafrom plan」が実行されます
- 計画が成功すると ログから「terrafrom plan」の内容を確認できます
- 上記の内容に問題なければスタックの詳細に戻り 適用(terraform apply)を実行します
- 適用に成功すると、ログから適用内容を確認できます
- Object Storageを確認します
5. Resource ManagerでObject Storageバケットを削除
- スタックから作成したバケットをクリーンアップして削除します
- Resouce Managerから先程のスタックに戻り、スタックの詳細の破棄(terraform destory)をクリック
注意: このスタックでデプロイされたすべてのリソースは、即座に破棄されます。このアクションは元に戻せません。後でスタックのリソースを再作成する場合、適用ジョブを実行できます。