Oracle Cloud Infrastructure DevOpsサービスおよびOracle Cloud Infrastructureファンクションを使用してCI/CDパイプラインを構築します

アプリケーションをクラウドで効率的に実行するためには、ソフトウェアの迅速な配信が不可欠です。Oracle DevOpsサービスは、開発者のための継続的な統合およびデプロイメント(CI/CD)プラットフォームを提供します。DevOpsサービスを使用して、Oracle Cloudでソフトウェアおよびアプリケーションを簡単に構築、テストおよびデプロイできます。DevOpsビルドおよびデプロイメント・パイプラインは、変更主導型のエラーを削減し、リリースの作成およびデプロイに顧客が費やす時間を短縮します。

このサービスでは、コードを格納するプライベートGitリポジトリも提供され、外部コード・リポジトリへの接続がサポートされます。オンプレミスや他のクラウドからOracle Cloud Infrastructure (OCI)にワークロードを移行する場合でも、OCIで新しいアプリケーションを開発する場合でも、DevOpsサービスを使用して、ソフトウェア・デリバリのライフサイクルを簡略化できます。

アーキテクチャ

このリファレンス・アーキテクチャでは、OCI DevOpsおよびOCIファンクション・サービスを使用してpythonアプリケーションを構築およびデプロイします。

アプリケーション・ソース・コードは、DevOpsコード・リポジトリでホストされます。エンド・ユーザーはコードをコード・リポジトリにコミットします。コード・リポジトリへの新しいコミットによって、ビルド・パイプラインの開始がトリガーされます。ビルド・パイプラインは、ユーザー定義フローに従って、OCIファンクション・サービスにデプロイするためのファンクション・アーティファクトを構築します。ビルドの出力は、Dockerイメージとしてコンテナ・レジストリに格納されます。デプロイメント・パイプラインは、コンテナ・レジストリのビルド済イメージを使用してOCI Functions環境にデプロイします。次のアーキテクチャ図は、デフォルト・イメージとカスタム・イメージ(Dockerfileを使用)を使用して、アプリケーションをどのように構築してデプロイするかを示しています。

このCI/CDワークフローの例の設定を簡略化するために、このサンプル・アプリケーションではTerraformを使用して、DevOpsリソースの作成および構成を自動化します。

次の図は、この参照アーキテクチャを示しています。

cicd-pipe-devops-functions-arch.pngの説明が続きます
図cicd-pipe-devops-functions-arch.pngの説明

cicd-pipe-devops-functions-arch-oracle.zip

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

    OCIリージョンは、可用性ドメインと呼ばれる1つ以上のデータ・センターを含むローカライズされた地理的領域です。地方は他の地域から独立し、たくさんの距離(国や大陸など)を分けることができます。アーキテクチャは単一のリージョンを使用します。

  • DevOpsプロジェクト

    CI/CDワークフローの実装に必要なDevOpsリソースの論理グループ。DevOpsリソースは、アーティファクト、パイプラインの構築、デプロイメント・パイプライン、外部接続、トリガーおよび環境です。DevOpsプロジェクトを使用すると、すべてのDevOpsリソースのロギング、監視および通知を簡単に有効にできます。

  • パイプラインの構築

    ビルド・パイプラインは、ソース・コード・リポジトリからコミットIDを取得し、そのソース・コードを使用してビルド手順を実行します。ビルド・パイプラインは、ビルド・プロセスの一連のステージ(ソフトウェア・アーティファクトの構築、テストおよびコンパイル、OCIリポジトリへのアーティファクトの提供、およびオプションでデプロイメントをトリガー)を定義します。ビルド実行のフローおよび手順は、ビルド仕様ファイルで定義します。

  • コード・リポジトリ

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

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

    一連のアーティファクトをターゲット環境に提供およびデプロイするための一連のステップ。ソフトウェア・リリースのフローおよびロジックは、シリアルまたはパラレルで実行できるステージを定義することで制御できます。

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

    ステージとは、パイプラインの実行中に行われる個々のアクションです。DevOpsデプロイメント・パイプラインには、リリース・プロセスで使用する次の事前定義済のステージ・タイプが含まれています。

    • ローリング・デプロイメント: Oracle Container Engine for Kubernetes (OKE)、ファンクションまたはインスタンス・グループへの増分リリース
    • 待機: N秒待機
    • 手動承認:承認が指定されている場合は続行します。承認が否認された場合は停止します。
    • ファンクションの起動:ファンクションをコールしてリクエスト・パラメータのアーティファクトを渡すことで、カスタム・タスクまたは統合を実行します。
  • DevOpsアーティファクト

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

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

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

  • OCIロギングおよび通知サービス

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

  • デプロイメント環境

    環境とは、アーティファクトがデプロイされる顧客のコンピューティング・リソースの集合です。環境は、ファンクション、コンピュート仮想マシン(VM)またはベア・メタル・インスタンス、またはOKEクラスタです。

    • Oracle Kubernetesクラスタ: OCI Container Engine for Kubernetes (OKE)は、コンテナ化されたアプリケーションをクラウドにデプロイするために使用できる、完全管理、スケーラブル、可用性の高いサービスです。
    • コンピュート・インスタンス: OCI Computeサービスでは、クラウドでコンピュート・ホストをプロビジョニングおよび管理できます。CPU、メモリー、ネットワーク帯域幅およびストレージのリソース要件を満たすシェイプを使用してコンピュート・インスタンスをデプロイできます。
    • 関数: Oracle Functionsは、完全に管理されたマルチテナントでスケーラビリティが高くオンデマンドのfunctions-as-a-serviceプラットフォームです。このサービスはエンタープライズグレードのOracle Cloud Infrastructure上に構築されており、Fn Projectオープン・ソース・エンジンを搭載しています。
    環境は、デプロイメント・パイプラインのリージョンとは異なるOCIリージョンに配置できます。この分離により、開発者は同じデプロイメント・パイプラインを使用して複数のOCIリージョンにデプロイできます。

推奨

開始点として次の推奨事項を使用しますが、ここで説明するアーキテクチャとは異なる要件があることに注意してください。
  • 関数のメモリー割り当てとタイムアウト
    次の設定に従ってfunc.yamlファイルを更新することで、構成を変更できます。
  • 仮想クラウド・ネットワーク(VCN)

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

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

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

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

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

注意事項

OCI DevOpsおよびOCIファンクション・サービスを使用してPythonアプリケーションを構築およびデプロイする場合は、次の点を考慮してください:

  • DevOpsは、OKE、コンピュート・ホストおよびファンクションへのデプロイメントをサポートします。
  • インスタンス・グループをComputeにデプロイする場合、Linuxホストのみがサポートされます。
  • DevOpsでデプロイされたアーティファクトは、OCIアーティファクト・レジストリまたはコンテナ・イメージ・レジストリ・リポジトリに存在する必要があります。
  • ベスト・プラクティスは、各アプリケーションとそのすべてのマイクロサービスを単一のプロジェクトにグループ化することです。

デプロイ

このリファレンス・アーキテクチャのデプロイに必要なコードは、GitHubで入手できます。1回のクリックでコードをOracle Cloud Infrastructure Resource Managerにプルし、スタックを作成してデプロイできます。または、GitHubからコンピュータにコードをダウンロードし、コードをカスタマイズし、Terraform CLIを使用してアーキテクチャをデプロイします。

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

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

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

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

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

詳細の検討

Oracle DevOpsサービスの詳細は、次のリソースを参照してください。

確認

  • 作成者: Rahul M R
  • コントリビュータ: Lukasz Feldman