ノート:

Oracle Cloud Infrastructure DevOpsを使用したOCI Resource Managerの導入の自動化

イントロダクション

Oracle Cloud Infrastructure (OCI) Resource Managerは、チームがInfrastructure as Code (IaC)を管理および自動化するのに役立つフルマネージド・サービスです。これにより、チームはTerraform構成越しにコラボレートし、様々なアクションに対する権限を定義し、破損を防ぐための状態ロックを提供し、すべての状態ファイルを自動的に永続ストレージに格納し、Terraformプロバイダの構成を処理できます。Terraformだけでなく、すべてのソフトウェアの配信とデプロイメントには、OCI DevOpsがあります。これは、プライベート・コード・リポジトリ、トリガー、ビルドおよびデプロイ・パイプラインを使用する開発者向けのエンドツーエンドの継続的インテグレーション/継続的デリバリ(CI/CD)プラットフォームです。

OCI Resource Managerは、Terraformの自動化と複数のソース・コード制御システムとの統合を組み込み、基本的なCI/CDを実現しています。このチュートリアルでは、OCI DevOpsを使用して、OCI Resource ManagerスタックをTerraformコードの変更に自動的に再デプロイすることで、これらのCI/CD機能を拡張する方法について説明します。

フロー

フロー・ダイアグラム

プロセスは、ユーザーが新しいTerraform構成をコード・リポジトリにプッシュすることから始まり、ビルドおよびデプロイメント・パイプラインがトリガーされます。これにより、OCIコマンドライン・インタフェース(CLI)を使用してOCIリソース・マネージャ・スタックを新しい構成で適用するシェル環境が作成されます。

目的

タスク1: OCI DevOpsコード・リポジトリの設定

  1. OCIコンソールにログインし、「開発者サービス」DevOps「プロジェクト」に移動して、CI/CDワークフローのすべてのリソースを保持するDevOpsプロジェクトを作成します。

  2. コード・リポジトリを作成し、Terraform構成をアップロードします。使用できるOracle提供のテンプレートは多数あります。このチュートリアルでは、TerraformがOCI通知のトピックの説明を変更するだけです。

    resource "oci_ons_notification_topic" "test_notification_topic" {
        #Required
        compartment_id = <compartment_id>
        name = "RM_DevOps_Automation_Tutorial"
    
        #Optional
        description = "This is a test notification topic."
    }
    

    初期通知構成

タスク2: シェル・アーティファクトの作成

最初に、デプロイメント・パイプラインで使用されるアーティファクトを作成する必要があります。OCI CLIを実行するシェル・スクリプトを実行するため、コマンド仕様タイプのアーティファクトを作成します。このチュートリアルでは、次のコマンドを使用してアーティファクト・ソースインラインにします:

version: 0.1
component: command
timeoutInSeconds: 1200
steps:
 - type: Command
   timeoutinSeconds: 900
   name: Invoke RMS
   command: |
     echo "Running RM apply command"

シェル・アーティファクトの作成

構文および追加パラメータの詳細は、コマンド仕様のドキュメントを参照してください。後でこのスクリプトに詳細を追加します。

タスク3: デプロイメント・パイプラインの作成

デプロイメント・パイプラインは、アーティファクトのデプロイに使用されます。

  1. デプロイメント・パイプラインおよびシェル・タイプのステージを作成します。

    シェル・ステージの作成

  2. 「アーティファクトの選択」をクリックし、タスク2で作成したアーティファクトを選択します。要件を満たす「シェイプ」および「ネットワーク構成」を選択します。

    アーティファクトの選択

    ノート: ポリシー:ステージの作成時に、推奨ポリシーのリストがリンクされます。必ず追加してください。また、デプロイメント・パイプラインはOCI Resource ManagerおよびOCI Notificationsと相互作用するため、必ず動的グループにons-topicsorm-stacksおよびorm-jobsへのアクセス権を付与してください。各サービスの権限の完全なリストの詳細は、ポリシー・リファレンスを参照してください。

タスク4: ビルド・パイプラインの作成

アーティファクトは構築しませんが、デプロイメント・パイプラインをトリガーするにはビルド・パイプラインが必要です。

  1. ビルド・パイプラインと「デプロイメントのトリガー」タイプのステージを作成します。

    ビルド・ステージの作成

  2. 「デプロイメント・パイプラインの選択」をクリックし、タスク3で作成したパイプラインを選択します。

    デプロイメント・パイプラインの選択

タスク5: トリガーの作成

コード・プッシュで起動するトリガーを作成する必要があります。

  1. 「トリガー」にナビゲートし、「トリガーの作成」をクリックします。

  2. 「トリガーの作成」ページで、次の情報を入力します。

    • ソース接続: OCIコード・リポジトリを入力します。
    • コード・リポジトリの選択:タスク1で作成したリポジトリを選択します。
  3. 「アクションの追加」をクリックし、次の情報を入力します。

    • ビルド・パイプライン:タスク4で作成したビルド・パイプラインを選択します。
    • イベント: 「プッシュ」を選択します。
    • ビルド実行条件:ユース・ケースに従って入力します。この例では、次の情報を入力します。
      • ソース・ブランチ: mainと入力します。
      • 含めるファイル: main.tfと入力します。

    トリガーの作成

タスク6: フローのテスト

ここでは、チュートリアルのこの時点まで続いたワークフローを示します。

  1. コードプッシュ。
  2. トリガー
  3. ビルド・パイプライン
  4. デプロイメント・パイプライン
  5. シェル・スクリプトはecho "Running RM apply command"を実行します。

シェルスクリプトにさらに複雑さを追加する前に、ワークフローの動作を確認します。

  1. 新しいコードをプッシュします。

    プッシュ・コード

  2. ビルド・パイプラインがトリガーされたことを確認します。

    ビルド中です

  3. デプロイメント・パイプラインがトリガーされたことを確認します。

    デプロイ中

  4. シェル・スクリプトが正常に実行されたことを確認します

    テスト・フローの成功

すべてが期待どおりに機能しています。最後のタスクは、シェル・スクリプトを再構築してリソース・マネージャ・スタックをトリガーすることです。

タスク7: リソース・マネージャ・スタックをトリガーするためのシェル・スクリプトの変更

シェル・ステージ・コンテナ・イメージ・ランタイムには、シェル・インタプリタ、シェル・ユーティリティ、CLIなど多くのツールが含まれています。詳細は、シェル・コンテナ・イメージのランタイム詳細を参照してください。

OCI CLIを活用してリソース・マネージャを起動します。現在のシェルスクリプトは次のようになります。

version: 0.1
component: command
timeoutInSeconds: 1200
steps:
 - type: Command
   timeoutinSeconds: 900
   name: Invoke RMS
   command: |
     echo "Running RM apply command"

シェル・スクリプトを変更するには、次のステップを実行します。

  1. ジョブの作成

    最初に実行するコールはcreate-apply-jobです。これにより、リソース・マネージャ・スタックに適用ジョブが作成されます。また、次のステップでジョブを参照する変数としてジョブのjob_idも保存します。

    job_id=$(oci resource-manager job create-apply-job --stack-id <Stack OCID> --execution-plan-strategy AUTO_APPROVED --wait-for-state SUCCEEDED --wait-for-state FAILED --query data.id --raw-output)
    

    詳細は、OCI CLIコマンド・リファレンス: create-apply-jobを参照してください。

  2. ジョブ・ステータスの取得

    ジョブが成功したか失敗したかを確認する必要があります。そのためには、job_idjob getに渡し、ジョブのプロパティを返します。具体的には、lifecycle-stateに関心があります。

    job_state=$(oci resource-manager job get --job-id $job_id --raw-output --query 'data."lifecycle-state"')
    

    詳細は、OCI CLIコマンド・リファレンス: job getを参照してください。

  3. ジョブ・ステータスを分析します。

    ジョブが成功した(0)か失敗した(1)かに応じて終了コードを変更するロジックを追加します。

    if [ $job_state == SUCCEEDED ]; then
      echo "Resource Manager job succeeded"
      exit 0
    else
      echo "Resource Manager job failed"
      exit 1
    fi
    
  4. 前述のステップを集計し、print文を追加すると、シェル・スクリプトは次のようになります。

    version: 0.1
    component: command
    timeoutInSeconds: 1200
    steps:
    - type: Command
      timeoutinSeconds: 900
      name: Invoke RMS
      command: |
        echo "Running RM apply command"
        job_id=$(oci resource-manager job create-apply-job --stack-id ocid1.ormstack.oc1.iad.amaaaaaann2vciya6arauok6db5epqnhlfdmbf5ee7td6gydzwvarzanaxyq --execution-plan-strategy AUTO_APPROVED --wait-for-state SUCCEEDED --wait-for-state FAILED --query data.id --raw-output)
        echo "RMS plan job id is:"
        echo $job_id
        job_state=$(oci resource-manager job get --job-id $job_id --raw-output --query 'data."lifecycle-state"')
        echo "Apply job lifecycle-state is:"
        echo $job_state
        if [ $job_state == SUCCEEDED ]; then
          echo "Resource Manager job succeeded"
          exit 0
        else
          echo "Resource Manager job failed"
          exit 1
        fi
    

ノート:これは基本的な機能を示す単純な例です。要件に合わせてスクリプトをカスタマイズできます。

タスク8: エンドツーエンド・テスト

完全なアーキテクチャとフローは次のようになります。

フロー・ダイアグラム

アーキテクチャの動作を確認します。

  1. 新しいコードをプッシュします。

    プッシュ・コード

  2. シェル・スクリプトが正常に実行されたことを確認します。

    シェルの成功

  3. Terraformが正常に適用されたことを確認します。

    通知トピック更新済

次のステップ

このチュートリアルでは、OCI DevOpsを使用してOCI Resource Managerスタック・デプロイメントを自動化する方法を示します。これは基本的なフローを示す単純な例です。学習した概念を取得し、それらに基づいて構築し、ユースケースに合せて調整し、既存のCI/CDパイプラインに組み込むことをお薦めします。

承認

その他の学習リソース

docs.oracle.com/learnの他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。

製品ドキュメントは、Oracle Help Centerを参照してください。