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-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オープン・ソース・エンジンを搭載しています。
推奨
- 関数のメモリー割り当てとタイムアウト
次の設定に従ってfunc.yamlファイルを更新することで、構成を変更できます。
パラメータの説明 設定 ファンクションを実行できる最大時間 - デフォルト値: 30
- 単位: 秒
- func.yamlパラメータ:タイムアウト
- 環境変数:該当なし
- Fn CLIオプション:該当なし
- ノート:
- 最大値: 300
- ベスト・プラクティスは、必要な時間に近いタイムアウトを指定することです。大幅に長くしないでください。
関数の最大メモリーしきい値 - デフォルト値: 128
- 単位: MB
- func.yamlパラメータ:メモリー
- 環境変数: FN_MEMORY
- Fn CLIオプション:該当なし
- ノート:
次のいずれか:
- 128
- 256
- 512
- 1024
- 仮想クラウド・ネットワーク(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のサンプル・スタックを使用してデプロイします:
をクリックします
まだサインインしていない場合は、テナンシおよびユーザー資格証明を入力します。
- スタックをデプロイするリージョンを選択します。
- 画面上のプロンプトおよび指示に従ってスタックを作成します。
- スタックの作成後、「Terraformアクション」をクリックし、「プラン」を選択します。
- ジョブが完了するのを待ってから、プランをレビューします。
変更するには、「スタックの詳細」ページに戻り、「スタックの編集」をクリックして必要な変更を行います。次に、「プラン」アクションを再実行します。
- これ以上変更が不要な場合は、「スタック詳細」ページに戻り、「Terraformアクション」をクリックして「適用」を選択します。
- GitHubのTerraformコードを使用してデプロイ:
- GitHubに移動します。
- リポジトリをローカル・コンピュータにクローニングまたはダウンロードします。
README
ドキュメントの指示に従います。