Linux と PostgreSQL インフラストラクチャをデプロイする

完了

このユニットでは、Azure 内でアプリケーションをホストするコンピューティング リソースを作成する方法について説明します。

Azure にインフラストラクチャをデプロイするには、Azure portal、Azure CLI、コードとしてのインフラストラクチャ テンプレート (Bicep や Terraform など) といった複数の方法があります。 このユニットでは、アプリケーションに必要なコンピューティング リソースがカプセル化されている事前構成済みの Bicep テンプレートをデプロイします。 主なリソースは次のとおりです。

  • Linux (Ubuntu 24.04 LTS) を実行している仮想マシン
  • Postgres 16 以降を実行している Azure Database for Postgres
  • VM からデータベースへのアクセスをセキュリティで保護できるようにするマネージド ID
  • RBAC。管理者としてデータベースにアクセスするためのロールと、アプリケーション自体に対するより制限の厳しいロールを含みます
  • VM とデータベースの両方に対応する仮想ネットワーク

この例は Dev/Test ワークロードであり、コスト効率とパフォーマンスの両方を維持したいので、次の構成があらかじめ選ばれています。

  • VM は、Standard D2s_v4 (2 つの vCPU、8 GB のメモリ) です。 1 秒あたりの I/O 操作数 (IOPS) が最大 3,200 でストレージが 128 GB の Azure Premium SSD を備えています。 OS ディスク用に 500 IOPS の P10 128 GB Premium SSD ディスクがアタッチされています。 必要に応じて、VM の IOPS に合わせて OS ディスクをアップグレードできます。

  • データベースは、最大 3,200 IOPS の General Purpose D2ds_v4 (2 仮想コア、8 GB の RAM) です。 500 IOPS の P10 128 GB Premium SSD ディスクを備えています。 必要に応じて、コンピューティングの IOPS に合わせてこのディスクをアップグレードできます。

モジュールを終えたら、コストを節約するためにこれらのリソースを削除します。 ただし、使っていないときは VM とデータベースをオフにしてコンピューティング コストを節約し、使用したストレージに対してのみ料金を支払うこともできます。 このワークロードは、必要に応じてスケールアップすることもできます。

このモジュールの Bicep テンプレートでは、Azure Verified Modules (AVM) を利用します。 AVM は、コードとしてのインフラストラクチャ モジュールを標準化するためのイニシアティブです。 これらのモジュールは Microsoft が保守しており、Azure にリソースをデプロイするための多くのベスト プラクティスがカプセル化されています。

Azure サブスクリプションと Azure CLI があることを確認する

Azure サブスクリプションをお持ちでない場合は、始める前に無料アカウントを作成してください。

このモジュールには、Azure CLI バージョン 2.0.30 以降が必要です。 次のコマンドを使って、バージョンを調べます。

az --version

インストールまたはアップグレードが必要な場合は、Azure CLI のインストールに関するページを参照してください。

Azure CLI を使用して Azure にサインインする

Azure CLI を使って Azure でコマンドを実行するには、先にサインインする必要があります。 az login コマンドを使ってサインインします。

az login

リソース グループの作成

リソース グループとは、関連リソース用のコンテナーです。 すべてのリソースをリソース グループに配置する必要があります。 リソース グループを作成するには、az group create コマンドを使います。

az group create \
    --name 240900-linux-postgres \
    --location westus2

Azure CLI を使用して Bicep テンプレートをデプロイする

Bicep は、宣言型の構文を使用して Azure リソースをデプロイするドメイン固有言語 (DSL) です。 Bicep ファイルに、Azure にデプロイしたいインフトラクチャを定義します。 その後、開発ライフサイクル全体を通してそのファイルを使い、インフラストラクチャを繰り返しデプロイします。 リソースは一貫した方法でデプロイされます。

このユニット用のコンピューティング リソースのデプロイに使っている Bicep ファイルは、deploy/vm-postgres.bicep GitHub リポジトリにあります。 これには、仮想マシン、仮想ネットワーク、マネージド ID、VM のネットワーク セキュリティ グループ (NSG) が含まれます。 Bicep について詳しくは、「Bicep とは」をご覧ください。

  1. 例のリポジトリをローカル コンピューターにクローンします。

    git clone https://github.com/Azure-Samples/linux-postgres-migration.git
    
  2. linux-postgres-migration ディレクトリに移動します。

    cd linux-postgres-migration
    
  3. Bicep テンプレートをデプロイします。

    az deployment group create \
        --resource-group 240900-linux-postgres \
        --template-file deploy/vm-postgres.bicep
    

デプロイが完了すると、リソースがデプロイされたことを確認する JSON が出力されます。

次のセクションでは、Azure portal を使って、デプロイされたインフラストラクチャで RBAC のロールとネットワーク セキュリティ規則を構成し、確認します。 Azure portal を使うと、ロールと規則を Bicep テンプレートにエンコードできます。 Azure portal には、リソースとリソースに割り当てられているアクセス許可の間の関係が理解しやすいビジュアル インターフェイスが用意されています。

Azure portal でリソース グループを開く

  1. Azure Portalを開きます。

  2. サービス メニューで、[リソース グループ] を選びます。

  3. [リソース グループ] ペインで、リソース グループ 240900-linux-postgres を選びます。

ペインの右上の部分にある [デプロイ] 領域に、Bicep テンプレートのデプロイの状態が表示されます。 デプロイが成功すると、[成功] と表示されます。

仮想マシンのネットワーク セキュリティ グループを表示する

  1. 仮想マシン vm-1 を選びます。

  2. [ネットワーク] セクションで、[ネットワークの設定] を選びます。

ネットワークの設定では、ネットワーク セキュリティ グループ (240900-linux-postgres-nsg) が仮想マシンと同じ仮想ネットワーク (240900-linux-postgres-vnet) のサブネットにアタッチされていることが示されます。

NSG はリソース グループ内にも表示されます。 これには、仮想マシンとの間を行き来するトラフィックを制御する一連のインバウンドとアウトバウンドのセキュリティ規則が含まれます。

リソース グループに戻る

ページの上部にある階層リンクを選んで、リソース グループ (Home > Resource groups > 240900-linux-postgres) に戻ります。

リソース グループに、ユーザー割り当てマネージド ID 240900-linux-postgres-identity が表示されていることに注意してください。

システム割り当てとユーザー割り当てのマネージド ID について詳しくは、「Azure リソース用マネージド ID とは」をご覧ください。

受信セキュリティ規則をネットワーク セキュリティ グループに追加する

現在の IP アドレスから仮想マシンへの SSH トラフィックを許可する受信セキュリティ規則を NSG に追加します。

運用シナリオでは、多くの場合、Just-In-Time アクセスAzure Bastion、または VPN (Azure やメッシュ VPN など) を使って、仮想マシンへのアクセスを制限します。

  1. [240900-linux-postgres-nsg] を選択します。

  2. [設定]>[受信セキュリティ規則] を選びます。

  3. [追加] を選択します。

  4. [ソース][自分の IP アドレス] を選びます。

  5. [サービス][SSH] を選びます。

  6. [追加] を選択します。

Azure Database for PostgreSQL フレキシブル サーバーの管理者を表示する

  1. Azure Database for PostgreSQL フレキシブル サーバーを見つけて選びます。 postgres-xxxxx という名前で、xxxxx は Bicep テンプレートで定義されている一意の文字列です。 この文字列は、サブスクリプションとリソース グループへのデプロイの間で変わりません。

  2. [セキュリティ]>[認証] を選びます。

このシナリオでは、[Microsoft Entra 認証のみ] を使っています。 240900-linux-postgres-identity の下の一覧に、ユーザー割り当てマネージド ID が表示されます。

現在、サーバーの管理者はマネージド ID 240900-linux-postgres-identity だけです。 必要に応じて、独自のユーザー アカウントを管理者として追加できます。 ただし、このシナリオでは、既に設定されているマネージド ID を使います。

次のセクションでは、この仮想マシンの ID を使い、Azure CLI 経由でサーバーを管理します。 また、アプリケーションにサーバーへのアクセスを提供するためにも、その ID を使います。

運用シナリオでは、一般に、マネージド ID、Microsoft Entra ID、きめ細かい RBAC の組み合わせを使って、アプリケーション ワークロードが安全に Azure のデータにアクセスし、リソースを管理できるようにします。 最小限の特権の原則に従います。

このようなシナリオについて詳しくは、「Azure Database for PostgreSQL - フレキシブル サーバーでの Microsoft Entra 認証」と「Azure Database for PostgreSQL - フレキシブル サーバーでの認証に Microsoft Entra ID を使用する」をご覧ください。

Azure Database for PostgreSQL フレキシブル サーバーのファイアウォール規則を確認する

[設定]>[ネットワーク] の順に選択します。

仮想マシンではなくローカル コンピューターからサーバーを管理している場合は、IP アドレスをファイアウォール規則に追加する必要があります。

[現在のクライアント IP アドレスを追加する (xxx.xxx.xxx.xxx)]>[保存] を選んで、現在の IP アドレスのファイアウォール規則を作成できます。 この規則により、ローカル コンピューター上のツールを使って Dev/Test サーバーにアクセスできるようになります。 ただし、仮想マシンを使ってデータベースにアクセスしているので、今のところはファイアウォール規則を作成しません。

運用環境では、[パブリック IP アドレスを使用したインターネット経由でのこのリソースへのパブリック アクセスを許可する] オプションをオフにして、このサーバーをパブリック インターネットから完全に分離できます。

仮想マシンとは異なり、Azure Database for PostgreSQL と仮想ネットワークは関連付けていません。 パブリック インターネット経由で Azure Database for PostgreSQL にアクセスするオプションが維持されており、これは Dev/Test シナリオに役立ちます。

セキュリティと柔軟性の両方を実現するため、プライベート エンドポイントを使って仮想ネットワーク経由で仮想マシンからアクセスできるようにします。 プライベート エンドポイントを使うと、データベースをパブリック インターネットに公開しなくても仮想マシンからアクセスできます。 プライベート エンドポイントの詳細については、「Azure Database for PostgreSQL - フレキシブル サーバーと Private Link とのネットワーク」を参照してください。

ここでは、Bicep を使用してプライベート エンドポイントが作成されています。

仮想マシンのシステム割り当てマネージド ID に対するロールの割り当てを確認する

  1. 240900-linux-postgres リソース グループに戻って、vm-1 を選びます。

  2. サービス メニューで、[セキュリティ]>[ID] を選びます。

    ここでは、システム割り当てマネージド ID が仮想マシンにアタッチされていることを確認できます。

  3. [システム割り当て] で、[Azure ロールの割り当て] を選択します。

    ここでは、閲覧者ロールがシステム割り当てマネージド ID に割り当てられていることを確認できます。 ロールのスコープは 240900-linux-postgres リソース グループに設定されています。

この ID のアクセス許可により、ユーザーは VM 内で Azure CLI を使って、リソース グループのリソースの一覧を見ることができます。 この機能を使うと、特定のリソースの詳細をスクリプトにハードコーディングする必要がありません。

後のステージでは、VM のマネージド ID に追加のロールを割り当てて、VM が Azure Blob Storage アカウントに直接アクセスできるようにします。

次に、デプロイされたインフラストラクチャを調べて構成します。

リソース