1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub ActionsでOCI Computeのデプロイを自動化

Posted at

はじめに

クラウドでは、デプロイをGUI上で人手によって行うことでヒューマンエラーが発生する可能性もあります。

また、大規模システムになればなるほど、効率的なデプロイも求められると思います。

それを踏まえたIaCという手法や、最近だと仕様駆動開発(Spec-Driven Development)というキーワードも頻繁に聞くようになりました。

ということで、今回は、GitHub ActionsとOCIのResource Managerを組み合わせて、GitHubで管理しているTerraformファイル(.tf)が更新されたら、自動的にリソースに反映する仕組みを実装してみました。

Terraform設定ファイルは、以前投稿したQiitaの内容のものをほぼそのまま使用しています。公開鍵の部分の記述とシェイプをE4に変えています。

前提

本記事では、以下はすでに完了している前提です。

・Terraform構成ファイルを作成していること
・GitHubの任意のリポジトリにTerraform構成ファイルを格納していること
・OCIアカウントおよび、VCNの作成が完了していること

GitHub側の準備

  • Personal access tokenを作成
    • Setting -> Developer settings -> Tokens (classic) の順に選択
    • Generate new token (classic) を選択
    • NoteとExpirationは自由に埋めて、Select scopesはrepoだけ選択

image.png

  • 生成したtokenの値をテキストエディタなどに貼り付けて、メモしておく

[OCI] Resource Manager 構成ソース・プロバイダの作成

  • GitHubのエンドポイントの情報を定義
    • 開発者サービス -> リソース・マネージャ -> 構成ソース・プロバイダ の順に選択
    • 構成ソース・プロバイダの作成を選択し、以下の値で設定
項目
名前 任意
説明 任意
コンパートメント 任意のコンパートメント
エンドポイント パブリック・エンドポイント
タイプ GitHub
サーバーURL https://github.com/
個人アクセストークン 先ほど控えたtokenの値

image.png

[OCI] Resource Manager スタック作成

  • スタックの作成
    • 開発者サービス -> リソース・マネージャ -> 構成ソース・プロバイダ の順に選択
    • スタックの作成を選択し、以下の値で設定
項目
Terraformの構成オリジン ソース・コード制御システム
ソースコード管理タイプ GitHub
構成ソース・プロバイダ 先ほど作成した構成ソース・プロバイダの名前
リポジトリ Terraform構成ファイルのあるリポジトリ
ブランチ Terraform構成ファイルのあるブランチ
名前 任意
説明 任意
コンパートメントに作成 任意
Terraformのバージョン 任意
  • 作成したスタックのOCIDをテキストエディタなどに貼り付けて、メモしておく

[GitHub] Secretの登録

  • Terraform構成ファイルのあるリポジトリにブラウザからアクセス
  • Settingタブに移動
  • 左側のメニューのSecrets and Variables -> Actions をクリック
  • New repositoy secretをクリックし、以下の5つのSecretを作成する
Secret名
OCI_CLI_USER ユーザーのOCID
OCI_CLI_TENANCY テナンシのOCID
OCI_CLI_KEY_CONTENT APIキーの内容
OCI_CLI_FINGERPRINT APIキーのフィンガープリント
OCI_CLI_REGION リージョン名(ap-tokyo-1、ap-osaka-1など)

ワークフロー定義ファイルのコミット

  • 以下の内容で、ワークフロー定義ファイルをリポジトリにコミット
  • OCI_RM_STACKの値は、先ほどメモしたResource ManagerのスタックのOCIDの値を入れる
name: Apply Resource Manager Stack

on:
  push:
    branches:
      - main  # 対象ブランチを指定
    paths:
      - '**/*.tf'
jobs:
  apply-resource-manager-stack:
    runs-on: ubuntu-latest
    name: Apply Resource Manager Stack
    env:
      OCI_CLI_USER: ${{ secrets.OCI_CLI_USER }}
      OCI_CLI_TENANCY: ${{ secrets.OCI_CLI_TENANCY }}
      OCI_CLI_FINGERPRINT: ${{ secrets.OCI_CLI_FINGERPRINT }}
      OCI_CLI_KEY_CONTENT: ${{ secrets.OCI_CLI_KEY_CONTENT }}
      OCI_CLI_REGION: ${{ secrets.OCI_CLI_REGION }}
      OCI_RM_STACK: ocid1.ormstack.oc1.ap-tokyo-1.xxx # スタックのOCID
    steps:
      - name: Create apply job
        uses: oracle-actions/run-oci-cli-command@v1.3.2
        id: create-apply-job
        with:
          command: 'oci resource-manager job create-apply-job --stack-id ${{ env.OCI_RM_STACK }} --execution-plan-strategy AUTO_APPROVED'

      - name: Display job name
        run: |
          echo ${{ steps.create-apply-job.outputs.output }} | jq '.data."display-name"'

[GitHub/OCI] 自動更新とデプロイの確認

  • 任意の.tfファイルの任意の箇所を修正し、コミット (私はMemoryの値を修正しました)
  • GitHubのリポジトリにブラウザでアクセスし、Actionsタブから左側に記載のある、Apply Resource Manager Stackが成功していることを確認する
  • OCIのResource Managerの画面から、自動実行されたジョブが成功していて、Computeが作成されていることを確認する

image.png

確認できました!

さいごに

今回は、GitHub ActionsとOCIのResource Managerを組み合わせて、GitHubで管理しているTerraform構成ファイルの更新をトリガーにして、構成ファイルの内容をOCI Computeに反映しました。

昨今、IaCや仕様駆動開発的なことを取り組んでいるOCIユーザーの方の参考になれば幸いです。

参考

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?