2.12. 複数のアベイラビリティーゾーンへの AWS Aurora のデプロイ


シングルクラスターデプロイメントの構成要素であるデータベースとして AWS Aurora をデプロイします。

このトピックでは、特定の AWS リージョンにおける 1 つ以上のアベイラビリティーゾーンの障害に対応するために、複数のアベイラビリティーゾーンに PostgreSQL インスタンスの Aurora リージョンデプロイメントをデプロイする方法を説明します。

このデプロイメントは、シングルクラスターデプロイメントの概念 の章で説明されているセットアップで使用することを想定としています。このデプロイメントは、シングルクラスターデプロイメントの構成要素 の章で説明されている他の構成要素とともに使用してください。

注記

以下のブループリントは、機能的に完全な最小限の例を示すためのものであり、通常のインストールに適したベースラインのパフォーマンスを実現します。ただし、お使いの環境、組織の標準、セキュリティーのベストプラクティスに合わせて変更する必要があります。

2.12.1. アーキテクチャー

Aurora データベースクラスターは、複数の Aurora データベースインスタンスで構成されます。1 つのインスタンスがプライマリーライターとして指定され、他のすべてのインスタンスがバックアップリーダーとして指定されます。アベイラビリティーゾーンに障害が発生した場合に高可用性を確保するために、Aurora では、シングル AWS リージョン内の複数のゾーンにデータベースインスタンスをデプロイできます。プライマリーデータベースインスタンスをホストしているアベイラビリティーゾーンで障害が発生した場合、Aurora は自動的に自己修復し、障害が発生していないアベイラビリティーゾーンのリーダーインスタンスを新しいライターインスタンスにプロモートします。

図2.1 Aurora の複数アベイラビリティーゾーンのデプロイメント

Aurora データベースが提供するセマンティクスの詳細は、AWS Aurora のドキュメント を参照してください。

このドキュメントは AWS のベストプラクティスに従い、インターネットに公開されないプライベート Aurora データベースを作成します。ROSA クラスターからデータベースにアクセスするには、データベースと ROSA クラスターの間にピアリング接続を確立 します。

2.12.2. 手順

次の手順には 2 つのセクションがあります。

  • eu-west-1 に "keycloak-aurora" という名前の Aurora Multi-AZ データベースクラスターを作成します。
  • ROSA クラスターと Aurora VPC の間にピアリング接続を作成し、ROSA クラスターにデプロイされたアプリケーションがデータベースとの接続を確立できるようにします。

2.12.2.1. Aurora データベースクラスターの作成

  1. Aurora クラスターの VPC を作成します。

    コマンド:

    aws ec2 create-vpc \
      --cidr-block 192.168.0.0/16 \
      --tag-specifications "ResourceType=vpc, Tags=[{Key=AuroraCluster,Value=keycloak-aurora}]" \
    1
    
      --region eu-west-1
    Copy to Clipboard Toggle word wrap

    1
    VPC を簡単に取得できるように、Aurora クラスターの名前を含むオプションのタグを追加します。

    出力:

    {
        "Vpc": {
            "CidrBlock": "192.168.0.0/16",
            "DhcpOptionsId": "dopt-0bae7798158bc344f",
            "State": "pending",
            "VpcId": "vpc-0b40bd7c59dbe4277",
            "OwnerId": "606671647913",
            "InstanceTenancy": "default",
            "Ipv6CidrBlockAssociationSet": [],
            "CidrBlockAssociationSet": [
                {
                    "AssociationId": "vpc-cidr-assoc-09a02a83059ba5ab6",
                    "CidrBlock": "192.168.0.0/16",
                    "CidrBlockState": {
                        "State": "associated"
                    }
                }
            ],
            "IsDefault": false
        }
    }
    Copy to Clipboard Toggle word wrap

  2. 新しく作成した VPC の VpcId を使用して、Aurora をデプロイする各アベイラビリティーゾーンのサブネットを作成します。

    注記

    各アベイラビリティーゾーンに指定した cidr ブロック範囲が重複しないようにしてください。

    1. ゾーン A

      コマンド:

      aws ec2 create-subnet \
        --availability-zone "eu-west-1a" \
        --vpc-id vpc-0b40bd7c59dbe4277 \
        --cidr-block 192.168.0.0/19 \
        --region eu-west-1
      Copy to Clipboard Toggle word wrap

      出力:

      {
          "Subnet": {
              "AvailabilityZone": "eu-west-1a",
              "AvailabilityZoneId": "euw1-az3",
              "AvailableIpAddressCount": 8187,
              "CidrBlock": "192.168.0.0/19",
              "DefaultForAz": false,
              "MapPublicIpOnLaunch": false,
              "State": "available",
              "SubnetId": "subnet-0d491a1a798aa878d",
              "VpcId": "vpc-0b40bd7c59dbe4277",
              "OwnerId": "606671647913",
              "AssignIpv6AddressOnCreation": false,
              "Ipv6CidrBlockAssociationSet": [],
              "SubnetArn": "arn:aws:ec2:eu-west-1:606671647913:subnet/subnet-0d491a1a798aa878d",
              "EnableDns64": false,
              "Ipv6Native": false,
              "PrivateDnsNameOptionsOnLaunch": {
                  "HostnameType": "ip-name",
                  "EnableResourceNameDnsARecord": false,
                  "EnableResourceNameDnsAAAARecord": false
              }
          }
      }
      Copy to Clipboard Toggle word wrap

    2. ゾーン B

      コマンド:

      aws ec2 create-subnet \
        --availability-zone "eu-west-1b" \
        --vpc-id vpc-0b40bd7c59dbe4277 \
        --cidr-block 192.168.32.0/19 \
        --region eu-west-1
      Copy to Clipboard Toggle word wrap

      出力:

      {
          "Subnet": {
              "AvailabilityZone": "eu-west-1b",
              "AvailabilityZoneId": "euw1-az1",
              "AvailableIpAddressCount": 8187,
              "CidrBlock": "192.168.32.0/19",
              "DefaultForAz": false,
              "MapPublicIpOnLaunch": false,
              "State": "available",
              "SubnetId": "subnet-057181b1e3728530e",
              "VpcId": "vpc-0b40bd7c59dbe4277",
              "OwnerId": "606671647913",
              "AssignIpv6AddressOnCreation": false,
              "Ipv6CidrBlockAssociationSet": [],
              "SubnetArn": "arn:aws:ec2:eu-west-1:606671647913:subnet/subnet-057181b1e3728530e",
              "EnableDns64": false,
              "Ipv6Native": false,
              "PrivateDnsNameOptionsOnLaunch": {
                  "HostnameType": "ip-name",
                  "EnableResourceNameDnsARecord": false,
                  "EnableResourceNameDnsAAAARecord": false
              }
          }
      }
      Copy to Clipboard Toggle word wrap

  3. Aurora VPC ルートテーブルの ID を取得します。

    コマンド:

    aws ec2 describe-route-tables \
      --filters Name=vpc-id,Values=vpc-0b40bd7c59dbe4277 \
      --region eu-west-1
    Copy to Clipboard Toggle word wrap

    出力:

    {
        "RouteTables": [
            {
                "Associations": [
                    {
                        "Main": true,
                        "RouteTableAssociationId": "rtbassoc-02dfa06f4c7b4f99a",
                        "RouteTableId": "rtb-04a644ad3cd7de351",
                        "AssociationState": {
                            "State": "associated"
                        }
                    }
                ],
                "PropagatingVgws": [],
                "RouteTableId": "rtb-04a644ad3cd7de351",
                "Routes": [
                    {
                        "DestinationCidrBlock": "192.168.0.0/16",
                        "GatewayId": "local",
                        "Origin": "CreateRouteTable",
                        "State": "active"
                    }
                ],
                "Tags": [],
                "VpcId": "vpc-0b40bd7c59dbe4277",
                "OwnerId": "606671647913"
            }
        ]
    }
    Copy to Clipboard Toggle word wrap

  4. Aurora VPC ルートテーブルを各アベイラビリティーゾーンのサブネットに関連付けます。

    1. ゾーン A

      コマンド:

      aws ec2 associate-route-table \
        --route-table-id rtb-04a644ad3cd7de351 \
        --subnet-id subnet-0d491a1a798aa878d \
        --region eu-west-1
      Copy to Clipboard Toggle word wrap

    2. ゾーン B

      コマンド:

      aws ec2 associate-route-table \
        --route-table-id rtb-04a644ad3cd7de351 \
        --subnet-id subnet-057181b1e3728530e \
        --region eu-west-1
      Copy to Clipboard Toggle word wrap

  5. Aurora サブネットグループを作成します。

    コマンド:

    aws rds create-db-subnet-group \
      --db-subnet-group-name keycloak-aurora-subnet-group \
      --db-subnet-group-description "Aurora DB Subnet Group" \
      --subnet-ids subnet-0d491a1a798aa878d subnet-057181b1e3728530e \
      --region eu-west-1
    Copy to Clipboard Toggle word wrap

  6. Aurora セキュリティーグループを作成します。

    コマンド:

    aws ec2 create-security-group \
      --group-name keycloak-aurora-security-group \
      --description "Aurora DB Security Group" \
      --vpc-id vpc-0b40bd7c59dbe4277 \
      --region eu-west-1
    Copy to Clipboard Toggle word wrap

    出力:

    {
        "GroupId": "sg-0d746cc8ad8d2e63b"
    }
    Copy to Clipboard Toggle word wrap

  7. Aurora DB クラスターを作成します。

    コマンド:

    aws rds create-db-cluster \
        --db-cluster-identifier keycloak-aurora \
        --database-name keycloak \
        --engine aurora-postgresql \
        --engine-version ${properties["aurora-postgresql.version"]} \
        --master-username keycloak \
        --master-user-password secret99 \
        --vpc-security-group-ids sg-0d746cc8ad8d2e63b \
        --db-subnet-group-name keycloak-aurora-subnet-group \
        --region eu-west-1
    Copy to Clipboard Toggle word wrap

    注記

    --master-username--master-user-password の値は置き換える必要があります。ここで指定した値は、Red Hat build of Keycloak データベース認証情報を設定するときに使用する必要があります。

    出力:

    {
        "DBCluster": {
            "AllocatedStorage": 1,
            "AvailabilityZones": [
                "eu-west-1b",
                "eu-west-1c",
                "eu-west-1a"
            ],
            "BackupRetentionPeriod": 1,
            "DatabaseName": "keycloak",
            "DBClusterIdentifier": "keycloak-aurora",
            "DBClusterParameterGroup": "default.aurora-postgresql15",
            "DBSubnetGroup": "keycloak-aurora-subnet-group",
            "Status": "creating",
            "Endpoint": "keycloak-aurora.cluster-clhthfqe0h8p.eu-west-1.rds.amazonaws.com",
            "ReaderEndpoint": "keycloak-aurora.cluster-ro-clhthfqe0h8p.eu-west-1.rds.amazonaws.com",
            "MultiAZ": false,
            "Engine": "aurora-postgresql",
            "EngineVersion": "15.5",
            "Port": 5432,
            "MasterUsername": "keycloak",
            "PreferredBackupWindow": "02:21-02:51",
            "PreferredMaintenanceWindow": "fri:03:34-fri:04:04",
            "ReadReplicaIdentifiers": [],
            "DBClusterMembers": [],
            "VpcSecurityGroups": [
                {
                    "VpcSecurityGroupId": "sg-0d746cc8ad8d2e63b",
                    "Status": "active"
                }
            ],
            "HostedZoneId": "Z29XKXDKYMONMX",
            "StorageEncrypted": false,
            "DbClusterResourceId": "cluster-IBWXUWQYM3MS5BH557ZJ6ZQU4I",
            "DBClusterArn": "arn:aws:rds:eu-west-1:606671647913:cluster:keycloak-aurora",
            "AssociatedRoles": [],
            "IAMDatabaseAuthenticationEnabled": false,
            "ClusterCreateTime": "2023-11-01T10:40:45.964000+00:00",
            "EngineMode": "provisioned",
            "DeletionProtection": false,
            "HttpEndpointEnabled": false,
            "CopyTagsToSnapshot": false,
            "CrossAccountClone": false,
            "DomainMemberships": [],
            "TagList": [],
            "AutoMinorVersionUpgrade": true,
            "NetworkType": "IPV4"
        }
    }
    Copy to Clipboard Toggle word wrap

  8. Aurora DB インスタンスを作成します。

    1. ゾーン A ライターインスタンスを作成します。

      コマンド:

        aws rds create-db-instance \
          --no-auto-minor-version-upgrade \
          --db-cluster-identifier keycloak-aurora \
          --db-instance-identifier "keycloak-aurora-instance-1" \
          --db-instance-class db.t4g.large \
          --engine aurora-postgresql \
          --region eu-west-1
      Copy to Clipboard Toggle word wrap

    2. ゾーン B リーダーインスタンスを作成します。

      コマンド:

        aws rds create-db-instance \
          --no-auto-minor-version-upgrade \
          --db-cluster-identifier keycloak-aurora \
          --db-instance-identifier "keycloak-aurora-instance-2" \
          --db-instance-class db.t4g.large \
          --engine aurora-postgresql \
          --region eu-west-1
      Copy to Clipboard Toggle word wrap

  9. すべてのライターインスタンスとリーダーインスタンスの準備が完了するまで待ちます。

    コマンド:

    aws rds wait db-instance-available --db-instance-identifier keycloak-aurora-instance-1 --region eu-west-1
    aws rds wait db-instance-available --db-instance-identifier keycloak-aurora-instance-2 --region eu-west-1
    Copy to Clipboard Toggle word wrap

  10. Keycloak で使用するライターエンドポイント URL を取得します。

    コマンド:

    aws rds describe-db-clusters \
      --db-cluster-identifier keycloak-aurora \
      --query 'DBClusters[*].Endpoint' \
      --region eu-west-1 \
      --output text
    Copy to Clipboard Toggle word wrap

    出力:

    [
        "keycloak-aurora.cluster-clhthfqe0h8p.eu-west-1.rds.amazonaws.com"
    ]
    Copy to Clipboard Toggle word wrap

2.12.2.2. ROSA クラスターとのピアリング接続の確立

  1. Aurora VPC を取得します。

    コマンド:

    aws ec2 describe-vpcs \
      --filters "Name=tag:AuroraCluster,Values=keycloak-aurora" \
      --query 'Vpcs[*].VpcId' \
      --region eu-west-1 \
      --output text
    Copy to Clipboard Toggle word wrap

    出力:

    vpc-0b40bd7c59dbe4277
    Copy to Clipboard Toggle word wrap

  2. ROSA クラスター VPC を取得します。

    1. oc を使用して ROSA クラスターにログインします。
    2. ROSA VPC を取得します。

      コマンド:

      NODE=$(oc get nodes --selector=node-role.kubernetes.io/worker -o jsonpath='{.items[0].metadata.name}')
      aws ec2 describe-instances \
        --filters "Name=private-dns-name,Values=${NODE}" \
        --query 'Reservations[0].Instances[0].VpcId' \
        --region eu-west-1 \
        --output text
      Copy to Clipboard Toggle word wrap

      出力:

      vpc-0b721449398429559
      Copy to Clipboard Toggle word wrap

  3. ピアリング接続を作成します。

    コマンド:

    aws ec2 create-vpc-peering-connection \
      --vpc-id vpc-0b721449398429559 \
    1
    
      --peer-vpc-id vpc-0b40bd7c59dbe4277 \
    2
    
      --peer-region eu-west-1 \
      --region eu-west-1
    Copy to Clipboard Toggle word wrap

    1
    ROSA クラスター VPC
    2
    Aurora VPC

    出力:

    {
        "VpcPeeringConnection": {
            "AccepterVpcInfo": {
                "OwnerId": "606671647913",
                "VpcId": "vpc-0b40bd7c59dbe4277",
                "Region": "eu-west-1"
            },
            "ExpirationTime": "2023-11-08T13:26:30+00:00",
            "RequesterVpcInfo": {
                "CidrBlock": "10.0.17.0/24",
                "CidrBlockSet": [
                    {
                        "CidrBlock": "10.0.17.0/24"
                    }
                ],
                "OwnerId": "606671647913",
                "PeeringOptions": {
                    "AllowDnsResolutionFromRemoteVpc": false,
                    "AllowEgressFromLocalClassicLinkToRemoteVpc": false,
                    "AllowEgressFromLocalVpcToRemoteClassicLink": false
                },
                "VpcId": "vpc-0b721449398429559",
                "Region": "eu-west-1"
            },
            "Status": {
                "Code": "initiating-request",
                "Message": "Initiating Request to 606671647913"
            },
            "Tags": [],
            "VpcPeeringConnectionId": "pcx-0cb23d66dea3dca9f"
        }
    }
    Copy to Clipboard Toggle word wrap

  4. ピアリング接続の存在が確認されるまで待機します。

    コマンド:

    aws ec2 wait vpc-peering-connection-exists --vpc-peering-connection-ids pcx-0cb23d66dea3dca9f
    Copy to Clipboard Toggle word wrap

  5. ピアリング接続を承認します。

    コマンド:

    aws ec2 accept-vpc-peering-connection \
      --vpc-peering-connection-id pcx-0cb23d66dea3dca9f \
      --region eu-west-1
    Copy to Clipboard Toggle word wrap

    出力:

    {
        "VpcPeeringConnection": {
            "AccepterVpcInfo": {
                "CidrBlock": "192.168.0.0/16",
                "CidrBlockSet": [
                    {
                        "CidrBlock": "192.168.0.0/16"
                    }
                ],
                "OwnerId": "606671647913",
                "PeeringOptions": {
                    "AllowDnsResolutionFromRemoteVpc": false,
                    "AllowEgressFromLocalClassicLinkToRemoteVpc": false,
                    "AllowEgressFromLocalVpcToRemoteClassicLink": false
                },
                "VpcId": "vpc-0b40bd7c59dbe4277",
                "Region": "eu-west-1"
            },
            "RequesterVpcInfo": {
                "CidrBlock": "10.0.17.0/24",
                "CidrBlockSet": [
                    {
                        "CidrBlock": "10.0.17.0/24"
                    }
                ],
                "OwnerId": "606671647913",
                "PeeringOptions": {
                    "AllowDnsResolutionFromRemoteVpc": false,
                    "AllowEgressFromLocalClassicLinkToRemoteVpc": false,
                    "AllowEgressFromLocalVpcToRemoteClassicLink": false
                },
                "VpcId": "vpc-0b721449398429559",
                "Region": "eu-west-1"
            },
            "Status": {
                "Code": "provisioning",
                "Message": "Provisioning"
            },
            "Tags": [],
            "VpcPeeringConnectionId": "pcx-0cb23d66dea3dca9f"
        }
    }
    Copy to Clipboard Toggle word wrap

  6. ROSA クラスター VPC ルートテーブルを更新します。

    コマンド:

    ROSA_PUBLIC_ROUTE_TABLE_ID=$(aws ec2 describe-route-tables \
      --filters "Name=vpc-id,Values=vpc-0b721449398429559" "Name=association.main,Values=true" \
    1
    
      --query "RouteTables[*].RouteTableId" \
      --output text \
      --region eu-west-1
    )
    aws ec2 create-route \
      --route-table-id ${ROSA_PUBLIC_ROUTE_TABLE_ID} \
      --destination-cidr-block 192.168.0.0/16 \
    2
    
      --vpc-peering-connection-id pcx-0cb23d66dea3dca9f \
      --region eu-west-1
    Copy to Clipboard Toggle word wrap

    1
    ROSA クラスター VPC
    2
    これは Aurora VPC の作成時に使用した cidr ブロックと同じである必要があります。
  7. Aurora セキュリティーグループを更新します。

    コマンド:

    AURORA_SECURITY_GROUP_ID=$(aws ec2 describe-security-groups \
      --filters "Name=group-name,Values=keycloak-aurora-security-group" \
      --query "SecurityGroups[*].GroupId" \
      --region eu-west-1 \
      --output text
    )
    aws ec2 authorize-security-group-ingress \
      --group-id ${AURORA_SECURITY_GROUP_ID} \
      --protocol tcp \
      --port 5432 \
      --cidr 10.0.17.0/24 \
    1
    
      --region eu-west-1
    Copy to Clipboard Toggle word wrap

    1
    ROSA クラスターの "machine_cidr"

    出力:

    {
        "Return": true,
        "SecurityGroupRules": [
            {
                "SecurityGroupRuleId": "sgr-0785d2f04b9cec3f5",
                "GroupId": "sg-0d746cc8ad8d2e63b",
                "GroupOwnerId": "606671647913",
                "IsEgress": false,
                "IpProtocol": "tcp",
                "FromPort": 5432,
                "ToPort": 5432,
                "CidrIpv4": "10.0.17.0/24"
            }
        ]
    }
    Copy to Clipboard Toggle word wrap

2.12.3. 接続の検証

ROSA クラスターと Aurora DB クラスターの間で接続が可能であることを確認する最も簡単な方法は、OpenShift クラスターに psql をデプロイし、ライターエンドポイントへの接続を試みることです。

次のコマンドは、デフォルトの namespace に Pod を作成し、可能であれば Aurora クラスターとの psql 接続を確立します。Pod シェルを終了すると、Pod は削除されます。

USER=keycloak 
1

PASSWORD=secret99 
2

DATABASE=keycloak 
3

HOST=$(aws rds describe-db-clusters \
  --db-cluster-identifier keycloak-aurora \
4

  --query 'DBClusters[*].Endpoint' \
  --region eu-west-1 \
  --output text
)
oc run -i --tty --rm debug --image=postgres:15 --restart=Never -- psql postgresql://${USER}:${PASSWORD}@${HOST}/${DATABASE}
Copy to Clipboard Toggle word wrap
1
Aurora DB ユーザー。これは DB の作成時に使用した --master-username と同じものにすることができます。
2
Aurora DB ユーザーパスワード。これは DB の作成時に使用した --master—​user-password と同じものにすることができます。
3
Aurora DB の名前 (--database-name など)。
4
Aurora DB クラスターの名前。

2.12.4. Aurora データベースを Red Hat build of Keycloak に接続する

この時点で Aurora データベースが確立され、すべての ROSA クラスターにリンクされています。ここでは、Aurora データベースを Red Hat build of Keycloak に接続するために使用できる Red Hat build of Keycloak CR オプションを説明します。以下の変更は、Operator を使用した複数のアベイラビリティーゾーンにまたがる Red Hat build of Keycloak のデプロイ の章で必要になります。JDBC の URL を、Aurora データベースライターエンドポイントを使用するように設定します。

  1. spec.db.urljdbc:aws-wrapper:postgresql://$HOST:5432/keycloak に更新します。$HOSTAurora ライターのエンドポイント URL です。
  2. spec.db.usernameSecret および spec.db.passwordSecret によって参照されるシークレットに、Aurora の作成時に定義したユーザー名とパスワードが含まれていることを確認します。

2.12.5. 次のステップ

Aurora データベースのデプロイが成功したら、Operator を使用した複数のアベイラビリティーゾーンにまたがる Red Hat build of Keycloak のデプロイ に進みます。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat