Aurora Serverless v2 및 프로비저닝된 클러스터와 Aurora Serverless v1 클러스터에 대한 Amazon RDS Data API 동작 비교
Amazon RDS Data API의 최신 개선 사항을 통해 최신 버전의 PostgreSQL 또는 MySQL 엔진을 사용하는 클러스터에서도 Data API를 사용할 수 있습니다. 이러한 클러스터는 db.r6g
또는 db.r6i
등의 프로비저닝된 인스턴스 클래스나 Aurora Serverless v2를 사용하도록 구성할 수 있습니다.
다음 섹션에는 Aurora Serverless v2 및 프로비저닝된 DB 클러스터와 Aurora Serverless v1 DB 클러스터 간의 Amazon RDS Data API에 대한 차이점이 나와 있습니다. Aurora Serverless v1 DB 클러스터는 serverless
엔진 모드를 사용합니다. 프로비저닝 DB 클러스터는 provisioned
엔진 모드를 사용합니다. 또한 Aurora Serverless v2 DB 클러스터는 provisioned
엔진 모드를 사용하며, db.serverless
인스턴스 클래스와 함께 하나 이상의 Aurora Serverless v2 DB 인스턴스를 포함합니다.
초당 최대 요청 수
Aurora Serverless v1
Data API는 초당 최대 1,000개의 요청을 생성할 수 있습니다.
Aurora Serverless v2
Data API는 초당 무제한의 요청을 생성할 수 있습니다.
기존 데이터베이스에서 Amazon RDS Data API 활성화 또는 비활성화
Aurora Serverless v1
-
Amazon RDS API의 경우 –
ModifyCluster
작업을 사용하고EnableHttpEndpoint
파라미터에 대해True
또는False
(해당하는 경우)를 지정합니다. -
AWS CLI의 경우 –
--enable-http-endpoint
또는--no-enable-http-endpoint
(해당하는 경우) 옵션과 함께modify-db-cluster
작업을 사용합니다.
Aurora Serverless v2
-
Amazon RDS API 사용 -
EnableHttpEndpoint
및DisableHttpEndpoint
작업을 사용합니다. -
AWS CLI의 경우:
enable-http-endpoint
및disable-http-endpoint
작업을 사용합니다.
CloudTrail 이벤트
Aurora Serverless v1
데이터 API 호출의 이벤트는 관리 이벤트입니다. 이러한 이벤트는 기본적으로 추적에 자동으로 포함됩니다. 자세한 내용은 AWS CloudTrail 추적에서 데이터 API 이벤트 제외(Aurora Serverless v1 전용) 섹션을 참조하세요.
Aurora Serverless v2
데이터 API 호출의 이벤트는 데이터 이벤트입니다. 이러한 이벤트는 기본적으로 추적에서 자동으로 제외됩니다. 자세한 내용은 AWS CloudTrail 추적에서 데이터 API 이벤트 포함 섹션을 참조하세요.
다중 문 지원
Aurora Serverless v1
-
Aurora MySQL의 경우 다중 문이 지원되지 않습니다.
-
Aurora PostgreSQL의 경우 다중 문은 첫 번째 쿼리 응답만 반환합니다.
Aurora Serverless v2
다중 문은 지원되지 않습니다. 단일 API 직접 호출에서 다중 문을 실행하려고 하면 “An error occurred (ValidationException) when calling the ExecuteStatement operation: Multistatements aren't supported.”
가 발생합니다. 다중 문을 실행하려면 별도의 ExecuteStatement
API 직접 호출을 사용하거나 배치 처리를 위해 BatchExecuteStatement
를 사용합니다.
다음 예제에서는 다중 문 실행을 시도하는 API 직접 호출의 결과로 표시되는 오류 메시지를 보여 줍니다.
aws rds-data execute-statement \ --resource-arn "arn:aws:rds:region:account:cluster:cluster-name" \ --secret-arn "arn:aws:secretsmanager:region:account:secret:secret-name" \ --database "your_database" \ --sql "SELECT * FROM your_table; Select * FROM next_table; "An error occurred (ValidationException) when calling the ExecuteStatement operation: Multistatements aren't supported.
다음 예제에서는 별도의 ExecuteStatement
API 직접 호출을 사용하여 여러 문을 실행합니다.
aws rds-data execute-statement \ --resource-arn "arn:aws:rds:region:account:cluster:cluster-name" \ --secret-arn "arn:aws:secretsmanager:region:account:secret:secret-name" \ --database "your_database" \ --sql "SELECT * FROM your_table;" aws rds-data execute-statement \ --resource-arn "arn:aws:rds:region:account:cluster:cluster-name" \ --secret-arn "arn:aws:secretsmanager:region:account:secret:secret-name" \ --database "your_database" \ --sql "SELECT * FROM next_table;"
동일한 트랜잭션 ID에 대한 동시 요청
Aurora Serverless v1
후속 요청은 현재 요청이 완료될 때까지 대기합니다. 대기 기간이 너무 길면 애플리케이션에서 제한 시간 초과 오류를 처리해야 합니다.
Aurora Serverless v2
Data API가 동일한 트랜잭션 ID로 여러 요청을 수신하면 즉시 다음 오류를 반환합니다.
DatabaseErrorException: Transaction is still running a query
이 오류는 다음의 두 가지 상황에서 발생합니다.
-
애플리케이션은 동일한 트랜잭션 ID를 사용하여 비동기식 요청(예: JavaScript promise)을 수행합니다.
-
해당 트랜잭션 ID의 이전 요청은 여전히 처리 중입니다.
다음 예제는 promise.all()
과 병렬로 실행되는 모든 요청을 보여 줍니다.
const api_calls = []; for (let i = 0; i < 10; i++) { api_calls.push( client.send( new ExecuteStatementCommand({ ...params, sql: `insert into table_name values (i);`, transactionId }) ) ); } await Promise.all(api_calls);
이 오류를 해결하려면 동일한 트랜잭션 ID로 다른 요청을 보내기 전에 현재 요청이 완료될 때까지 기다리거나 병렬 요청을 허용하도록 트랜잭션 ID를 제거합니다.
다음 예제에서는 동일한 트랜잭션 ID로 순차적 실행을 사용하는 API 직접 호출을 보여 줍니다.
for (let i = 0; i < 10; i++) { await client.send( new ExecuteStatementCommand({ ...params, sql: `insert into table_name values (i);`, transactionId }) ).promise() ); }
BatchExecuteStatement 동작
BatchExecuteStatement
에 대한 자세한 내용은 BatchExecuteStatement를 참조하세요.
Aurora Serverless v1
업데이트 결과에서 생성된 필드 객체에는 삽입된 값이 포함됩니다.
Aurora Serverless v2
-
Aurora MySQL의 경우 업데이트 결과에 생성된 필드 객체에는 삽입된 값이 포함됩니다.
-
Aurora PostgreSQL에서 생성된 필드 객체는 비어 있습니다.
ExecuteSQL 동작
ExecuteSQL
에 대한 자세한 내용은 ExecuteSQL을 참조하세요.
Aurora Serverless v1
ExecuteSQL
작업은 더 이상 사용되지 않습니다.
Aurora Serverless v2
ExecuteSQL
작업은 지원되지 않습니다.
ExecuteStatement 동작
ExecuteStatement
에 대한 자세한 내용은 ExecuteStatement를 참조하세요.
Aurora Serverless v1
ExecuteStatement
파라미터는 다차원 배열 열 및 모든 고급 데이터 유형 검색을 지원합니다.
Aurora Serverless v2
ExecuteStatement
파라미터는 다차원 배열 열을 지원하지 않습니다. 또한 지오메트리 및 통화 유형을 포함한 특정 PostgreSQL 데이터 형식을 지원하지 않습니다. Data API가 지원되지 않는 데이터 유형을 발견하면 UnsupportedResultException: The result contains the unsupported data type data_type
오류를 반환합니다.
이 문제를 해결하려면 지원되지 않는 데이터 유형을 TEXT
로 캐스팅합니다. 다음 예제에서는 지원되지 않는 데이터 형식을 TEXT
로 캐스팅합니다.
SELECT custom_type::TEXT FROM my_table;-- ORSELECT CAST(custom_type AS TEXT) FROM my_table;
각 Aurora 데이터베이스 엔진에 지원되는 데이터 유형 목록은 Data API 작업 참조를 참조하세요.
스키마 파라미터 동작
Aurora Serverless v1
Schema
파라미터는 지원되지 않습니다. API 직접 호출에 Schema
파라미터를 포함하면 Data API는 파라미터를 무시합니다.
Aurora Serverless v2
Schema
파라미터는 이제 사용되지 않습니다. API 직접 호출에 Schema
파라미터를 포함하면 Data API는 ValidationException: The schema parameter isn't supported
오류를 반환합니다. 다음 예제에서는 ValidationException
오류를 반환하는 Data API 직접 호출을 보여 줍니다.
aws rds-data execute-statement \ --resource-arn "arn:aws:rds:region:account:cluster:cluster-name" \ --secret-arn "arn:aws:secretsmanager:region:account:secret:secret-name" \ --database "your_database" \ --schema "your_schema" \ --sql "SELECT * FROM your_table LIMIT 10"
이 문제를 해결하려면 API 직접 호출에서 Schema
파라미터를 제거합니다.
다음 예제에서는 Schema
파라미터가 제거된 Data API 직접 호출을 보여 줍니다.
aws rds-data execute-statement \ --resource-arn "arn:aws:rds:region:account:cluster:cluster-name" \ --secret-arn "arn:aws:secretsmanager:region:account:secret:secret-name" \ --database "your_database" \ --sql "SELECT * FROM your_table LIMIT 10"