GitHubアクションを使用したOCI関数のCI/CDパイプラインの構築
アーキテクチャ
このアーキテクチャでは、GitHub Actionsを外部の継続的インテグレーションおよびデプロイメント・システムとして使用して、コードを構築し、コンテナ化してOracle Cloud Infrastructure Functionsをデプロイします。GitHubアクションのかわりに、GitLabやAzure DevOpsなどの他の統合開発環境(IDE)ツールを使用できます。
次の図は、このリファレンス・アーキテクチャを示しています。

図cicd-deploy-oci-functions.pngの説明
cicd-deploy-oci-functions-oracle.zip
このアーキテクチャには、次の外部システムが含まれています。
- 外部システム(CI/CD)
CI/CDの外部システムには、統合開発環境(IDE)、コード・リポジトリおよびパイプラインが含まれます。
このアーキテクチャでは、GitHubアクションを外部の継続的インテグレーションおよびデプロイメント・コード・リポジトリ・システムとして使用します。コードを構築し、Dockerを使用してコンテナ化するために使用されます。コンテナ化されたイメージの準備ができたら、GitHubアクションによってイメージがOCIレジストリにプッシュされます。レジストリへの転送が完了すると、OCI Functionsデプロイメントが開始されます。要件に基づいて、OCI DevOps、Azure DevOps、Gitlab、Jenkinsなどの他の継続的統合またはデプロイメント・システムを使用できます。
- 外部システム(SIEM/ITSM/OTHER)
SIEMおよびITSMの外部システムは、他のサード・パーティ・システムまたはOCI以外のサービスを表します。
OCI監査ログ、サービス・ログおよびセキュリティ・イベントの集計およびエンリッチは、外部SIEMまたはITSMシステムに対する基本的な要件です。このデータを一元化することで、組織はテナンシを分析、監視、保護できます。
このアーキテクチャには、次のコンポーネントがあります。
- リージョン
Oracle Cloud Infrastructureリージョンとは、可用性ドメインと呼ばれる1つ以上のデータ・センターを含む、ローカライズされた地理的領域です。リージョンは他のリージョンから独立し、長距離の場合は(複数の国または大陸にまたがって)分離できます。
- 仮想クラウド・ネットワーク(VCN)およびサブネット
VCNは、Oracle Cloud Infrastructureリージョンで設定する、カスタマイズ可能なソフトウェア定義のネットワークです。従来のデータ・センター・ネットワークと同様に、VCNを使用するとネットワーク環境を制御できます。VCNには重複しない複数のCIDRブロックを含めることができ、VCNの作成後にそれらを変更できます。VCNをサブネットにセグメント化して、そのスコープをリージョンまたは可用性ドメインに設定できます。各サブネットは、VCN内の他のサブネットと重複しない連続した範囲のアドレスで構成されます。サブネットのサイズは、作成後に変更できます。サブネットはパブリックにもプライベートにもできます。
- レジストリ
Oracle Cloud Infrastructure Registryは、本番ワークフローを簡素化できる、Oracle管理のレジストリです。レジストリを使用すると、Dockerイメージなどの開発アーティファクトを簡単に格納、共有および管理できます。Oracle Cloud Infrastructureの高可用性とスケーラビリティのアーキテクチャにより、アプリケーションを確実にデプロイして管理できます。
- 関数
Oracle Cloud Infrastructure Functionsは、完全に管理された、マルチテナントのスケーラビリティが高いオンデマンドのFunctions-as-a-Service (FaaS)プラットフォームです。これは、Fn Projectのオープン・ソース・エンジンによって機能します。ファンクションを使用すると、コードをデプロイし、直接コールするか、イベントに応答してトリガーできます。Oracle Functionsは、Oracle Cloud Infrastructure RegistryでホストされているDockerコンテナを使用します。
- サービス・コネクタ
Oracle Cloud Infrastructure Service Connector Hubは、OCIのサービス間のデータ移動を調整するクラウド・メッセージ・バス・プラットフォームです。サービス・コネクタを使用して、ソース・サービスからターゲット・サービスにデータを移動できます。サービス・コネクタを使用すると、オプションで、ターゲット・サービスに配信される前にデータに対して実行するタスク(関数など)を指定することもできます。
Oracle Cloud Infrastructure Service Connector Hubを使用すると、セキュリティ情報およびイベント管理(SIEM)システム用のロギング集約フレームワークを迅速に構築できます。
- ロギングLoggingは、クラウド内のリソースから次のタイプのログへのアクセスを提供する、高度にスケーラブルな完全管理型のサービスです:
- 監査ログ: 監査サービスによって発行されたイベントに関連するログ。
- サービス・ログ: APIゲートウェイ、イベント、ファンクション、ロード・バランシング、オブジェクト・ストレージ、VCNフロー・ログなどの個々のサービスによって発行されるログ。
- カスタム・ログ: カスタム・アプリケーション、他のクラウド・プロバイダまたはオンプレミス環境からの診断情報を含むログ。
- ストリーミング
Oracle Cloud Infrastructure Streamingは、リアルタイムで消費および処理できる連続した大容量データ・ストリームを収集するための、スケーラブルで耐久性の高いフルマネージド・ストレージ・ソリューションを提供します。ストリーミングは、アプリケーション・ログ、運用テレメトリ、Webクリック・ストリーム・データなど、大量のデータを取り込むために使用できます。また、パブリッシュ/サブスクライブのメッセージング・モデルにおいてデータが連続して順番に生成および処理されるような他のユース・ケースでも使用できます。
- 通知
Oracle Cloud Infrastructure Notificationsサービスは、パブリッシュ/サブスクライブ・パターンを介して分散コンポーネントにメッセージをブロードキャストし、Oracle Cloud Infrastructureでホストされているアプリケーションに対して、セキュア、高信頼性、低レイテンシおよび永続的なメッセージを配信します。
レコメンデーション
- VCN
VCNを作成するときには、必要なCIDRブロックの数を決定し、VCN内のサブネットにアタッチする予定のリソースの数に基づいて各ブロックのサイズを決定します。標準のプライベートIPアドレス領域内にあるCIDRブロックを使用します。
プライベート接続を設定する他のネットワーク(Oracle Cloud Infrastructure、オンプレミス・データ・センターまたは別のクラウド・プロバイダ)と重複しないCIDRブロックを選択します。
VCNを作成した後、そのCIDRブロックを変更、追加および削除できます。
サブネットを設計するときには、トラフィック・フローおよびセキュリティ要件を考慮してください。特定の層またはロール内のすべてのリソースを、セキュリティ境界として機能できる同じサブネットにアタッチします。
リージョナル・サブネットを使用します。
- セキュリティ・リスト
セキュリティ・リストを使用して、サブネット全体に適用されるイングレスおよびエグレス・ルールを定義します。
- ネットワーク・セキュリティ・グループ(NSG)
NSGを使用して、特定のVNICに適用されるイングレスおよびエグレス・ルールのセットを定義できます。NSGでは、VCNのサブネット・アーキテクチャをアプリケーションのセキュリティ要件から分離できるため、セキュリティ・リストではなくNSGを使用することをお薦めします。
- クラウド・ガード
クラウド・ガードをテナンシ・レベルで適用して、最も広い範囲をカバーし、複数の構成を維持する管理上の負担を軽減します。
管理対象リスト機能を使用して、特定の構成をディテクタに適用することもできます。
- セキュリティ・ゾーン
最大限のセキュリティーを必要とするリソースの場合、Oracleではセキュリティーゾーンを使用することをお勧めします。セキュリティ・ゾーンは、ベスト・プラクティスに基づくセキュリティ・ポリシーのOracle定義レシピに関連付けられたコンパートメントです。たとえば、セキュリティ・ゾーン内のリソースにパブリック・インターネットからアクセスできず、顧客管理キーを使用して暗号化する必要があります。セキュリティ・ゾーンでリソースを作成および更新すると、Oracle Cloud Infrastructureでは、セキュリティ・ゾーン・レシピのポリシーに対して操作が検証され、ポリシーに違反する操作が拒否されます。
- OCI関数
OCI Functionsサービスを介してデプロイされたアプリケーションは、高可用性、スケーラブル、セキュア、および監視されます。OCI Functionsを使用すると、Java、Python、Node、Go、RubyおよびC#でコードを作成できます(また、高度なユース・ケースの場合は、独自のDockerfileおよびGraal VMを使用できます)。その後、コードをデプロイし、直接コールするか、イベントに応答してトリガーできます。
- OCIレジストリ
このアーキテクチャでは、パブリックDockerレジストリをデプロイします。Dockerイメージはレジストリにプッシュおよびプルされます。これにより、インターネット・アクセスと適切なURLの知識を持つユーザーは、Oracle Cloudのパブリック・リポジトリからイメージをプルできます。
考慮事項
このリファレンス・アーキテクチャをデプロイする場合は、次の点を考慮してください。
- SIEM統合
テナンシのリージョンおよびアプリケーション構成全体での集計ログ情報のデプロイメントを合理化するために、OCI Functionsサービスを使用できます。
OCI Functionsを使用して、ログをSIEMのHTTPS APIエンドポイントにプッシュできます。これを行うには、他のOCIサービスから読み取るリージョン別のOCIサービス・コネクタ・ハブを追加します。
- グループ化機能
ベスト・プラクティスとして、複数の関数(環境ごとに1つなど)を定義できます。複数の環境(DEV、UAT、PRODなど)がある場合は、ファンクションごとに個別のコード行を個別の環境で追跡できます。
デプロイ
GitHubから自動化スクリプト・コードをダウンロードし、コードをカスタマイズしてデプロイします。
OCI Functionsにデプロイしたファンクションを次により呼び出すことができます:
- Fn ProjectのCLI。
- Oracle Cloud Infrastructure SDKs。
- ファンクションの呼出しエンドポイントへの署名付きHTTPリクエスト。すべてのファンクションに呼出しエンドポイントがあります。
- その他のOracle Cloudサービス(イベント・サービスでイベントによりトリガーされるなど)または外部サービス。
- GitHubに移動します。
- リポジトリをクローニングまたはダウンロードします。
- このアーキテクチャをデプロイするには、参照YAMLファイル、サンプルhello worldアプリケーション・コードおよびREADMEドキュメントに従います。