OCI DevOpsを使用して、ProvenanceおよびContainerインスタンスのHelmチャートをシェル・ステージ経由でデプロイします

クラウドでアプリケーションを効率的に実行するには、ソフトウェアの迅速な配信が不可欠です。Oracle Cloud Infrastructure DevOps (OCI DevOps)サービスは、開発者に継続的な統合およびデプロイメント(CI/CD)プラットフォームを提供します。

OCI DevOpsサービスを使用すると、Oracle Cloudでソフトウェアおよびアプリケーションを簡単に構築、テストおよびデプロイできます。OCI DevOpsビルドおよびデプロイメント・パイプラインにより、変更に伴うエラーが削減され、リリースの構築およびデプロイに費やす時間が短縮されます。

OCI DevOpsサービスは、コードを格納するためのプライベートGitリポジトリも提供し、ワークロードをOracle Cloud Infrastructure (OCI)に移行する外部コードrepositories.Whetherへの接続をオンプレミスまたはその他のクラウドから、またはOCIで新しいアプリケーションの開発までサポートします。OCI DevOpsサービスを使用して、ソフトウェア配信ライフサイクルを簡素化できます。

アーキテクチャ

このリファレンス・アーキテクチャでは、OCI DevOpsを使用してクラウドネイティブ・アプリケーション・デプロイメントをデプロイします。Oracle Container Engine for Kubernetes (OKE)およびOCIコンテナ・インスタンスは、OCI DevOpsのデプロイメント・ターゲットとして使用されます。

このリファレンス・アーキテクチャで説明する主な機能は次のとおりです。

  • ProvenanceおよびIntegrityチェックを含むHelmチャートのデプロイ: デプロイメント・パイプラインを介してGNU Privacy Guardキーを使用して、Helmパッケージの署名および整合性の検証を行います。
  • 「シェルを使用」ステージを使用してアプリケーションをOCIコンテナ・インスタンスにデプロイ: シェル・ステージでは、デプロイメント・パイプラインでカスタム・コマンドを実行できます。このステージは、デプロイメント・パイプラインの任意の時点で追加できます。このリファレンス・アーキテクチャでは、「シェル」ステージを使用してアプリケーションをOCIコンテナ・インスタンスにデプロイします。
  • OCIビルド・パイプラインのファイルベースの実行のトリガー: OCI DevOpsでは、変更をコード・リポジトリにコミットすると、ビルド実行が自動的にトリガーされます。これを使用すると、コード変更時にビルド・パイプラインが実行されるファイル/フォルダのセットを除外して含めることができます。
  • カスタム・ビルド・ランナーを使用したマネージド・ビルド・ステージの実行: カスタム・ビルド・ランナーでは、ビルド手順の実行に必要なリソースをサポートするために、ビルド・ランナーに必要なOCPUおよびメモリーを設定できます。
  • OCI DevOpsビルド・パイプラインのリモート状態バックエンドでTerraformを使用: S3互換OCI Object Storageバケットは、Terraform状態を格納するリモート・バックエンドとして使用されます。TerraformはOCIビルド・パイプラインから実行され、リソース・プリンシパルが有効になっているため、クライアントはポリシーに基づいてリソース・アクセスを制御できます。

次の図は、このリファレンス・アーキテクチャを示しています。



oci-devops-helm-shell-oracle.zip

アーキテクチャには次のコンポーネントがあります。

  • テナント

    テナンシは、Oracle Cloud Infrastructureへのサインアップ時にOracleがOracle Cloud内で設定するセキュアで分離されたパーティションです。テナンシ内のOracle Cloudでリソースを作成、整理および管理できます。テナンシは、会社または組織と同義です。通常、会社は単一のテナンシを持ち、そのテナンシ内の組織構造を反映します。通常、単一のテナンシは単一のサブスクリプションに関連付けられ、単一のサブスクリプションには1つのテナンシのみが含まれます。

  • リージョン

    Oracle Cloud Infrastructureリージョンは、可用性ドメインと呼ばれる1つ以上のデータ・センターを含むローカライズされた地理的領域です。リージョンは他のリージョンから独立しており、広大な距離で(国間や大陸間でも)リージョンを分離できます。

  • コンパートメント

    コンパートメントは、Oracle Cloud Infrastructureテナンシ内のリージョン間論理パーティションです。コンパートメントを使用して、Oracle Cloudでリソースを編成し、リソースへのアクセスを制御し、使用割当てを設定します。特定のコンパートメント内のリソースへのアクセスを制御するには、誰がリソースにアクセスできるか、どのアクションを実行できるかを指定するポリシーを定義します。

  • コード・リポジトリ

    プライベートGitリポジトリは、OCI DevOpsサービスでホストできます。OCI DevOpsコード・リポジトリを使用して、ソース・コードを格納、管理および開発できます。

  • ビルド・パイプライン

    ビルド・パイプラインは、ビルド・プロセスのステージのセット(ソフトウェア・アーティファクトの構築、テストおよびコンパイル、アーティファクトのOCIリポジトリへの配信、オプションでデプロイメントのトリガー)を定義します。

  • ビルド・ステージの管理

    ビルド手順を実行する高速かつスケーラブルなOCI DevOpsサービス管理のビルド・ランナーを使用して、マネージド・ビルド・ステージでソフトウェアをビルドおよびテストします。このリファレンス・アーキテクチャでは、デフォルトのシェイプ(事前定義済のOCPUとメモリー)およびカスタム・シェイプ(OCPUとメモリーのユーザー定義値)を含むビルド・ステージを使用しています。

  • アーティファクト・ステージの配信

    アーティファクトの配信ステージは、アーティファクトまたはコンテナ・イメージをOCIコンテナ・レジストリまたはOCIアーティファクト・レジストリにプッシュし、管理対象ビルド・ステージをポストするのに役立つビルド・ステージの1つです。

  • パイプラインのデプロイ

    アーティファクトのセットをターゲット環境にデプロイするための一連のステップ。デプロイメント・パイプラインには、順次またはパラレルに実行されるステージが含まれます。

  • Helmチャート・デプロイメント・ステージ

    Helmは、Kubernetes用に構築されたソフトウェアを共有、パッケージ化およびデプロイする機能を提供する、Kubernetesのオープンソース・パッケージ・マネージャです。OCI DevOpsサービスは、Container Engine for Kubernetes (OKE)クラスタへのHelmチャートのデプロイメントをサポートします。また、Helmチャート・デプロイメント・ステージでは、デプロイメント前にHelmチャートの整合性を検証します。

  • シェル・デプロイメント・ステージ

    シェル・ステージでは、デプロイメント・パイプラインでカスタム・コマンドを実行できます。このステージは、デプロイメント・パイプラインの任意の時点で追加できます。

  • コンテナ・インスタンス

    OCIコンテナ・インスタンスは、サーバーを管理することなく、迅速かつ簡単にコンテナを実行できるサーバーレス・コンピュート・サービスです。コンテナ・インスタンスは、仮想マシンと同じ分離を提供するコンテナ・ワークロード用に最適化されたサーバーレス・コンピュート上でコンテナを実行します。

  • ボールト

    Oracle Cloud Infrastructure Vaultでは、クラウド内のリソースへのアクセスを保護するために使用するデータおよびシークレット資格証明を保護する暗号化キーを集中管理できます。Vaultサービスを使用して、ボールト、キーおよびシークレットを作成および管理できます。

  • オブジェクト・ストレージ

    Oracle Cloud Infrastructure Object Storageサービスは、インターネットスケールの高パフォーマンス・ストレージ・プラットフォームであり、信頼性が高くコスト効率の高いデータ耐久性を提供します。Object Storageサービスでは、分析データやイメージやビデオなどのリッチ・コンテンツなど、あらゆるコンテンツ・タイプの非構造化データを無制限に格納できます。

  • ロギング

    Oracle Cloud Infrastructure Loggingサービスは、テナンシ内のすべてのログに対応した、スケーラビリティの高いフルマネージド型の一元管理ペインです。ロギングにより、Oracle Cloud Infrastructureリソースからログにアクセスできます。これらのログには、リソースのパフォーマンスおよびアクセス方法を説明するクリティカルな診断情報が含まれます。

  • 通知

    Oracle Cloud Infrastructure Notificationsサービスを使用して、トピックおよびサブスクリプションを使用するメッセージを発行するための通信チャネルを設定します。

推奨事項

開始点として次の推奨事項を使用します。実際の要件は、ここで説明するアーキテクチャーとは異なる場合があります。
  • VCN

    VCNを作成する際、VCNのサブネットにアタッチする予定のリソース数に基づいて、必要なCIDRブロックの数と各ブロックのサイズを決定します。標準プライベートIPアドレス空間内のCIDRブロックを使用します。

    プライベート接続を設定する他のネットワーク(Oracle Cloud Infrastructure、オンプレミス・データ・センターまたは別のクラウド・プロバイダ)と重複しないCIDRブロックを選択します。

    VCNを作成した後、そのCIDRブロックを変更、追加および削除できます。

    サブネットを設計するときは、トラフィック・フローおよびセキュリティ要件を考慮してください。特定の層またはロール内のすべてのリソースを同じサブネットに接続し、セキュリティ境界として機能できます。

  • コンピュート・シェイプ

    このアーキテクチャでは、OKEクラスタ・ノード内のコンピュート・ホストまたは仮想ノードをホストするために、最小リソースを持つE4フレックス・シェイプを持つOracle Linux OSイメージを使用します。アプリケーションでより多くのメモリーまたはコアが必要な場合は、別のシェイプを選択できます。

  • Artifactレジストリ

    このアーキテクチャは、インスタンス・グループ、OKEおよびファンクションのデプロイメントで使用されるソフトウェアおよび構成のアーティファクトを作成します。アーキテクチャは、内部で使用するアーティファクト・レジストリ・リポジトリを作成します。ソフトウェア・バイナリ、テキストおよびデプロイメント構成は、アーティファクト・レジストリ・リポジトリにアップロードされ、アーティファクトからダウンロードされます。

  • コンテナ・イメージ・レジストリ

    このアーキテクチャでは、内部使用のためにレジストリをプライベートDockerレジストリとしてデプロイします。Dockerイメージがレジストリにプッシュされ、レジストリからプルされます。レジストリをパブリックDockerレジストリとして使用することもでき、インターネット・アクセスと適切なURLの知識を持つユーザーは、Oracle Cloudのパブリック・リポジトリからイメージをプルできます。

  • 整合性とセキュリティ

    アプリケーション・ソフトウェアのセキュリティと整合性を確保するために、いくつかの重点領域があります。OCI Vaultは、ヘルム・チャート暗号化を格納し、デプロイ前にチャートの検証を確認するために使用されます。レジストリ(アーティファクトおよびコンテナ)によって、アプリケーション・イメージおよびアーティファクトが保存され、必要なセキュリティで保存されます。いくつかのセキュリティ・ルールおよび必要なルート・ルールは、アプリケーションおよびインフラストラクチャに必要なネットワーク・トラフィックのみを許可するために、OCI Virtual Cloudネットワークを介して適用されます。また、トラフィックが保護および制御されるように、オブジェクト・ストレージはプライベートとしてマークされます。

  • オブジェクト・ストレージ

    オブジェクト・ストレージでは、データベースのバックアップ、分析データ、イメージやビデオなどのリッチ・コンテンツなど、あらゆるコンテンツ・タイプの構造化データおよび非構造化データにすばやくアクセスできます。インターネットから直接またはクラウド・プラットフォーム内から、安全かつセキュアにデータを格納し、取得できます。パフォーマンスやサービスの信頼性を低下させることなく、ストレージをシームレスに拡張できます。迅速、即時、頻繁にアクセスする必要があるホット・ストレージには、標準ストレージを使用します。アーカイブ・ストレージは、長期間保持し、ほとんどまたはほとんどアクセスしないコールド・ストレージに使用します。アプリケーション・コードは、プライベートにホストされるリポジトリ内で設定されます。必要なすべてのリソースに加えて、それに応じてOCIアイデンティティ・ポリシーが適用されます。

注意事項

OCI DevOpsサービスを使用して継続的インテグレーションおよびデプロイメント(CI/CD)プラットフォームをデプロイする場合は、次の要因を考慮してください。

  • DevOps: サポートされるデプロイメント

    DevOpsは、Oracle Container Engine for Kubernetes (OKE)、コンピュート・ホストおよびOCI Functionsへのデプロイメントをサポートします。このアーキテクチャはOKEクラスタにデプロイされ、他の可能なターゲットにシェル・ステージを使用します。特定の要件に基づいて他のエンドポイントにデプロイすることを検討してください。

  • デプロイされたアーティファクト

    DevOpsでデプロイするアーティファクトは、OCIアーティファクト・レジストリまたはコンテナ・イメージ・レジストリ・リポジトリに存在する必要があります。

  • アプリケーションのグループ化

    ベスト・プラクティスとして、各アプリケーションとそのすべてのマイクロサービスを単一のプロジェクトにグループ化します。

デプロイ

このリファレンス・アーキテクチャのTerraformコードは、Oracle Cloud Infrastructure Resource Managerのサンプル・スタックとして入手できます。GitHubからコードをダウンロードし、特定の要件に合せてカスタマイズすることもできます。

  • Oracle Cloud Infrastructure Resource Managerのサンプル・スタックを使用してデプロイします:
    1. Oracle Cloudへのデプロイをクリックします

      まだサインインしていない場合は、テナンシおよびユーザー資格証明を入力します。

    2. スタックをデプロイするリージョンを選択します。
    3. 画面上のプロンプトおよび指示に従ってスタックを作成します。
    4. スタックを作成したら、「Terraformアクション」をクリックし、「プラン」を選択します。
    5. ジョブが完了するまで待機し、プランをレビューします。

      変更を加えるには、「スタックの詳細」ページに戻り、「スタックの編集」をクリックして必要な変更を行います。次に、「プラン」処理を再度実行します。

    6. それ以上の変更が不要な場合は、「スタックの詳細」ページに戻り、「Terraformアクション」をクリックして「適用」を選択します。
  • GitHubのTerraformコードを使用してデプロイします:
    1. GitHubにアクセスします。
    2. リポジトリをクローニングするか、ローカル・コンピュータにダウンロードします。
    3. READMEドキュメントの指示に従います。

詳細の参照

このリファレンス・アーキテクチャの機能の詳細は、次の追加リソースを参照してください。

謝辞

  • Author: Rahul M R