本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
與 Amazon Aurora 交叉VPC克隆
假設您要在原始叢集和複製上強加不同的網路存取控制。例如,您可以使用複製製作另一個生產 Aurora 叢集的副本,以進VPC行開發和測試。或者,您可以建立複製作為從公用子網路移轉至私有子網路的一部分,以增強資料庫安全性。
以下各節示範如何設定複製的網路組態,以便原始叢集和複製可以存取相同的 Aurora 儲存節點,即使是從不同的子網路或不同VPCs的子網路也是如此。事先驗證網路資源可避免複製期間可能難以診斷的錯誤。
如果您不熟悉 Aurora 如何與子網路和資料庫子網路群組互動,請先參閱Amazon VPC 和 極光。VPCs您可以透過該區段中的教學課程,在 AWS 主控台中建立這些類型的資源,並瞭解它們如何配合在一起。
因為這些步驟涉及在RDS和EC2服務之間切換,所以這些範例使用 AWS CLI指令來協助您瞭解如何自動化這類作業並儲存輸出。
開始之前
開始設定交叉VPC複製之前,請確定具備下列資源:
-
作為複製來源使用的 Aurora 資料庫叢集。如果這是您第一次建立 Aurora 資料庫叢集,請參閱中的教學課程,Amazon Aurora 入門以使用 My SQL 或 Postgre SQL 資料庫引擎設定叢集。
-
第二個VPC,如果你打算創建一個跨克VPC隆。如果您沒有可用VPC於翻製,請參閱教學課程:建立要與資料庫叢集搭配使用的 VPC (僅限 IPv4)或教學課程:建立要與資料庫叢集搭配使用的 (VPC)(雙堆疊模式)。
收集有關網路環境的資訊
使用交叉VPC複製時,原始叢集與其複製之間的網路環境可能會有很大差異。建立複製之前,請先收集並記錄原始叢集中AZs使用的子網路、資料庫子網路群組的相關資訊。VPC這樣,您可以最大程度地減少出現問題的機會。如果確實發生網路問題,您就不需要中斷任何疑難排解活動來搜尋診斷資訊。以下各節顯示收集這些類型資訊的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 DB 子網路群組至少包含兩個子網路,每個子網路都與不同的 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
尋找您VPC中可用IDs之所有子網路的子網路。
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
命令的部分輸出。輸出會顯示您可以看到每個子網路的一些重要屬性,例如其關聯的 VPC AZ 及其所屬的屬性。
{
'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
命令的範例輸出。輸出結果顯示目前 AWS 帳戶VPCs中有四個可用作交叉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 ID VPC。
檢查AZs有多少與原始叢集的儲存體相關聯,並與目VPC的地中的子網路相關聯。若要成功建立翻製,必須有兩個或三個AZs共同點。如果您的共同點少AZs於兩個,請返回步驟 1:建立複製的子網路。建立與原始叢集儲存體相關聯的一個、兩個或三個新子網路。AZs
在目的地VPC中選擇與原始叢集中的 Aurora 儲存體AZs相關聯的子網路。理想情況下,選擇三個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
其資料庫執行個體的命令上指定的選項--availability-zone
,例如、和。--db-subnet-group-name
步驟 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 無伺服器 v2 執行個體,請在建立複製時加入--serverless-v2-scaling-configuration
選項,如圖所示。這樣做可讓您在複製中建立資料庫執行個體時使用該db.serverless
類別。您也可以稍後修改翻製,以新增此縮放設定屬性。此範例中的容量數字允許叢集中的每個無伺服器 v2 執行個體在 2 到 32 個 Aurora 容量單位之間進行擴展 (ACUs)。如需 Aurora 無伺服器 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個相關聯。下列範例會針對前述範例中的兩個restore-db-cluster-to-point-in-time
命令,列出與原始叢集和 clone AZs 相關聯的項目。
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 中建立該執行個體。這個選項很方便,特別是對於開發和測試系統而言,因為您不需要追蹤子網路IDs或在將新執行個體新增至複製AZs時。
或者,您可以在為複製建立 Aurora 資料庫執行個體時指定 AZ。您指定的 AZ 必須來自與翻製AZs相關聯的一組。如果您用於複製的資料庫子網路群組只包含兩個子網路,則您只能從與這兩個子網路AZs相關聯的子網路中進行挑選。此選項可為高可用性系統提供彈性和復原能力,因為您可以確定寫入器執行個體和待命讀取器執行個體是不同的AZs。或者,如果您將其他讀取器新增至叢集,則可以確定它們分散在三個中AZs。這樣,即使在罕見的 AZ 故障情況下,您仍然有一個寫入器執行個體和另一個讀取器執行個體在其他兩個執行個體AZs。
下列範例會將佈建的資料庫執行個體新增至使用自訂資料庫子網路群組的複製 Aurora Postgre SQL 叢集。
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 無伺服器 v2 資料庫執行個體新增至使用自訂資料庫子網路群組的 Aurora My SQL 複製。若要能夠使用無伺服器 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 無伺服器 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 叢集擁有足夠的私人子網路,並且這些子網路與原始叢集中用於 Aurora 儲存體AZs的所有子網路相關聯。與其他複製使用案例類似,您可以使用與所AZs需子網路相關聯的三個或兩個私有子網路來建立複製的資料庫子網路群組。但是,如果您在資料庫子網路群組中使用兩個私有子網路,則必須擁有第三個私有子網路,該子網路與原始叢集中用於 Aurora 儲存體的第三個 AZ 相關聯。
您可以參閱此檢查清單,以確認執行此類複製作業所需的所有需求。
-
記錄與原始叢集相關聯的三個AZs。如需說明,請參閱 步驟 1:檢查原始叢集的可用區域。
-
記錄與原始叢集AZs之資料庫子網路群組中公用子網路相關聯的三個或兩個。如需說明,請參閱 步驟 3:檢查原始叢集的子網路。
-
建立對應至所有三個與原始叢集相關聯的私人子網路。AZs同時執行任何其他網路設定,例如建立NAT閘道,以便能夠與私有子網路通訊。如需指示,請參閱 Amazon 虛擬私有雲使用者指南中的建立子網路。
-
建立新的資料庫子網路群組,其AZs中包含與第一個點相關聯的三個或兩個私有子網路。如需說明,請參閱 步驟 2:建立複製的資料庫子網路群組。
當所有必要條件都已就緒時,您可以在建立複製時暫停原始叢集上的資料庫活動,並切換應用程式以使用它。建立複製並確認您可以連線到它、執行應用程式程式碼等等之後,您就可以停止使用原始叢集。
創nd-to-end 建交叉VPC克隆的示例
在不同VPC於原始翻製中建立翻製時,會使用與前述範例相同的一般步驟。由於 VPC ID 是子網路的屬性,因此在執行任何RDSCLI命令時,實際上並不會將 VPC ID 指定為參數。主要差異在於,您更有可能需要建立新的子網路、對應至特定子網路的新子網路、VPC安全群組AZs,以及新的資料庫子網路群組。這是尤其如此,如果這是您在其中建立的第一個 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。若要為 Aurora 儲存區使用相同AZs的一組複製設定,我們檢查原始叢集所使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', } }
此範例會確認有子網路對應至目標AZsVPC中必要的子網路。
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。複製現有叢集時,子網路群組至少必須符合用於 Aurora 儲存區AZs的三個群組中的兩個。
$
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' } } ] } }
現在子網路和 DB 子網路群組就位了。下列範例顯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。