Amazon Aurora용 사용자 지정 엔드포인트의 AWS CLI 예제
다음 자습서에서는 Unix 쉘 구문과 함께 AWS CLI 예제를 사용하여 여러 '작은' DB 인스턴스와 몇 개의 '큰' DB 인스턴스가 있는 클러스터를 정의하고, 사용자 지정 엔드포인트를 만들어 각 DB 인스턴스 집합에 연결할 수 있는 방법을 보여줍니다. 자체 시스템에서 비슷한 명령을 실행하려면 리전, 서브넷 그룹, VPC 보안 그룹 등의 파라미터에 자체 값을 제공할 수 있도록 Aurora 클러스터와 AWS CLI 사용법의 기본을 충분히 숙지한 상태여야 합니다.
이 예제에서는 초기 설정 단계인 Aurora 클러스터 만들기와 클러스터에 DB 인스턴스 추가하기를 보여 줍니다. 이는 다른 유형의 클러스터로, 모든 DB 인스턴스의 용량이 같지 않음을 뜻합니다. 대부분의 인스턴스는 AWS 인스턴스 클래스 db.r4.4xlarge
를 사용하지만, 마지막 두 DB 인스턴스는 db.r4.16xlarge
를 사용합니다. 이러한 각 샘플 create-db-instance
명령은 화면에 출력을 인쇄하고 나중에 검사하기 위해 파일에 JSON 복사본을 저장합니다.
aws rds create-db-cluster --db-cluster-identifier custom-endpoint-demo --engine aurora-mysql \ --engine-version 8.0.mysql_aurora.3.02.0 --master-username $MASTER_USER --manage-master-user-password \ --db-subnet-group-name $SUBNET_GROUP --vpc-security-group-ids $VPC_SECURITY_GROUP \ --region $REGION for i in 01 02 03 04 05 06 07 08 do aws rds create-db-instance --db-instance-identifier custom-endpoint-demo-${i} \ --engine aurora --db-cluster-identifier custom-endpoint-demo --db-instance-class db.r4.4xlarge \ --region $REGION \ | tee custom-endpoint-demo-${i}.json done for i in 09 10 do aws rds create-db-instance --db-instance-identifier custom-endpoint-demo-${i} \ --engine aurora --db-cluster-identifier custom-endpoint-demo --db-instance-class db.r4.16xlarge \ --region $REGION \ | tee custom-endpoint-demo-${i}.json done
더 큰 인스턴스는 특수한 종류의 쿼리 보고를 위해 예약되어 있습니다. 다음 예제에서는 이러한 인스턴스가 기본 인스턴스로 승격될 가능성이 없도록 해당 인스턴스의 승격 티어를 가장 낮은 우선 순위로 변경합니다. 이 예제에서는 마스터 사용자 암호를 생성하고 이를 Secrets Manager에서 관리하는 --manage-master-user-password
옵션을 지정합니다. 자세한 내용은 Amazon Aurora 및 AWS Secrets Manager를 통한 암호 관리 단원을 참조하십시오. 또는 --master-password
옵션을 사용하여 암호를 직접 지정하고 관리할 수 있습니다.
for i in 09 10 do aws rds modify-db-instance --db-instance-identifier custom-endpoint-demo-${i} \ --region $REGION --promotion-tier 15 done
리소스를 가장 많이 사용하는 쿼리에만 “더 큰” 인스턴스 두 개를 사용하려고 한다고 가정하겠습니다. 이렇게 하려면 먼저 사용자 지정 읽기 전용 엔드포인트를 만든 후, 엔드포인트가 그러한 DB 인스턴스에만 연결되도록 정적 멤버 목록을 추가할 수 있습니다. 그러한 인스턴스는 이미 가장 낮은 승격 티어에 있으므로, 어느 인스턴스도 기본 인스턴스로 승격될 가능성이 낮습니다. 두 인스턴스 중 하나가 기본 인스턴스로 승격된 경우, READER
유형 대신에 ANY
유형으로 지정했으므로 이 엔드포인트를 통해 해당 인스턴스에 접근할 수 없게 됩니다.
다음 예제에서는 엔드포인트 생성 및 수정 명령과, 사용자 지정 엔드포인트의 초기 및 수정된 상태가 나와 있는 샘플 JSON 출력을 보여 줍니다.
$
aws rds create-db-cluster-endpoint --region $REGION \ --db-cluster-identifier custom-endpoint-demo \ --db-cluster-endpoint-identifier big-instances --endpoint-type reader{ "EndpointType": "CUSTOM", "Endpoint": "big-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com", "DBClusterEndpointIdentifier": "big-instances", "DBClusterIdentifier": "custom-endpoint-demo", "StaticMembers": [], "DBClusterEndpointResourceIdentifier": "cluster-endpoint-W7PE3TLLFNSHXQKFU6J6NV5FHU", "ExcludedMembers": [], "CustomEndpointType": "READER", "Status": "creating", "DBClusterEndpointArn": "arn:aws:rds:ca-central-1:111122223333:cluster-endpoint:big-instances" }
$
aws rds modify-db-cluster-endpoint --db-cluster-endpoint-identifier big-instances \ --static-members custom-endpoint-demo-09 custom-endpoint-demo-10 --region $REGION{ "EndpointType": "CUSTOM", "ExcludedMembers": [], "DBClusterEndpointIdentifier": "big-instances", "DBClusterEndpointResourceIdentifier": "cluster-endpoint-W7PE3TLLFNSHXQKFU6J6NV5FHU", "CustomEndpointType": "READER", "DBClusterEndpointArn": "arn:aws:rds:ca-central-1:111122223333:cluster-endpoint:big-instances", "StaticMembers": [ "custom-endpoint-demo-10", "custom-endpoint-demo-09" ], "Status": "modifying", "Endpoint": "big-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com", "DBClusterIdentifier": "custom-endpoint-demo" }
클러스터의 기본 READER
엔드포인트는 '작거나' '큰' DB 인스턴스에 연결될 수 있으므로, 클러스터가 사용 중일 때 쿼리 성능과 확장성을 예측하는 것은 어렵습니다. DB 인스턴스 집합 간에 워크로드를 깔끔하게 나누려면 기본 READER
엔드포인트를 무시하고 다른 모든 DB 인스턴스에 연결되는 두 번째 사용자 지정 엔드포인트를 만들면 됩니다. 다음 예제에서는 사용자 지정 엔드포인트를 만든 후 제외 목록을 추가하여 이를 수행합니다. 클러스터에 나중에 추가하는 다른 모든 DB 인스턴스는 이 엔드포인트에 자동으로 추가됩니다. ANY
유형은 이 엔드포인트가 총 여덟 개의 인스턴스(기본 인스턴스 하나와 Aurora 복제본 일곱 개)와 연결되어 있음을 뜻합니다. 이 예제에서 READER
유형을 사용한 경우, 사용자 지정 엔드포인트는 Aurora 복제본 일곱 개에만 연결됩니다.
$
aws rds create-db-cluster-endpoint --region $REGION --db-cluster-identifier custom-endpoint-demo \ --db-cluster-endpoint-identifier small-instances --endpoint-type any{ "Status": "creating", "DBClusterEndpointIdentifier": "small-instances", "CustomEndpointType": "ANY", "EndpointType": "CUSTOM", "Endpoint": "small-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com", "StaticMembers": [], "ExcludedMembers": [], "DBClusterIdentifier": "custom-endpoint-demo", "DBClusterEndpointArn": "arn:aws:rds:ca-central-1:111122223333:cluster-endpoint:small-instances", "DBClusterEndpointResourceIdentifier": "cluster-endpoint-6RDDXQOC3AKKZT2PRD7ST37BMY" }
$
aws rds modify-db-cluster-endpoint --db-cluster-endpoint-identifier small-instances \ --excluded-members custom-endpoint-demo-09 custom-endpoint-demo-10 --region $REGION{ "DBClusterEndpointIdentifier": "small-instances", "DBClusterEndpointArn": "arn:aws:rds:ca-central-1:c7tj4example:cluster-endpoint:small-instances", "DBClusterEndpointResourceIdentifier": "cluster-endpoint-6RDDXQOC3AKKZT2PRD7ST37BMY", "CustomEndpointType": "ANY", "Endpoint": "small-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com", "EndpointType": "CUSTOM", "ExcludedMembers": [ "custom-endpoint-demo-09", "custom-endpoint-demo-10" ], "StaticMembers": [], "DBClusterIdentifier": "custom-endpoint-demo", "Status": "modifying" }
다음 예제에서는 이 클러스터의 엔드포인트 상태를 확인합니다. 클러스터에 여전히 EndPointType
이 WRITER
인 원래 클러스터 엔드포인트가 있으며, 관리, ETL 및 기타 쓰기 작업에 여전히 이 엔드포인트를 사용합니다. 여전히 원래 READER
엔드포인트가 있는데, 이 엔드포인트로의 각 연결을 '작거나' '큰' DB 인스턴스로 보낼 수 있으므로 이 인스턴스를 사용하지 않습니다. 사용자 지정 엔드포인트는 이 동작을 예측 가능하게 합니다. 지정한 엔드포인트를 기반으로 '작거나' '큰' DB 인스턴스 중 하나를 사용하도록 연결이 보장되어 있기 때문입니다.
$
aws rds describe-db-cluster-endpoints --region $REGION{ "DBClusterEndpoints": [ { "EndpointType": "WRITER", "Endpoint": "custom-endpoint-demo.cluster-c7tj4example.ca-central-1.rds.amazonaws.com", "Status": "available", "DBClusterIdentifier": "custom-endpoint-demo" }, { "EndpointType": "READER", "Endpoint": "custom-endpoint-demo.cluster-ro-c7tj4example.ca-central-1.rds.amazonaws.com", "Status": "available", "DBClusterIdentifier": "custom-endpoint-demo" }, { "Endpoint": "small-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com", "CustomEndpointType": "ANY", "DBClusterEndpointArn": "arn:aws:rds:ca-central-1:111122223333:cluster-endpoint:small-instances", "ExcludedMembers": [ "custom-endpoint-demo-09", "custom-endpoint-demo-10" ], "DBClusterEndpointResourceIdentifier": "cluster-endpoint-6RDDXQOC3AKKZT2PRD7ST37BMY", "DBClusterIdentifier": "custom-endpoint-demo", "StaticMembers": [], "EndpointType": "CUSTOM", "DBClusterEndpointIdentifier": "small-instances", "Status": "modifying" }, { "Endpoint": "big-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com", "CustomEndpointType": "READER", "DBClusterEndpointArn": "arn:aws:rds:ca-central-1:111122223333:cluster-endpoint:big-instances", "ExcludedMembers": [], "DBClusterEndpointResourceIdentifier": "cluster-endpoint-W7PE3TLLFNSHXQKFU6J6NV5FHU", "DBClusterIdentifier": "custom-endpoint-demo", "StaticMembers": [ "custom-endpoint-demo-10", "custom-endpoint-demo-09" ], "EndpointType": "CUSTOM", "DBClusterEndpointIdentifier": "big-instances", "Status": "available" } ] }
마지막 예제에서는 사용자 지정 엔드포인트로의 연속적인 데이터베이스 연결이 Aurora 클러스터의 다양한 DB 인스턴스에 연결되는 방법을 보여 줍니다. small-instances
엔드포인트는 항상 이 클러스터에서 낮은 번호의 호스트인 db.r4.4xlarge
DB 인스턴스에 연결됩니다.
$
mysql -h small-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com -u $MYUSER -pmysql>
select @@aurora_server_id;+-------------------------+ | @@aurora_server_id | +-------------------------+ | custom-endpoint-demo-02 | +-------------------------+
$
mysql -h small-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com -u $MYUSER -pmysql>
select @@aurora_server_id;+-------------------------+ | @@aurora_server_id | +-------------------------+ | custom-endpoint-demo-07 | +-------------------------+
$
mysql -h small-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com -u $MYUSER -pmysql>
select @@aurora_server_id;+-------------------------+ | @@aurora_server_id | +-------------------------+ | custom-endpoint-demo-01 | +-------------------------+
big-instances
엔드포인트는 항상 이 클러스터에서 가장 높은 번호의 두 호스트인 db.r4.16xlarge
DB 인스턴스에 연결됩니다.
$
mysql -h big-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com -u $MYUSER -pmysql>
select @@aurora_server_id;+-------------------------+ | @@aurora_server_id | +-------------------------+ | custom-endpoint-demo-10 | +-------------------------+
$
mysql -h big-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com -u $MYUSER -pmysql>
select @@aurora_server_id;+-------------------------+ | @@aurora_server_id | +-------------------------+ | custom-endpoint-demo-09 | +-------------------------+