本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Amazon Aurora 進行VPC跨複製
假設您想要在原始叢集和複製上套用不同的網路存取控制。例如,您可以使用複製來複製不同 中的生產 Aurora 叢集VPC,以進行開發和測試。或者,您可以在從公有子網路遷移到私有子網路的過程中建立複製,以增強資料庫安全性。
下列各節示範如何設定複製的網路組態,讓原始叢集和複製都可以存取相同的 Aurora 儲存節點,即使是來自不同的子網路或不同的 VPCs。事先驗證網路資源可以避免複製過程中可能難以診斷的錯誤。
如果您不熟悉 Aurora 如何與 VPCs、子網路和資料庫子網路群組互動,Amazon VPC 和 極光請先參閱 。您可以完成該區段中的教學課程,在 AWS 主控台中建立這些資源類型,並了解它們如何結合在一起。
由於這些步驟涉及在 RDS和 EC2服務之間切換,因此範例使用 AWS CLI 命令來協助您了解如何自動化此類操作並儲存輸出。
開始之前
開始設定跨VPC複製之前,請務必擁有下列資源:
-
要用作複製來源的 Aurora 資料庫叢集。如果這是您第一次建立 Aurora 資料庫叢集,請參閱中的教學Amazon Aurora 入門課程,使用 MySQL 或 PostgreSQL 資料庫引擎設定叢集。
-
如果您想要建立跨VPC複製VPC,請第二個 。如果您沒有VPC可用於複製的 ,請參閱 教學課程:建立要與資料庫叢集搭配使用的 VPC (僅限 IPv4)或 教學課程:建立要與資料庫叢集搭配使用的 (VPC)(雙堆疊模式)。
收集網路環境的相關資訊
透過跨VPC複製,網路環境在原始叢集及其複製之間可能會有很大的差異。建立複製之前,請收集並記錄有關 VPC、子網路、資料庫子網路群組,以及AZs用於原始叢集的資訊。如此一來,您就可以將問題的機率降至最低。如果網路問題確實發生,您不必中斷任何故障診斷活動來搜尋診斷資訊。下列各節顯示收集這類資訊CLI的範例。您可以在建立複製和進行任何故障診斷時,以方便查閱的任何格式儲存詳細資訊。
步驟 1:檢查原始叢集的可用區域
建立複製之前,請確認AZs原始叢集用於其儲存體。如 所述Amazon Aurora 儲存體,每個 Aurora 叢集的儲存體與正好三個 相關聯AZs。由於 Amazon Aurora 資料庫叢集利用運算和儲存體的分離,因此無論叢集中有多少執行個體,此規則都是正確的。
例如,執行如下的CLI命令,將您自己的叢集名稱替換為
。下列範例會依 AZ 名稱的字母順序產生清單。my_cluster
aws rds describe-db-clusters \ --db-cluster-identifier
my_cluster
\ --query 'sort_by(*[].AvailabilityZones[].{Zone:@},&Zone)' \ --output text
下列範例顯示上述describe-db-clusters
命令的範例輸出。它示範 Aurora 叢集的儲存一律使用三個 AZs。
us-east-1c
us-east-1d
us-east-1e
若要在網路環境中建立複製,而該網路環境沒有所有可連線至這些 的資源AZs,您必須建立與其中至少兩個相關聯的子網路AZs,然後建立包含這兩個或三個子網路的資料庫子網路群組。下列範例示範 的方式。
步驟 2:檢查原始叢集的資料庫子網路群組
如果您想要使用與原始叢集中相同的複製子網路數量,您可以從原始叢集的資料庫子網路群組取得子網路數量。Aurora 資料庫子網路群組包含至少兩個子網路,每個子網路都與不同的 AZ 相關聯。請記下AZs子網路的關聯。
下列範例顯示如何尋找原始叢集的資料庫子網路群組,然後向後工作至對應的 AZs。在第一個命令
中取代 叢集的名稱。在第二個命令my_cluster
中替換 的資料庫子網路群組名稱。my_subnet
aws rds describe-db-clusters --db-cluster-identifier
my_cluster
\ --query '*[].DBSubnetGroup' --output text aws rds describe-db-subnet-groups --db-subnet-group-namemy_subnet_group
\ --query '*[].Subnets[].[SubnetAvailabilityZone.Name]' --output text
對於具有包含兩個子網路之資料庫子網路群組的叢集,範例輸出看起來可能會類似以下。在此情況下, two-subnets
是在建立資料庫子網路群組時指定的名稱。
two-subnets
us-east-1d
us-east-1c
對於資料庫子網路群組包含三個子網路的叢集,輸出看起來可能會類似以下內容。
three-subnets
us-east-1f
us-east-1d
us-east-1c
步驟 3:檢查原始叢集的子網路
如果您需要有關原始叢集中子網路的詳細資訊,請執行 AWS CLI類似下列的命令。您可以檢查子網路屬性,例如 IP 地址範圍、擁有者等。如此一來,您就可以判斷是否在相同的 中使用不同的子網路VPC,還是在不同 中建立具有類似特性的子網路VPC。
尋找 中所有可用子網路IDs的子網路VPC。
aws ec2 describe-subnets --filters Name=vpc-id,Values=
my_vpc
\ --query '*[].[SubnetId]' --output text
尋找資料庫子網路群組中使用的確切子網路。
aws rds describe-db-subnet-groups --db-subnet-group-name
my_subnet_group
\ --query '*[].Subnets[].[SubnetIdentifier]' --output text
然後在清單中指定您要調查的子網路,如下列命令所示。將子網路的名稱替換為
等。my_subnet_1
aws ec2 describe-subnets \ --subnet-ids '["
my_subnet_1
","my_subnet2
","my_subnet3
"]'
下列範例顯示來自這類describe-subnets
命令的部分輸出。輸出會顯示每個子網路的部分重要屬性,例如其關聯的 AZ 及其所屬的 VPC 。
{
'Subnets': [
{
'AvailabilityZone': 'us-east-1d',
'AvailableIpAddressCount': 54,
'CidrBlock': '10.0.0.64/26',
'State': 'available',
'SubnetId': 'subnet-000a0bca00e0b0000',
'VpcId': 'vpc-3f3c3fc3333b3ffb3',
...
},
{
'AvailabilityZone': 'us-east-1c',
'AvailableIpAddressCount': 55,
'CidrBlock': '10.0.0.0/26',
'State': 'available',
'SubnetId': 'subnet-4b4dbfe4d4a4fd4c4',
'VpcId': 'vpc-3f3c3fc3333b3ffb3',
...
步驟 4:檢查原始叢集中資料庫執行個體的可用區域
您可以使用此程序來了解AZs用於原始叢集中資料庫執行個體的 。如此一來,您就可以AZs為複製中的資料庫執行個體設定完全相同的 。您也可以在複製中使用更多或更少的資料庫執行個體,取決於複製是否用於生產、開發和測試等。
對於原始叢集中的每個執行個體,執行如下命令。請確定執行個體已完成建立,且先處於 Available
狀態。取代 的執行個體識別符
。my_instance
aws rds describe-db-instances --db-instance-identifier
my_instance
\ --query '*[].AvailabilityZone' --output text
下列範例顯示執行上述describe-db-instances
命令的輸出。Aurora 叢集有四個資料庫執行個體。因此,我們會執行 命令四次,每次都會取代不同的資料庫執行個體識別碼。輸出顯示這些資料庫執行個體如何分散到最多三個 AZs。
us-east-1a
us-east-1c
us-east-1d
us-east-1a
建立複製並新增資料庫執行個體之後,您可以在create-db-instance
命令中指定這些相同的 AZ 名稱。您可以這樣做,在為 設定的新叢集中設定資料庫執行個體,與在原始叢集AZs中完全相同。
步驟 5:檢查VPCs您可以用於複製的
如果您打算在與原始版本VPC不同的 中建立複製,您可以取得VPCIDs適用於您帳戶的 清單。如果您需要在VPC與原始叢集相同的 中建立任何其他子網路,也可以執行此步驟。當您執行 命令來建立子網路時,您可以將 VPC ID 指定為 參數。
若要列出VPCs您帳戶的所有 ,請執行下列CLI命令:
aws ec2 describe-vpcs --query '*[].[VpcId]' --output text
下列範例顯示上述describe-vpcs
命令的範例輸出。輸出顯示VPCs目前 AWS 帳戶中有四個 可以用作跨VPC複製的來源或目的地。
vpc-fd111111
vpc-2222e2cd2a222f22e
vpc-33333333a33333d33
vpc-4ae4d4de4a4444dad
您可以使用VPC與複製目的地相同的 ,或不同的 VPC。如果原始叢集和複製位於相同的 中VPC,您可以重複使用相同的資料庫子網路群組進行複製。您也可以建立不同的資料庫子網路群組。例如,新的資料庫子網路群組可能會使用私有子網路,而原始叢集的資料庫子網路群組可能會使用公有子網路。如果您在不同的 中建立複製VPC,請確定新的 中有足夠的子網路,VPC且子網路AZs與原始叢集中的右側相關聯。
建立複製的網路資源
如果在收集網路資訊時發現複製需要額外的網路資源,您可以在嘗試設定複製之前建立這些資源。例如,您可能需要建立更多與特定 相關聯的子網路AZs,或新的資料庫子網路群組。
步驟 1:建立複製的子網路
如果您需要為複製建立新的子網路,請執行類似以下的命令。在不同的 中建立複製時VPC,或進行一些其他網路變更時,例如使用私有子網路而非公有子網路時,您可能需要執行此操作。
AWS 會自動產生子網路的 ID。將複製的名稱替換VPC為
。選擇 my_vpc
--cidr-block
選項的地址範圍,以允許該範圍內至少 16 個 IP 地址。您可以包含任何其他要指定的屬性。執行 命令aws ec2 create-subnet help
以查看所有選項。
aws ec2 create-subnet --vpc-id
my_vpc
\ --availability-zoneAZ_name
--cidr-blockIP_range
下列範例顯示新建立子網路的一些重要屬性。
{
'Subnet': {
'AvailabilityZone': 'us-east-1b',
'AvailableIpAddressCount': 59,
'CidrBlock': '10.0.0.64/26',
'State': 'available',
'SubnetId': 'subnet-44b4a44f4e44db444',
'VpcId': 'vpc-555fc5df555e555dc',
...
}
}
步驟 2:建立複製的資料庫子網路群組
如果您要在不同的 中建立複製VPC,或相同 內不同的子網路集VPC,則需建立新的資料庫子網路群組,並在建立複製時指定它。
請確定您知道下列所有詳細資訊。您可以從上述範例的輸出找到所有這些項目。
-
VPC 原始叢集的 。如需說明,請參閱 步驟 3:檢查原始叢集的子網路。
-
VPC 如果您是在不同 中建立複製的 VPC。如需說明,請參閱 步驟 5:檢查VPCs您可以用於複製的。
-
AZs 三個與原始叢集的 Aurora 儲存相關聯。如需說明,請參閱 步驟 1:檢查原始叢集的可用區域。
-
與原始叢集的資料庫子網路群組AZs相關聯的兩個或三個。如需說明,請參閱 步驟 2:檢查原始叢集的資料庫子網路群組。
-
VPC 您打算用於複製之 中所有子網路AZs的子網路IDs和關聯。使用與 相同的
describe-subnets
命令步驟 3:檢查原始叢集的子網路,取代目的地 的 VPC IDVPC。
檢查與原始叢集的儲存體AZs相關聯的數量,以及與目的地 中的子網路相關聯的數量VPC。若要成功建立複製,必須有兩個或三個AZs共同。如果您的AZs常見數量少於兩個,請返回 步驟 1:建立複製的子網路。建立一個、兩個或三個與原始叢集AZs的儲存相關聯的子網路。
選擇目的地中與原始叢集中 AZs Aurora 儲存VPC體相同的子網路。理想情況下,請選擇三個 AZs。這樣做可讓您最靈活地將複製的資料庫執行個體分散到多個 AZs,以獲得高可用性的運算資源。
執行類似下列的命令來建立新的資料庫子網路群組。在清單中替換子網路IDs的 。如果您IDs使用環境變數指定子網路,請小心以保留 周圍雙引號的方式引述--subnet-ids
參數清單IDs。
aws rds create-db-subnet-group --db-subnet-group-name
my_subnet_group
\ --subnet-ids '["my_subnet_1
","my_subnet_2
","my_subnet3
"]' \ --db-subnet-group-description 'DB subnet group with 3 subnets for clone'
下列範例顯示 create-db-subnet-group
命令的部分輸出。
{
'DBSubnetGroup': {
'DBSubnetGroupName': 'my_subnet_group
',
'DBSubnetGroupDescription': 'DB subnet group with 3 subnets for clone',
'VpcId': 'vpc-555fc5df555e555dc',
'SubnetGroupStatus': 'Complete',
'Subnets': [
{
'SubnetIdentifier': 'my_subnet_1
',
'SubnetAvailabilityZone': {
'Name': 'us-east-1c'
},
'SubnetStatus': 'Active'
},
{
'SubnetIdentifier': 'my_subnet_2
',
'SubnetAvailabilityZone': {
'Name': 'us-east-1d'
},
'SubnetStatus': 'Active'
}
...
],
'SupportedNetworkTypes': [
'IPV4'
]
}
}
此時,您尚未實際建立複製。您已建立所有相關VPC和子網路資源,以便在建立複製時,可以指定適當的參數給 restore-db-cluster-to-point-in-time
和 create-db-instance
命令。
使用新的網路設定建立 Aurora 複製
確定 VPCs、子網路、 AZs和子網路群組的正確組態已就緒,以供新叢集使用後,您就可以執行實際的複製操作。下列CLI範例會反白顯示--vpc-security-group-ids
您在命令上指定的選項--db-subnet-group-name
,例如 --availability-zone
、 和 ,以設定複製及其資料庫執行個體。
步驟 1:指定複製的資料庫子網路群組
建立複製時,您可以透過指定資料庫子網路群組來設定所有正確的 VPC、子網路和 AZ 設定。使用上述範例中的命令來驗證進入資料庫子網路群組的所有關係和映射。
例如,下列命令示範將原始叢集複製到複製。在第一個範例中,來源叢集與兩個子網路相關聯,而複製與三個子網路相關聯。第二個範例顯示相反的情況,從具有三個子網路的叢集複製到具有兩個子網路的叢集。
aws rds restore-db-cluster-to-point-in-time \ --source-db-cluster-identifier cluster-with-3-subnets \ --db-cluster-identifier cluster-cloned-to-2-subnets \ --restore-type copy-on-write --use-latest-restorable-time \ --db-subnet-group-name two-subnets
如果您想要在複製中使用 Aurora Serverless v2 執行個體,請在建立複製時包含--serverless-v2-scaling-configuration
選項,如下所示。這樣做可讓您在複製中建立資料庫執行個體時使用 db.serverless
類別。您也可以稍後修改複製,以新增此擴展組態屬性。此範例中的容量數字允許叢集中的每個 Serverless v2 執行個體擴展到 2 到 32 個 Aurora 容量單位 (ACUs)。如需 Aurora Serverless v2 功能以及如何選擇容量範圍的詳細資訊,請參閱 使用 Aurora Serverless v2。
aws rds restore-db-cluster-to-point-in-time \ --source-db-cluster-identifier cluster-with-2-subnets \ --db-cluster-identifier cluster-cloned-to-3-subnets \ --restore-type copy-on-write --use-latest-restorable-time \ --db-subnet-group-name three-subnets \ --serverless-v2-scaling-configuration 'MinCapacity=2,MaxCapacity=32'
無論資料庫執行個體使用的子網路數目為何,來源叢集的 Aurora 儲存體和複製都與三個 相關聯AZs。下列範例列出與原始叢集和複製AZs相關聯的 ,適用於上述範例中的兩個restore-db-cluster-to-point-in-time
命令。
aws rds describe-db-clusters --db-cluster-identifier cluster-with-3-subnets \ --query 'sort_by(*[].AvailabilityZones[].{Zone:@},&Zone)' --output text
us-east-1c us-east-1d us-east-1f
aws rds describe-db-clusters --db-cluster-identifier cluster-cloned-to-2-subnets \ --query 'sort_by(*[].AvailabilityZones[].{Zone:@},&Zone)' --output textus-east-1c us-east-1d us-east-1f
aws rds describe-db-clusters --db-cluster-identifier cluster-with-2-subnets \ --query 'sort_by(*[].AvailabilityZones[].{Zone:@},&Zone)' --output textus-east-1a us-east-1c us-east-1d
aws rds describe-db-clusters --db-cluster-identifier cluster-cloned-to-3-subnets \ --query 'sort_by(*[].AvailabilityZones[].{Zone:@},&Zone)' --output textus-east-1a us-east-1c us-east-1d
由於每對原始和複製叢集之間至少有兩個AZs重疊,因此兩個叢集都可以存取相同的基礎 Aurora 儲存體。
步驟 2:指定複製中執行個體的網路設定
當您在複製中建立資料庫執行個體時,預設會從叢集本身繼承資料庫子網路群組。如此一來,Aurora 會自動將每個執行個體指派給特定子網路,並在與子網路相關聯的 AZ 中建立執行個體。這個選擇很方便,特別是對於開發和測試系統,因為您在將新執行個體新增至複製AZs時,不需要追蹤子網路IDs或 。
或者,您可以在為複製建立 Aurora 資料庫執行個體時指定 AZ。您指定的 AZ 必須來自與複製AZs相關聯的 集合。如果您用於複製的資料庫子網路群組僅包含兩個子網路,則您只能從與這兩個子網路AZs相關聯的 中進行挑選。此選擇可為高可用性系統提供彈性和彈性,因為您可以確保寫入器執行個體和待命讀取器執行個體位於不同的 AZs。或者,如果您將其他讀取器新增至叢集,您可以確保它們分散在三個 AZs。如此一來,即使在極少數的 AZ 故障情況下,您仍有一個寫入器執行個體和另一個讀取器執行個體在另外兩個 中AZs。
下列範例會將佈建的資料庫執行個體新增至使用自訂資料庫子網路群組的複製 Aurora PostgreSQL 叢集。
aws rds create-db-instance --db-cluster-identifier
my_aurora_postgresql_clone
\ --db-instance-identifiermy_postgres_instance
\ --db-subnet-group-namemy_new_subnet
\ --engine aurora-postgresql \ --db-instance-class db.t4g.medium
下列範例顯示來自這類命令的部分輸出。
{
'DBInstanceIdentifier': 'my_postgres_instance
',
'DBClusterIdentifier': 'my_aurora_postgresql_clone
',
'DBInstanceClass': 'db.t4g.medium',
'DBInstanceStatus': 'creating'
...
}
下列範例會將 Aurora Serverless v2 資料庫執行個體新增至使用自訂資料庫子網路群組的 Aurora MySQL 複製。若要能夠使用 Serverless v2 執行個體,請務必指定 restore-db-cluster-to-point-in-time
命令--serverless-v2-scaling-configuration
的選項,如上述範例所示。
aws rds create-db-instance --db-cluster-identifier
my_aurora_mysql_clone
\ --db-instance-identifiermy_mysql_instance
\ --db-subnet-group-namemy_other_new_subnet
\ --engine aurora-mysql \ --db-instance-class db.serverless
下列範例顯示來自這類命令的部分輸出。
{
'DBInstanceIdentifier': 'my_mysql_instance
',
'DBClusterIdentifier': 'my_aurora_mysql_clone
',
'DBInstanceClass': 'db.serverless',
'DBInstanceStatus': 'creating'
...
}
步驟 3:建立從用戶端系統到複製的連線
如果您已從用戶端系統連線至 Aurora 叢集,建議您允許與新複製相同的連線類型。例如,您可以從 Amazon Cloud9 執行個體或EC2執行個體連線到原始叢集。若要允許來自相同用戶端系統的連線,或您在目的地 中建立的新連線VPC,請設定與 中相同的資料庫子網路群組和VPC安全群組VPC。然後在建立複製時指定子網路群組和安全群組。
下列範例設定 Aurora Serverless v2 複製。該組態是根據建立資料庫叢集--serverless-v2-scaling-configuration
時 --engine-mode provisioned
和 的組合,然後在叢集中建立每個資料庫執行個體--db-instance-class db.serverless
時。provisioned
引擎模式是預設值,因此您可以視需要省略該選項。
aws rds restore-db-cluster-to-point-in-time \ --source-db-cluster-identifier serverless-sql-postgres\ --db-cluster-identifier serverless-sql-postgres-clone \ --db-subnet-group-name 'default-vpc-1234' \ --vpc-security-group-ids 'sg-4567' \ --serverless-v2-scaling-configuration 'MinCapacity=0.5,MaxCapacity=16' \ --restore-type copy-on-write \ --use-latest-restorable-time
然後,在複製中建立資料庫執行個體時,請指定相同的--db-subnet-group-name
選項。或者,您可以包含 --availability-zone
選項,並指定與該子網路群組中子網路AZs相關聯的其中一個 。該 AZ 也必須是與原始叢集AZs相關聯的 之一。
aws rds create-db-instance \ --db-cluster-identifier serverless-sql-postgres-clone \ --db-instance-identifier serverless-sql-postgres-clone-instance \ --db-instance-class db.serverless \ --db-subnet-group-name 'default-vpc-987zyx654' \ --availability-zone 'us-east-1c' \ --engine aurora-postgresql
將叢集從公有子網路移至私有子網路
您可以使用複製在公有和私有子網路之間遷移叢集。在將應用程式部署到生產環境之前,您可以在新增額外的安全層時執行此操作。在此範例中,您應該已在使用 Aurora 開始複製程序之前設定私有子網路和NAT閘道。
對於涉及 Aurora 的步驟,您可以遵循與上述範例相同的一般步驟,前往 收集網路環境的相關資訊和 使用新的網路設定建立 Aurora 複製。主要差別在於,即使您有AZs從原始叢集映射到所有 的公有子網路,現在您必須驗證您有足夠的私有子網路用於 Aurora 叢集,並且這些子網路與原始叢集中AZs用於 Aurora 儲存體的所有相同子網路相關聯。與其他複製使用案例類似,您可以使用與所需 相關聯的三個或兩個私有子網路,建立複製的資料庫子網路群組AZs。不過,如果您在資料庫子網路群組中使用兩個私有子網路,則必須具有與原始叢集中用於 Aurora 儲存的第三個 AZ 相關聯的第三個私有子網路。
您可以參考此檢查清單,確認所有執行此類型複製操作的需求都已就緒。
-
記錄與原始叢集AZs相關聯的三個 。如需說明,請參閱 步驟 1:檢查原始叢集的可用區域。
-
在原始叢集的資料庫子網路群組中AZs,記錄與公有子網路相關聯的三或兩個。如需說明,請參閱 步驟 3:檢查原始叢集的子網路。
-
建立私有子網路,以對應至與原始叢集AZs相關聯的所有三個 。也請執行任何其他聯網設定,例如建立NAT閘道,以便能夠與私有子網路通訊。如需說明,請參閱《Amazon Virtual Private Cloud 使用者指南》中的建立子網路。
-
建立新的資料庫子網路群組,其中包含AZs從第一個時間點與 相關聯的三個或兩個私有子網路。如需說明,請參閱 步驟 2:建立複製的資料庫子網路群組。
當所有先決條件都就緒時,您可以在建立複製時暫停原始叢集上的資料庫活動,並切換應用程式以使用它。建立複製並驗證您可以連線到複製、執行應用程式程式碼,以此類推,您可以停止使用原始叢集。
End-to-end 建立跨VPC複製的範例
在與原始版本VPC不同的 中建立複製,會使用與上述範例相同的一般步驟。由於 VPC ID 是子網路的屬性,因此在執行任何RDSCLI命令時,您實際上不會將 VPC ID 指定為 參數。主要差別在於,您更可能需要建立新的子網路、對應至特定 的新子網路AZs、VPC安全群組和新的資料庫子網路群組。如果這是您在該 中建立的第一個 Aurora 叢集,則尤其如此VPC。
您可以參考此檢查清單,確認所有執行此類型複製操作的需求都已就緒。
-
記錄與原始叢集AZs相關聯的三個 。如需說明,請參閱 步驟 1:檢查原始叢集的可用區域。
-
記錄與原始叢集資料庫子網路群組中子網路AZs相關聯的三或兩個子網路。如需說明,請參閱 步驟 2:檢查原始叢集的資料庫子網路群組。
-
建立子網路,對應至與原始叢集AZs相關聯的所有三個 。如需說明,請參閱 步驟 1:建立複製的子網路。
-
為用戶端系統、應用程式伺服器等執行任何其他聯網設定,例如設定VPC安全群組,以便能夠與複製中的資料庫執行個體通訊。如需說明,請參閱 使用安全群組控制存取。
-
建立新的資料庫子網路群組,其中包含AZs從第一個點與 相關聯的三個或兩個子網路。如需說明,請參閱 步驟 2:建立複製的資料庫子網路群組。
當所有先決條件都就緒時,您可以在建立複製時暫停原始叢集上的資料庫活動,並切換應用程式以使用它。建立複製並驗證您可以連線到複製、執行應用程式程式碼,以此類推,您可以考慮是否要同時讓原始和複製同時執行,或停止使用原始叢集。
下列 Linux 範例顯示將 Aurora 資料庫叢集從一個叢集複製到VPC另一個資料庫叢集的操作 AWS CLI順序。與範例無關的某些欄位不會顯示於命令輸出中。
首先,我們會檢查來源和目的地 IDs的 VPCs。您在建立VPC時指派給 的描述性名稱,會在VPC中繼資料中以標籤表示。
$
aws ec2 describe-vpcs --query '*[].[VpcId,Tags]'[ [ 'vpc-0f0c0fc0000b0ffb0', [ { 'Key': 'Name', 'Value': 'clone-vpc-source' } ] ], [ 'vpc-9e99d9f99a999bd99', [ { 'Key': 'Name', 'Value': 'clone-vpc-dest' } ] ] ]
原始叢集已存在於來源 中VPC。若要AZs為 Aurora 儲存體使用相同的 集設定複製,我們會檢查原始叢集AZs使用的 。
$
aws rds describe-db-clusters --db-cluster-identifier original-cluster \ --query 'sort_by(*[].AvailabilityZones[].{Zone:@},&Zone)' --output textus-east-1c us-east-1d us-east-1f
我們確保有與原始叢集AZs使用的 對應的子網路:us-east-1c
、 us-east-1d
和 us-east-1f
。
$
aws ec2 create-subnet --vpc-id vpc-9e99d9f99a999bd99 \ --availability-zone us-east-1c --cidr-block 10.0.0.128/28{ 'Subnet': { 'AvailabilityZone': 'us-east-1c', 'SubnetId': 'subnet-3333a33be3ef3e333', 'VpcId': 'vpc-9e99d9f99a999bd99', } }
$
aws ec2 create-subnet --vpc-id vpc-9e99d9f99a999bd99 \ --availability-zone us-east-1d --cidr-block 10.0.0.160/28{ 'Subnet': { 'AvailabilityZone': 'us-east-1d', 'SubnetId': 'subnet-4eeb444cd44b4d444', 'VpcId': 'vpc-9e99d9f99a999bd99', } }
$
aws ec2 create-subnet --vpc-id vpc-9e99d9f99a999bd99 \ --availability-zone us-east-1f --cidr-block 10.0.0.224/28{ 'Subnet': { 'AvailabilityZone': 'us-east-1f', 'SubnetId': 'subnet-66eea6666fb66d66c', 'VpcId': 'vpc-9e99d9f99a999bd99', } }
此範例會確認有子網路對應至目的地 AZs中必要的 VPC。
aws ec2 describe-subnets --query 'sort_by(*[] | [?VpcId == `vpc-9e99d9f99a999bd99`] | [].{SubnetId:SubnetId,VpcId:VpcId,AvailabilityZone:AvailabilityZone}, &AvailabilityZone)' --output table
--------------------------------------------------------------------------- | DescribeSubnets | +------------------+----------------------------+-------------------------+ | AvailabilityZone | SubnetId | VpcId | +------------------+----------------------------+-------------------------+ | us-east-1a | subnet-000ff0e00000c0aea | vpc-9e99d9f99a999bd99 | | us-east-1b | subnet-1111d111111ca11b1 | vpc-9e99d9f99a999bd99 | | us-east-1c | subnet-3333a33be3ef3e333 | vpc-9e99d9f99a999bd99 | | us-east-1d | subnet-4eeb444cd44b4d444 | vpc-9e99d9f99a999bd99 | | us-east-1f | subnet-66eea6666fb66d66c | vpc-9e99d9f99a999bd99 | +------------------+----------------------------+-------------------------+
在 中建立 Aurora 資料庫叢集之前VPC,您必須有一個資料庫子網路群組,其子網路會對應至AZs用於 Aurora 儲存體的 。建立一般叢集時,您可以使用任何一組三個 AZs。當您複製現有的叢集時,子網路群組必須至少符合AZs其用於 Aurora 儲存的三個叢集中的兩個。
$
aws rds create-db-subnet-group \ --db-subnet-group-name subnet-group-in-other-vpc \ --subnet-ids '["subnet-3333a33be3ef3e333","subnet-4eeb444cd44b4d444","subnet-66eea6666fb66d66c"]' \ --db-subnet-group-description 'DB subnet group with 3 subnets: subnet-3333a33be3ef3e333,subnet-4eeb444cd44b4d444,subnet-66eea6666fb66d66c'{ 'DBSubnetGroup': { 'DBSubnetGroupName': 'subnet-group-in-other-vpc', 'DBSubnetGroupDescription': 'DB subnet group with 3 subnets: subnet-3333a33be3ef3e333,subnet-4eeb444cd44b4d444,subnet-66eea6666fb66d66c', 'VpcId': 'vpc-9e99d9f99a999bd99', 'SubnetGroupStatus': 'Complete', 'Subnets': [ { 'SubnetIdentifier': 'subnet-4eeb444cd44b4d444', 'SubnetAvailabilityZone': { 'Name': 'us-east-1d' } }, { 'SubnetIdentifier': 'subnet-3333a33be3ef3e333', 'SubnetAvailabilityZone': { 'Name': 'us-east-1c' } }, { 'SubnetIdentifier': 'subnet-66eea6666fb66d66c', 'SubnetAvailabilityZone': { 'Name': 'us-east-1f' } } ] } }
現在子網路和資料庫子網路群組已就位。下列範例顯示restore-db-cluster-to-point-in-time
複製叢集的 。--db-subnet-group-name
選項會將複製與一組正確的子網路建立關聯,這些子網路對應至原始叢集AZs中的一組正確的 。
$
aws rds restore-db-cluster-to-point-in-time \ --source-db-cluster-identifier original-cluster \ --db-cluster-identifier clone-in-other-vpc \ --restore-type copy-on-write --use-latest-restorable-time \ --db-subnet-group-name subnet-group-in-other-vpc{ 'DBClusterIdentifier': 'clone-in-other-vpc', 'DBSubnetGroup': 'subnet-group-in-other-vpc', 'Engine': 'aurora-postgresql', 'EngineVersion': '15.4', 'Status': 'creating', 'Endpoint': 'clone-in-other-vpc.cluster-c0abcdef.us-east-1.rds.amazonaws.com' }
下列範例確認複製中的 Aurora 儲存體使用AZs與原始叢集中相同的 集。
$
aws rds describe-db-clusters --db-cluster-identifier clone-in-other-vpc \ --query 'sort_by(*[].AvailabilityZones[].{Zone:@},&Zone)' --output textus-east-1c us-east-1d us-east-1f
此時,您可以為複製建立資料庫執行個體。請確定與每個執行個體相關聯的VPC安全群組允許來自您用於EC2執行個體、應用程式伺服器等之 IP 地址範圍的連線,其位於目的地 VPC。