RubyをOracle Cloud Infrastructureにレールにデプロイ
このデプロイ可能なアーキテクチャのTerraform (oci-arch-ruby-rails-build
)は、次の「詳細」トピックからアクセスできるDevRel GitHubリポジトリにあります。
アーキテクチャ
アーキテクチャは、複数のサブネットを持つ1つのVCNで構成され、異なるサービスを分離できます。その結果、パブリック・アクセスはアクティブ/スタンバイ・ロード・バランサを介して行われます。追加のパブリック・サブネットには、バックエンド・サービスへのアクセスにSSHの使用をサポートする要塞が用意されています。
Load Balancerは、それぞれがRuby on Railsサーバーをホストする2つのコンピュート仮想マシン(VM)を接続します。これらのサーバーは、MySQLデータベースにアクセスできます。アクセスなどの考慮事項に対処するために、VMおよびMySQLデータベースはそれぞれ個別のサブネットにあります。
次の図は、このリファレンス・アーキテクチャを示しています。
図deploy- ruby- rails- mds- arch.pngの説明
deploy- ruby- rails- mds- arch- oracle.zip
-
テナント
テナンシは、Oracle Cloud Infrastructureのサインアップ時にOracle Cloud内でOracleが設定するセキュアで分離されたパーティションです。テナンシ内のOracle Cloudでリソースを作成、編成および管理できます。
テナンシは、会社または組織と同義です。通常、会社は単一のテナンシを持ち、そのテナンシ内の組織構造を反映します。通常、単一のテナンシは単一のサブスクリプションに関連付けられ、単一のサブスクリプションには1つのテナンシのみが含まれます。
- リージョン
Oracle Cloud Infrastructureリージョンは、可用性ドメインと呼ばれる1つ以上のデータ・センターを含むローカライズされた地理的な領域です。リージョンは他のリージョンから独立しており、巨大な距離は(複数の国または大陸にわたって)分離できます。
- コンパートメント
コンパートメントは、Oracle Cloud Infrastructureテナンシ内のクロスリージョン論理パーティションです。コンパートメントを使用して、Oracle Cloudのリソースを編成、リソースへのアクセスを制御および使用割当てを設定します。特定のコンパートメント内のリソースへのアクセスを制御するには、誰がリソースにアクセスできるか、どのアクションを実行できるかを指定するポリシーを定義します。
- 可用性ドメイン
可用性ドメインは、リージョン内の独立したスタンドアロン・データ・センターです。各アベイラビリティ・ドメインの物理リソースは、他のアベイラビリティ・ドメインのリソースから分離されるため、フォルト・トレランスが提供されます。可用性ドメインは、電源や冷却、内部の可用性ドメイン・ネットワークなどのインフラストラクチャを共有しません。そのため、1つの可用性ドメインでの障害が、リージョン内の他の可用性ドメインに影響しない可能性があります。
- フォルト・ドメイン
フォルト・ドメインは、可用性ドメイン内のハードウェアおよびインフラストラクチャのグループです。各アベイラビリティ・ドメインに3つのフォルト・ドメイン(独立した電源およびハードウェア)があります。複数のフォルト・ドメインにリソースを分散する場合、アプリケーションは、フォルト・ドメイン内の物理サーバー障害、システム・メンテナンスおよび電源障害に耐えることができます。
- 仮想クラウド・ネットワーク(VCN)およびサブネット
VCNは、Oracle Cloud Infrastructureリージョンで設定する、カスタマイズ可能なソフトウェア定義のネットワークです。従来のデータ・センター・ネットワークと同様に、VCNを使用してネットワーク環境を完全に制御できます。VCNには、VCNの作成後に変更できる重複しない複数のCIDRブロックを含めることができます。VCNをサブネットにセグメント化して、そのスコープをリージョンまたは可用性ドメインに設定できます。各サブネットは、VCNの他のサブネットと重複しない連続した範囲のアドレスで構成されます。サブネットのサイズは、作成後に変更できます。パブリックまたはプライベートにできます。
- ロード・バランサ
Oracle Cloud Infrastructure Load Balancingサービスは、単一のエントリ・ポイントからバック・エンドの複数のサーバーへの自動トラフィック分散を提供します。
ロード・バランサは、様々なアプリケーションへのアクセスを提供します。
- セキュリティ・リスト
サブネットごとに、サブネットの内外で許可される必要があるトラフィックのソース、宛先およびタイプを指定するセキュリティ・ルールを作成できます。
- NATゲートウェイ
NATゲートウェイを使用すると、VCN内のプライベート・リソースは、着信インターネット接続にそれらのリソースを公開せずに、インターネット上のホストにアクセスできます。
- サービス・ゲートウェイ
サービス・ゲートウェイは、VCNからOracle Cloud Infrastructure Object Storageなどの他のサービスへのアクセスを提供します。The traffic from the VCN to the Oracle service travels over the Oracle network fabric and never traverses the internet.
- MySQL Databaseサービス
Oracle MySQL Database Serviceは、開発者がセキュアなクラウド・ネイティブ・アプリケーションを迅速に開発およびデプロイできる、完全に管理されたOracle Cloud Infrastructure (OCI)データベース・サービスです。Oracle MySQL Database Serviceは、OCIおよびMySQLエンジニアリング・チームによって100%構築、管理、およびサポートされています。
Oracle MySQL Database Serviceには、高パフォーマンスな分析エンジン(HeatWave)が統合されており、運用中のMySQLデータベースに対して高度なリアルタイム分析を直接実行できます。
- Bastionサービス
Oracle Cloud Infrastructure Bastionは、パブリック・エンドポイントがなく、ベア・メタルや仮想マシン、Oracle MySQL Database Service Autonomous Transaction Processing (ATP)、Oracle Container Engine for Kubernetes (OKE)、およびSecure Shell Protocol (SSH)アクセスを許可するその他のリソースなど、厳格なリソース・アクセス制御を必要とするリソースへの制限付きのセキュアなアクセスを提供します。Oracle Cloud Infrastructure Bastionサービスを使用すると、ジャンプ・ホストをデプロイおよびメンテナンスすることなく、プライベート・ホストへのアクセスを有効にできます。さらに、アイデンティティベースの権限と、一元化された監査および期限付きSSHセッションによって、セキュリティ体制が改善されます。Oracle Cloud Infrastructure Bastionを使用すると、要塞アクセス用のパブリックIPが不要になり、リモート・アクセスを提供する際の手間や潜在的な攻撃対象がなくなります。
推奨事項
OCI上のRailsにRubyをデプロイする際は、開始点として次の推奨事項を使用してください。実際の要件は異なる場合があります。
- セキュリティ
Oracle Cloud Guardを使用して、OCI内のリソースのセキュリティを事前にモニターおよびメンテナンスします。クラウド・ガードは、定義可能なディテクタ・レシピを使用して、セキュリティの弱点についてリソースを調べ、オペレータおよびユーザーにリスクのあるアクティビティを監視します。構成の誤りや安全でないアクティビティが検出されると、クラウド・ガードは修正アクションを推奨し、定義できるレスポンダ・レシピに基づいてそれらのアクションの実行を支援します。
最大限のセキュリティが必要なリソースの場合、Oracleではセキュリティ・ゾーンを使用することをお薦めします。セキュリティ・ゾーンは、ベスト・プラクティスに基づいたセキュリティ・ポリシーのOracle定義レシピに関連付けられたコンパートメントです。たとえば、セキュリティ・ゾーン内のリソースは、パブリック・インターネットからアクセスできず、顧客管理キーを使用して暗号化する必要があります。セキュリティ・ゾーンでリソースを作成して更新すると、OCIでは、セキュリティ・ゾーン・レシピのポリシーに対して操作が検証され、いずれかのポリシーに違反している操作が拒否されます。
動的コンテンツを公開したり、クライアントがAPIを通じてデータを送信できるようにアプリケーションが実装されている場合は、APIポリシーを使用してAPIとの対話を管理する方法が提供されるため、APIゲートウェイの採用をお薦めします。
- クラウド・ガード
Oracleによって提供されるデフォルト・レシピをクローニングおよびカスタマイズして、カスタム・ディテクタおよびレスポンダ・レシピを作成します。これらのレシピを使用すると、警告を生成するセキュリティ違反のタイプと、それらに対して実行できるアクションを指定できます。たとえば、可視性がパブリックに設定されているオブジェクト・ストレージ・バケットを検出できます。
クラウド・ガードをテナンシ・レベルで適用して、最も広い範囲をカバーし、複数の構成を保持する管理上の負担を軽減します。
また、管理対象リストを使用して、特定の構成をディテクタに適用することもできます。
- セキュリティ・ゾーン
Oracleによって提供されるデフォルト・レシピをクローニングおよびカスタマイズして、カスタム・ディテクタおよびレスポンダ・レシピを作成します。これらのレシピを使用すると、警告を生成するセキュリティ違反のタイプと、それらに対して実行できるアクションを指定できます。たとえば、可視性がパブリックに設定されているオブジェクト・ストレージ・バケットを検出できます。
クラウド・ガードをテナンシ・レベルで適用して、最も広い範囲をカバーし、複数の構成を保持する管理上の負担を軽減します。
また、管理対象リストを使用して、特定の構成をディテクタに適用することもできます。
- ネットワーク・セキュリティ・グループ(NSG)
NSGを使用して、特定のVNICに適用されるイングレスおよびエグレス・ルールのセットを定義できます。NSGではVCNのサブネット・アーキテクチャをアプリケーションのセキュリティ要件から分離できるため、セキュリティ・リストではなくNSGを使用することをお薦めします。
NSGを使用して、特定のVNICに適用されるイングレスおよびエグレス・ルールのセットを定義できます。NSGではVCNのサブネット・アーキテクチャをアプリケーションのセキュリティ要件から分離できるため、セキュリティ・リストではなくNSGを使用することをお薦めします。
- ロード・バランサの帯域幅
ロード・バランサの作成時に、固定帯域幅を提供する事前定義済のシェイプを選択するか、帯域幅範囲を設定するカスタム(フレキシブル)シェイプを指定して、トラフィック・パターンに基づいてサービスによって帯域幅が自動的にスケーリングされるようにできます。どちらの方法でも、ロード・バランサの作成後にいつでもシェイプを変更できます。
注意事項
- パフォーマンス
このRAを出発点として使用すると、VMノードの数と各ノードに選択された VMのタイプによってパフォーマンスが影響を受けます。Terraformでは、様々な仕様サーバーおよびノード数を使用するようにこれらの調整がサポートされています。
GraalVMを使用してRubyおよびRailsを実行することで、パフォーマンスをさらに向上できます。
- セキュリティ
基本構成では、アプリケーション認証および認可またはAPIサポートは考慮されません。ネットワーク・レベルでは、Rubyサービスが内部使用用か外部使用用かに関係なく、アクセスおよびルーティングを調整する必要があります。外部使用では、Web Application Firewallの使用を含めるように環境を拡張する必要があり、クラウド・ガードを検討する必要があります。
- 可用性
可用性は、ノードをより多くの可用性ゾーンに分散し、リージョン間で最もクリティカルな可用性レベルに潜在的に分散することで拡張できます。
可用性は、コンピュート・ノードが存在する要因であるだけでなく、正規のトラフィックのみがデプロイされたアプリケーションと対話できるようにセキュリティでもあります。これは、セキュリティの推奨事項を通じて対処できます。
- コスト
セキュリティは、サービス・リクエストに必要なコンピューティングの量を制限することで、コストの管理にも役立ちます。これは、WAFまたはAPI Gatewayで偶発的または悪意のあるトラフィックがサーバーに到達できないようにすることで、生成される潜在的なワークロードの量が削減されるという事実に由来します。