3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【やってみた】GitHubとOCI Resource Managerを連携しTerraformからリソース作成

Last updated at Posted at 2022-03-07

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リポジトリの作成

  • テストのため、テスト用のリポジトリを作成

    • リポジトリ名:任意の名前(例:oci-resource-manager-demo)
      git.png
  • 作成したGitHubリポジトリをローカルにクローン

$ 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のホーム画面SettingsDeveloper settingsPersonal access tokens からでもいけます
  • Generate new tokenをクリック
    git2.png
  • 以下のように設定しました。
    • Note(トークン名):任意の名前(例:OCI Resource Manager)
    • Expiration:今回は、デフォルト値(30 days)のまま
    • Select scopes
      • read:packages を選択
        *上記を設定し Generate token をクリック
        git3.png
  • 作成できたらトークンをコピーしメモしておきます(コピー忘れに注意!
    git4.png
  • GitHub側の設定はここまでです。

3.Resource Managerの設定

  • Resouce Managerを開きます
    • OCIコンソール開発者サービスリソース・マネージャ
      git5.png
  • 構成ソース・プロバイダ をクリック
    git6.png
  • 構成ソース・プロバイダの作成 をクリック(今回は以下の用に設定し作成しています)
    • 名前:任意の名前(例:GitHub source Provider)
    • 説明(オプション):任意のコメント
      • 例:A configuration source provider for GitHub.
    • コンパートメント:任意のコンパートメント
    • タイプ:GitHub
    • サーバーURL:https://github.com
    • 個人アクセス・トークン:先程作成しコピーしておいたトークン
    • 拡張オプション:タグ・ネームスペース(今回は設定しない)
      git7.png
  • これでプロバイダを使う設定が完了
    git8.png

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
  • GitHubを確認すると反映されていることがわかる
    git11.png

4. Resource ManagerでObject Storageバケットを作成

  • OCIコンソールのResource Managerに戻り スタックスタックの作成をクリック
    • スタック構成を設定し次へ
      • ソース・プロバイダ:先程作成したもの(例:GitHub source Provider)
      • リポジトリ:先程作成したもの(例、oci-resource-manager-demo)
      • ブランチ:main
      • 名前(オプション):例:Stack-bucket-test
      • 説明(オプション):例:テストバケットの作成
      • コンパートメント:コンパートメントを指定
        git10.png
  • 変数の構成を確認し次へ
    git12.png
  • 確認画面で 適用の実行 のチェックが外されていることを確認し作成
    • 適用の実行:ここにチェックを入れると、リソースのプロビジョニングがはじまります
      git13.png
  • スタックが作成されました。計画をクリックすると「terrafrom plan」が実行されます
    git14.png
    git15.png
  • 計画が成功すると ログから「terrafrom plan」の内容を確認できます
    git16.png
  • 上記の内容に問題なければスタックの詳細に戻り 適用terraform apply)を実行します
    git17.png
    git18.png
  • 適用に成功すると、ログから適用内容を確認できます
    git19.png
  • Object Storageを確認します
    • OCIコンソールから「ストレージ → オブジェクト・ストレージとアーカイブ・ストレージ
    • プライベート・バケットとして作成されていることが確認できます
      git20.png
      git21.png

5. Resource ManagerでObject Storageバケットを削除

  • スタックから作成したバケットをクリーンアップして削除します
  • Resouce Managerから先程のスタックに戻り、スタックの詳細破棄terraform destory)をクリック

注意: このスタックでデプロイされたすべてのリソースは、即座に破棄されます。このアクションは元に戻せません。後でスタックのリソースを再作成する場合、適用ジョブを実行できます。

git22.png
git23.png

  • 削除に成功しました
    git24.png
  • Object Storageに戻りバケットが削除されいることがわかります
    git25.png

その他参考

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?