Linux と PostgreSQL のワークロードを移行する

完了

このモジュールでは、オンプレミスまたはクラウド環境から Azure への既存のワークロードの移行について説明します。 ここでは、コンピューティングを Azure 仮想マシン (VM) に、データを Azure Database for PostgreSQL に移行する方法を説明します。 このアプリケーションはクラウドに依存しないサンプルであり、クラウドへの移行を想定した現実のアプリケーションの代替として使用します。

このユニットでは、Azure が提供する完全な一連のセキュリティと ID 制御の利点を利用して、次の移行を行う価値について説明します:

  • セルフホステッド環境 (セルフマネージド データベースなど) からフル マネージド データベース オファリングへの移行
  • ベアメタル コンピューティングからクラウドホスト型 VM への移行

また、リソースをクラウドで管理する利点について、コストとパフォーマンスの観点からも見ていきます。 デプロイ前とデプロイ後のコストを正確に計算して管理する方法や、およびコンピューティングとデータの両方の観点からパフォーマンスを最適化する方法を学びます。

ワークロードとデータ

このワークロードは、Go で記述され、PostgreSQL 内のデータと連携するアプリケーションです。 データは、Postgres プラットフォームと関連する拡張機能の機能を引き出すことができる、オープン データセットです。

このアプリケーションはコンテナー内で簡単に実行できますが、利害関係者は現段階ではこれを行わないことを選択しました。 コンテナーのビルド、コンテナー プラットフォームへのデプロイ、またはコンテナー オーケストレーションの使用は、現在スコープ外です。 ただし、コンテナーへの移行は、論理的な将来の手順である可能性があります。

このモジュールに関連付けられている GitHub リポジトリには、アプリケーションと関連データが用意されています。 ここでは、このサンプル アプリケーションと同じような状態になるようにアプリケーションを準備してデータをエクスポートする方法について説明します。 また、サンプル アプリケーションをグリーンフィールド デプロイのテンプレートとして使用することもできます。

このワークロードを移行する価値とは?

このワークロードをクラウドに移行するメリットについて疑問に思うかもしれません。 価値提案の一部を次に示します。

セキュリティとコンプライアンス

コンピューティングとデータのワークロードをクラウドに移行すると、セキュリティ機能が強化されるというメリットが得られます。

Azure の仮想マシンでは、ファイアウォール、仮想ネットワーク、仮想マシンのジャストインタイム アクセス、暗号化、ロールベースのアクセス制御 (RBAC)、機密コンピューティングなど、多種多様なセキュリティとコンプライアンスの機能の恩恵を受けることができます。 Azure Database for PostgreSQL は、カスタマーマネージド キーによる暗号化コンプライアンス認定Microsoft Defender for Cloud のサポートなど、多くの同様の機能をサポートしています。

仮想マシンとデータベース間の接続のセキュリティ

Azure Database for PostgreSQL と仮想マシンを統合するときは、データ損失のリスクを軽減する安全な方法で相互に接続できることが重要です。

Microsoft Entra 認証 を使用すると、従来のパスワードなしで Azure Database for PostgreSQL に接続できます。 代わりに、Microsoft Entra ユーザー アカウントを使用して、アプリケーション ワークロード (つまり、マネージド ID)、ユーザー、および管理者に Microsoft Entra ID を使用します。 このアプローチにより、長期にわたって使用される認証情報が漏洩し、悪意のある人物がデータにアクセスするリスクを軽減することができます。

Microsoft Entra ID、マネージド ID、きめ細かな RBAC により、最小特権の原則に従って、アプリケーション ワークロードから安全に Azure のデータにアクセスし、リソースを管理できるようになります。

複数のリージョンにまたがるハイパフォーマンスでコスト効率に優れたコンピューティングへのアクセス

テスト開発用のコスト効率に優れたコンピューティングから、今日のクラウドで利用可能な最新、最高性能、または最大の種類のコンピューティングまで、Azure には仮想マシンAzure Database for PostgreSQL それぞれに対応する幅広いコンピューティング オプションが用意されています。 これらは必要に応じてスケールアップおよびスケールダウンが可能で、Azure の 60 を超えるリージョンで利用できます。

データベース レプリカ や Azure Cosmos DB for PostgreSQL などの分散オプション を使用するなど、垂直方向と水平方向の両方でコンピューティングをスケーリングできます。 Azure Cosmos DB for PostgreSQL は、Citus オープンソースの強力な分散テーブルによって拡張された PostgreSQL 用の管理サービスです。 このコンピューティングと最速のクラウド ストレージ オプションを組み合わせることで、コンピューティングとストレージの I/O 要件をワークロードに合わせて調整できます。

コスト管理とコスト効率

Linux と PostgreSQL の両方の側から、コスト管理とコスト効率を最適化することができます。 オンプレミスのソリューションと比較すると、コストは多くの場合、お客様の状況に合わせ、より適切に調整することができます。 オンプレミスのソリューションと比べて、コンピューティングのサイズをより適切に設定することができます。 また、フリート全体を簡単に管理して、必要なコンピューティングとストレージのみを利用するように最適化し、ユーティリティ課金モデルで使用した分だけ支払うこともできます。

ユーティリティ課金を使用すると、顧客はオーバープロビジョニングのコストを支払わなくても、需要の高い期間を処理できます。 これにより、利用可能になると、より高速で効率的なコンピューティング世代に移行できます。

お客様は、Azure ハイブリッド特典を利用して、特定の Linux ディストリビューションのライセンス コストを節約することもできます。 詳細については、「Red Hat Enterprise Linux (RHEL) と SUSE Linux Enterprise Server (SLES) 仮想マシンの Azure ハイブリッド特典」を参照してください。

さらに、仮想マシン (VM) と Azure Reserved Virtual Machine Instances については、1 年または 3 年の期間を指定することで、従量課金制と比較して最大 72% のコスト削減が可能です。 詳細については、「Azure の予約割引が仮想マシンに適用されるしくみ」を参照してください。 Azure の価格設定は透明で予測可能であり、導入前に Azure 料金計算ツールを使用してコストを見積もることができます。

運用段階のオペレーション

デプロイされたアプリケーション (トリアージ、監視、セキュリティ修正プログラムの適用、バックアップ、ディザスター リカバリーなど) の運用段階のオペレーションが自動化され、ダウンタイムがゼロになる可能性のあるアップグレード機能によって、より効率的になります。 さらに、業界標準のツールチェーンを使用して、インフラストラクチャをエンドツーエンドで管理できます。

開始する前に

このモジュールは、Linux および PostgreSQL の既存のワークロードを Azure に移行する際に役立つよう設計されています。 ただし、ソース データベースからデータをエクスポートする方法や、移行用にアプリケーションを準備する方法については焦点を当てていません。 このアプローチの理由は、ソース データベースや移行できるアプリケーションにはさまざまな種類があり、そのプロセスもそれぞれ異なるためです。

このモジュールで提供しているのは、サンプル アプリケーション、Postgres データ、バイナリ ファイル、移行プロセスをシミュレートするためのコードとしてのインフラストラクチャです。 この移行シミュレーションを完了すれば、得られた知識を使用して、同じ原則をご自身のワークロードに適用することができます。

移行するアプリケーション コードの代替として、こちらで用意したサンプル アプリケーション Azure-Samples/tailwind-traders-go を使用します。 コードとしての Bicep インフラストラクチャ、サンプル Postgres とバイナリ データ、およびこのモジュールのハンズオン部分に役立つその他のリソースは、Azure-Samples/linux-postgres-migration GitHub リポジトリで入手できます。

このアプローチを独自のワークロードに適用するには、実際のソース アプリケーションとデータを次の構造にマップする必要があります。

アプリケーション コード

アプリケーション コードはソース管理、できれば GitHub のリポジトリに格納する必要があります。

このモジュールの移行では、リポジトリを Azure 仮想マシンに直接複製する最も簡単なシナリオを示します。 実際のシナリオでは、アプリケーション コードをビルドしてコンピューティング リソースにデプロイする、GitHub Actions などのより複雑なデプロイ パイプラインが含まれる可能性があります。

Postgres データ

Postgres データは、データベース スキーマの作成とデータの挿入に使用できる .sql ファイルに格納する必要があります。 このシミュレートされた移行では、tailwind.sqlリポジトリ内のサンプル データ ファイル Azure-Samples/linux-postgres-migration を使用します。 ファイルを Azure Blob Storage にコピーし、Azure Database for PostgreSQL にインポートします。

独自のデータを移行する場合は、ソース データベースからデータをエクスポートして .sql ファイルに保存します。 次に、このモジュールで説明されているように、ファイルを Blob Storage にコピーします。

バイナリ ファイル

ほとんどのアプリケーションには、移行が必要なメディア ファイルなど、他のバイナリ ファイルがあります。 サンプル アプリケーションでは、イメージを Azure-Samples/linux-postgres-migration から Blob Storage にコピーして移行する方法について説明します。

同様に、独自のワークロードを移行するときは、バイナリ ファイルを Blob Storage にコピーする必要があります。 今回の場合、コンピューティングは ステートレス であり、アプリケーションには Blob Storage 内のバイナリ データに直接アクセスするアクセス許可があります。

コードとしてのインフラストラクチャ (Bicep)

このモジュールのコードとしてのインフラストラクチャも Azure-Samples/linux-postgres-migrationに格納されます。 ソース データとアプリケーションを前述の構造に適合させることができれば、最小限の変更でそのまま使用できるリファレンス アーキテクチャとして使用できるよう設計されています。

セキュリティはこの移行の主要なテーマですが、このモジュールのハンズオン部分を簡単に完了できるように、特定のセキュリティ設定を選択しています。 たとえば、Blob Storage はより安全でキーレスの認証方法を使用しますが、ここでは任意の IP アドレスからのネットワーク接続を許可しています。 運用環境では、ストレージ アカウントへのアクセスが必要な IP アドレスのみにネットワーク アクセスをロックする必要があります。

同様に、特定の IP アドレスを許可するファイアウォール規則を PostgreSQL サーバーに追加するオプションはそのままにします。 運用環境では、サーバーへのパブリック アクセスをすべて完全に無効にすることができます。

ソース環境と Azure の違い

他の環境から Azure に移行する大きな違いの 1 つは、ここでは Azure が提供するセキュリティと ID 制御をフルに活用していることです:

  • 仮想マシンと Azure Database for PostgreSQL にはマネージド ID を使用します。
  • データベースへの認証には Microsoft Entra ID を使用します。
  • 仮想マシンにアクセスするには、Secure Shell (SSH) キーではなく Microsoft Entra ID を使用します。

リフトアンドシフトの移行を行うのではなく、Azure が提供するセキュリティとコンプライアンス機能をフルに活用するために、この機会を最大限に活用して、アプリケーションの近代化を図っています。

オンプレミスでは、ユーザー名とパスワードを使用してデータベースに対する認証を行う場合があります。 Azure では、仮想マシンのマネージド ID を使用してデータベースを認証する方法を紹介しています。 この認証方法はより安全で、有効期間の長い資格情報が侵害されるリスクを軽減します。

認証にマネージド ID を使用するには、多くの場合、アプリケーションでコードを変更する必要があります。 このモジュールでは、Go の azidentity ライブラリを使用してマネージド ID のトークンを取得する方法を示します。 Microsoft SDK 全体で同じライブラリを使用できます。

Azure アカウントを作成して Azure CLI をインストールする

Azure アカウントをお持ちでない場合は、今すぐ無料のアカウントを作成することができます。 有料の Azure サービスを試すために使用できるクレジットが得られます。 クレジットを使用した後でも、アカウントを保持して無料の Azure サービスを使用することができます。

次のユニットでコマンドを実行するには、Bash シェルにアクセスする必要があります。 このシェルは、次のいずれかの領域に含めることができます:

  • ローカル コンピューター。 たとえば、macOS、Linux、Linux 用 Windows サブシステム (WSL)、または Docker を使用します。
  • 仮想マシン上。 たとえば、Multipass または Azure を使用します。
  • クラウド内。 たとえば、Azure Cloud Shell、または GitHub Codespaces を使用します。

このモジュールを完了するには、Azure CLI が必要です。 Azure CLI のインストールに関する記事の指示に従って、ローカル マシンに Azure CLI をインストールできます。 Git もインストールする必要があります。

リソース