ノート:
- このチュートリアルでは、Oracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントの値の例を使用します。演習を完了するときに、これらの値をクラウド環境に固有の値に置き換えます。
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リソース・マネージャ・スタックを新しい構成で適用するシェル環境が作成されます。
目的
- Terraformの変更時にOCIリソース・マネージャ・スタックを自動的に再デプロイします。
タスク1: OCI DevOpsコード・リポジトリの設定
-
OCIコンソールにログインし、「開発者サービス」、DevOps、「プロジェクト」に移動して、CI/CDワークフローのすべてのリソースを保持するDevOpsプロジェクトを作成します。
-
コード・リポジトリを作成し、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: デプロイメント・パイプラインの作成
デプロイメント・パイプラインは、アーティファクトのデプロイに使用されます。
-
デプロイメント・パイプラインおよびシェル・タイプのステージを作成します。
-
「アーティファクトの選択」をクリックし、タスク2で作成したアーティファクトを選択します。要件を満たす「シェイプ」および「ネットワーク構成」を選択します。
ノート: ポリシー:ステージの作成時に、推奨ポリシーのリストがリンクされます。必ず追加してください。また、デプロイメント・パイプラインはOCI Resource ManagerおよびOCI Notificationsと相互作用するため、必ず動的グループに
ons-topics
、orm-stacks
およびorm-jobs
へのアクセス権を付与してください。各サービスの権限の完全なリストの詳細は、ポリシー・リファレンスを参照してください。
タスク4: ビルド・パイプラインの作成
アーティファクトは構築しませんが、デプロイメント・パイプラインをトリガーするにはビルド・パイプラインが必要です。
-
ビルド・パイプラインと「デプロイメントのトリガー」タイプのステージを作成します。
-
「デプロイメント・パイプラインの選択」をクリックし、タスク3で作成したパイプラインを選択します。
タスク5: トリガーの作成
コード・プッシュで起動するトリガーを作成する必要があります。
-
「トリガー」にナビゲートし、「トリガーの作成」をクリックします。
-
「トリガーの作成」ページで、次の情報を入力します。
- ソース接続: OCIコード・リポジトリを入力します。
- コード・リポジトリの選択:タスク1で作成したリポジトリを選択します。
-
「アクションの追加」をクリックし、次の情報を入力します。
- ビルド・パイプライン:タスク4で作成したビルド・パイプラインを選択します。
- イベント: 「プッシュ」を選択します。
- ビルド実行条件:ユース・ケースに従って入力します。この例では、次の情報を入力します。
- ソース・ブランチ: mainと入力します。
- 含めるファイル: main.tfと入力します。
タスク6: フローのテスト
ここでは、チュートリアルのこの時点まで続いたワークフローを示します。
- コードプッシュ。
- トリガー
- ビルド・パイプライン
- デプロイメント・パイプライン
- シェル・スクリプトは
echo "Running RM apply command"
を実行します。
シェルスクリプトにさらに複雑さを追加する前に、ワークフローの動作を確認します。
-
新しいコードをプッシュします。
-
ビルド・パイプラインがトリガーされたことを確認します。
-
デプロイメント・パイプラインがトリガーされたことを確認します。
-
シェル・スクリプトが正常に実行されたことを確認します
すべてが期待どおりに機能しています。最後のタスクは、シェル・スクリプトを再構築してリソース・マネージャ・スタックをトリガーすることです。
タスク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"
シェル・スクリプトを変更するには、次のステップを実行します。
-
ジョブの作成
最初に実行するコールは
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を参照してください。
-
ジョブ・ステータスの取得
ジョブが成功したか失敗したかを確認する必要があります。そのためには、
job_id
をjob get
に渡し、ジョブのプロパティを返します。具体的には、lifecycle-state
に関心があります。job_state=$(oci resource-manager job get --job-id $job_id --raw-output --query 'data."lifecycle-state"')
詳細は、OCI CLIコマンド・リファレンス: job getを参照してください。
-
ジョブ・ステータスを分析します。
ジョブが成功した(0)か失敗した(1)かに応じて終了コードを変更するロジックを追加します。
if [ $job_state == SUCCEEDED ]; then echo "Resource Manager job succeeded" exit 0 else echo "Resource Manager job failed" exit 1 fi
-
前述のステップを集計し、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: エンドツーエンド・テスト
完全なアーキテクチャとフローは次のようになります。
アーキテクチャの動作を確認します。
-
新しいコードをプッシュします。
-
シェル・スクリプトが正常に実行されたことを確認します。
-
Terraformが正常に適用されたことを確認します。
次のステップ
このチュートリアルでは、OCI DevOpsを使用してOCI Resource Managerスタック・デプロイメントを自動化する方法を示します。これは基本的なフローを示す単純な例です。学習した概念を取得し、それらに基づいて構築し、ユースケースに合せて調整し、既存のCI/CDパイプラインに組み込むことをお薦めします。
関連リンク
承認
- 著者 - Cody Brinkman (クラウド・アーキテクト)、Qian Chen (テクニカル・スタッフ、OCI開発者ツールおよびサービス担当メンバー)およびNandan Kandregula (OCI開発者ツールおよびサービス担当ソフトウェア開発マネージャ)
その他の学習リソース
docs.oracle.com/learnの他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。
製品ドキュメントは、Oracle Help Centerを参照してください。
Use Oracle Cloud Infrastructure DevOps to Automate OCI Resource Manager Deployments
G16602-01
October 2024