Oracle Cloud Infrastructure DevOpsを使用した継続的デプロイメント・パイプラインの構築

クラウドでアプリケーションを効率的に実行するには、ソフトウェアの迅速な配信が不可欠です。Oracle Cloud Infrastructure (OCI) DevOpsは、開発者にエンドツーエンドの継続的デプロイメント・エクスペリエンスを提供します。OCI DevOpsには、継続的なソフトウェア・デプロイメント・プロセス(CD)をOCIプラットフォーム(Container Engine for Kubernetes (OKE)、FunctionsおよびComputeインスタンス)に自動化するためのパイプラインのデプロイが含まれています。

パイプライン・デプロイメントでソフトウェア・リリースを自動化すると、開発者の生産性が向上し、機能のリリース頻度が増加し、エラーが減少します。これにより、デプロイメント中のダウンタイムを回避し、アプリケーションの更新の複雑さを自動化できます。OCI DevOpsは、オンプレミスや他のクラウドからOCIに移行するお客様、およびOCIで新しいアプリケーションを開発しているお客様の両方で使用できます。

アーキテクチャ

このリファレンス・アーキテクチャでは、サンプルHello WorldアプリケーションがOCI DevOpsを使用してデプロイされます。Hello Worldアプリケーションはすでに構築されており、デプロイの準備ができています。アプリケーションは、OKE、コンピュート・インスタンスおよびファンクションという3つの異なるターゲット環境にデプロイされます。プロセスを簡素化するために、Terraformはインフラストラクチャの自動化に使用されます。

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

dev-ops-deployment-pipeline.pngの説明が続きます
図dev-ops-deployment-pipeline.pngの説明

deploy-pipeline-devops-arch-oracle.zip

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

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

    このアーキテクチャは単一のリージョンを使用します。

  • DevOpsプロジェクト

    DevOpsプロジェクトは、継続的な統合およびデプロイメント(CI/CD)ワークロードの実装に必要なリソースの論理グループです。DevOpsリソースには、アーティファクト、デプロイメント・パイプラインおよび環境があります。DevOpsプロジェクトを使用すると、すべてのDevOpsリソースのロギング、監視および通知を簡単に有効化できます。

  • デプロイメント・パイプライン

    デプロイメント・パイプラインは、一連のアーティファクトを環境に割り当てるために満たす必要がある要件を保持します。パイプラインには、パイプラインの構成要素であるステージが含まれます。パイプラインには、シリアルまたはパラレルで実行されるステージが含まれるため、ソフトウェアリリースのフローとロジックを制御できます。

  • デプロイ・ステージ
    ステージとは、パイプラインの実行中に実行される個々のアクションです。DevOpsデプロイメント・パイプラインには、リリース・プロセスで使用する次の事前定義ステージ・タイプが含まれています。
    • ローリング・デプロイメント: OKE、ファンクションまたはインスタンス・グループへの増分リリース。
    • Wait:N秒待ちます。
    • 手動承認:承認が指定された場合に続行します。承認が却下された場合は停止します。
    • 関数の呼出し:関数を呼び出してカスタム・タスクと統合を実行し、リクエスト・パラメータのアーティファクトを渡します。
  • DevOpsアーティファクト

    DevOpsアーティファクトは、アプリケーションを構成するファイル、バイナリ、パッケージ、マニフェストまたはイメージへの参照またはポインタです。アーティファクトを作成する場合、実際のアーティファクトのソースの場所をOracle DevOpsに通知する必要があります。DevOpsは、OCIコンテナ・イメージ・レジストリおよびOCIアーティファクト・レジストリ・リポジトリをサポートしています。

  • アーティファクト・リポジトリ

    アーティファクト・リポジトリは、類似のアーティファクトをグループ化するためのリポジトリの作成に使用されます。リポジトリが作成されると、アーティファクトをアップロードできます。これらのアーティファクトは、ターゲット・デプロイメント環境に配信されるテキスト・ファイル、バイナリおよびデプロイメント・マニフェストのコレクションです。各アーティファクトには名前があり、パス: versionで構成されます。パスは、アーティファクトを編成するための文字列です。

  • OCI Logging and Notificationsサービス

    OCI Loggingサービスでは、デプロイメントに関連するログを格納します。デプロイメント・ランタイム出力およびデプロイメントの最終結果は、ログ・エントリとして表示されます。OCI Notifications Serviceは、デプロイメント・プロジェクトとそのリソースの最新の状態を可視化し、必要なアクションを実行します。たとえば、承認待ちのデプロイ・パイプラインのステージなど、重要なイベントが発生したときに通知されます。通知メッセージを受信したら、DevOpsデプロイメント・パイプラインに移動してステージを承認できます。

  • 導入環境
    環境とは、アーティファクトがデプロイされる顧客のコンピューティング・リソースの集合です。環境は、ファンクション、コンピュート仮想マシン(VM)またはベア・メタル・インスタンス、OKEクラスタのいずれかになります。
    • Oracle Kubernetesクラスタ(OKE): Oracle Container Engine for Kubernetesは、コンテナ化されたアプリケーションをクラウドにデプロイするために使用できる、完全に管理されたスケーラブルで可用性の高いサービスです。
    • コンピュート・インスタンス: OCI Computeサービスでは、クラウド内のコンピュート・ホストをプロビジョニングおよび管理できます。CPU、メモリー、ネットワーク帯域幅およびストレージのリソース要件を満たすシェイプを使用して、コンピュート・インスタンスを起動できます。
    • Functions: Oracle Functionsは、完全マネージド型のマルチテナントでスケーラビリティの高いオンデマンドのFunctions-as-a-Serviceプラットフォームです。エンタープライズグレードのOCIをベースにしており、Fn Projectオープン・ソース・エンジンを利用しています。
    環境は、デプロイメント・パイプラインのリージョンとは別のOCIリージョンに配置できます。これにより、開発者は、同じデプロイメント・パイプラインを使用して複数のOCIリージョンにデプロイできます。

推奨

開始点として次の推奨事項を使用します。お客様の要件がここで説明するアーキテクチャとは異なる場合があります。
  • コンピュート・シェイプ

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

  • VCN

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

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

    このアーキテクチャは、パブリックVCNを使用してOracle Container Engine for Kubernetesをホストします。プライベートVCNを使用することもできます。その場合、NATゲートウェイを使用して、パブリック・インターネットを介したクラスタ・アクセスを付与します。

  • OKE

    このアーキテクチャーは、ターゲット環境の1つとしてOKEクラスタに配備します。ワーカー・ノードは、E3またはE4 Oracle Linux OSにデプロイされます。このアーキテクチャでは、クラスタ内の3つのワーカー・ノードを使用しますが、各クラスタに最大1,000個のノードを作成できます。

  • 関数

    OCIファンクションにデプロイするアーキテクチャを選択すると、テナンシに新しいFunctionsアプリケーションおよびファンクションが作成されます。

  • インスタンス・グループ

    インスタンス・グループにデプロイするアーキテクチャを選択すると、選択したシェイプの新しいコンピュート・インスタンスがテナンシに作成されます。

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

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

  • アーティファクト・レジストリ

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

注意事項

このリファレンス・アーキテクチャをデプロイする際には、次の点を考慮してください。

  • DevOpsでサポートされているデプロイメント

    DevOpsは、OKE、コンピュート・ホストおよびファンクションへのデプロイメントをサポートします。このアーキテクチャは、OKEクラスタにデプロイされます。要件に基づいて他のエンドポイントにデプロイすることを検討してください。

  • Linuxのサポート

    コンピュート・インスタンスへのインスタンス・グループ・デプロイメントでは、Linuxホストのみがサポートされます。

  • デプロイ済アーティファクト

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

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

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

デプロイ

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

  • Oracle Cloud Infrastructure Resource Managerのサンプル・スタックを使用してデプロイします:
    1. 特定のユースケースの「デプロイ」ボタンをクリックして、リソース・マネージャにアクセスします。

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

    2. スタックをデプロイするリージョンを選択します。
    3. 画面に表示されるプロンプトと指示に従ってスタックを作成します。
    4. スタックの作成後、「Terraformアクション」をクリックし、「プラン」を選択します。
    5. ジョブが完了するまで待機し、プランを確認します。

      変更を行うには、「スタック詳細」ページに戻り、「スタックの編集」をクリックして必要な変更を行います。次に、「計画」処理を再実行します。

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

変更ログ

このログには、重大な変更がリストされます。