AWS CLI를 사용하여 Amazon RDS Data API 직접 호출
AWS CLI를 사용하여 RDS 데이터 API(데이터 API)를 호출할 수 있습니다.
다음 예제에서는 데이터 API용 AWS CLI를 사용합니다. 자세한 내용은 AWS CLI Data API 참조를 참조하세요.
각 예에서 DB 클러스터의 Amazon 리소스 이름(ARN)을 Aurora DB 클러스터의 ARN으로 바꿉니다. 또한 DB 클러스터에 대한 액세스를 허용하는 Secrets Manager의 보안 암호의 ARN으로 보안 암호 ARN을 바꿉니다.
참고
AWS CLI는 응답을 JSON 형식으로 지정할 수 있습니다.
SQL 트랜잭션 시작
aws rds-data
begin-transaction
CLI 명령을 사용하여 SQL 트랜잭션을 시작할 수 있습니다. 이 호출은 트랜잭션 식별자를 반환합니다.
중요
데이터 API 내에서 3분 안에 트랜잭션 ID를 사용하는 호출이 없는 경우 트랜잭션 시간이 초과됩니다. 트랜잭션이 커밋되기 전에 시간이 초과되면 데이터 API는 트랜잭션을 자동으로 롤백합니다.
트랜잭션 내의 MySQL 데이터 정의 언어(DDL) 문은 암시적 커밋을 발생시킵니다. execute-statement
옵션과 함께 별도의 --continue-after-timeout
명령으로 각 MySQL DDL 문을 실행하는 것이 좋습니다.
일반 옵션 외에도, 데이터베이스 이름을 제공하는 --database
옵션을 지정합니다.
예를 들어, 다음 CLI 명령은 SQL 트랜잭션을 시작합니다.
대상 LinuxmacOS, 또는Unix:
aws rds-data begin-transaction --resource-arn "
arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster
" \ --database "mydb
" --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret
"
Windows의 경우:
aws rds-data begin-transaction --resource-arn "
arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster
" ^ --database "mydb
" --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret
"
다음은 이 응답의 예입니다.
{
"transactionId": "ABC1234567890xyz
"
}
SQL 문 실행
aws rds-data execute-statement
CLI 명령을 사용하여 SQL 문을 실행할 수 있습니다.
--transaction-id
옵션으로 트랜잭션 식별자를 지정하여 트랜잭션에서 SQL 문을 실행할 수 있습니다. aws rds-data begin-transaction
CLI 명령을 사용하여 트랜잭션을 시작할 수 있습니다. aws rds-data
commit-transaction
CLI 명령을 사용하여 트랜잭션을 끝내고 커밋할 수 있습니다.
중요
--transaction-id
옵션을 지정하지 않으면 호출 결과가 자동으로 커밋됩니다.
일반 옵션 외에도 다음 옵션을 지정하십시오.
-
--sql
(필수) – DB 클러스터에서 실행할 SQL 문. -
--transaction-id
(선택 사항) –begin-transaction
CLI 명령을 사용하여 시작된 트랜잭션의 식별자. SQL 문을 포함할 트랜잭션의 트랜잭션 ID를 지정하십시오. -
--parameters
(선택 사항) – SQL 문의 파라미터. -
--include-result-metadata | --no-include-result-metadata
(선택 사항) – 메타데이터를 결과에 포함할지 나타내는 값. 기본값은--no-include-result-metadata
입니다. -
--database
(선택 사항) – 데이터베이스 이름.이전 요청에서
--sql "use
를 실행한 후 SQL 문을 실행하면database_name
;"--database
옵션이 작동하지 않을 수 있습니다.--sql "use
문을 실행하는 대신database_name
;"--database
옵션을 사용하는 것이 좋습니다. -
--continue-after-timeout | --no-continue-after-timeout
(선택 사항) - 호출이 데이터 API 시간 초과 간격인 45초를 초과한 후에도 문을 계속 실행할지 여부를 나타내는 값입니다. 기본값은--no-continue-after-timeout
입니다.데이터 정의 언어(DDL) 문에 대해서는 오류 및 데이터 구조 손상 가능성을 피하기 위해 호출 시간이 초과된 후 문을 계속 실행하는 것이 좋습니다.
-
--format-records-as "JSON"|"NONE"
- 결과 집합의 형식을 JSON 문자열로 지정할지를 결정하는 선택적 값입니다. 기본값은"NONE"
입니다. JSON 결과 집합 처리에 대한 사용 정보는 JSON 형식의 Amazon RDS Data API 쿼리 결과 처리 섹션을 참조하세요.
DB 클러스터는 각 호출에 대한 응답을 반환합니다.
참고
응답 크기 제한은 1MiB입니다. 호출이 1MiB를 초과하는 응답 데이터를 반환하면 호출이 종료됩니다.
Aurora Serverless v1의 경우 초당 최대 요청 수는 1,000개입니다. 지원되는 다른 모든 데이터베이스의 경우 제한이 없습니다.
예를 들어, 다음 CLI 명령은 단일 SQL 문을 실행하고 결과에서 메타데이터를 생략합니다(기본값).
대상 LinuxmacOS, 또는Unix:
aws rds-data execute-statement --resource-arn "
arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster
" \ --database "mydb
" --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret
" \ --sql "select * from mytable
"
Windows의 경우:
aws rds-data execute-statement --resource-arn "
arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster
" ^ --database "mydb
" --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret
" ^ --sql "select * from mytable
"
다음은 이 응답의 예입니다.
{
"numberOfRecordsUpdated": 0,
"records": [
[
{
"longValue": 1
},
{
"stringValue": "ValueOne
"
}
],
[
{
"longValue": 2
},
{
"stringValue": "ValueTwo
"
}
],
[
{
"longValue": 3
},
{
"stringValue": "ValueThree
"
}
]
]
}
다음 CLI 명령은 --transaction-id
옵션을 지정하여 트랜잭션에서 단일 SQL 문을 실행합니다.
대상 LinuxmacOS, 또는Unix:
aws rds-data execute-statement --resource-arn "
arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster
" \ --database "mydb
" --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret
" \ --sql "update mytable set quantity=5 where id=201
" --transaction-id "ABC1234567890xyz
"
Windows의 경우:
aws rds-data execute-statement --resource-arn "
arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster
" ^ --database "mydb
" --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret
" ^ --sql "update mytable set quantity=5 where id=201
" --transaction-id "ABC1234567890xyz
"
다음은 이 응답의 예입니다.
{
"numberOfRecordsUpdated": 1
}
다음 CLI 명령은 파라미터가 있는 단일 SQL 문을 실행합니다.
대상 LinuxmacOS, 또는Unix:
aws rds-data execute-statement --resource-arn "
arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster
" \ --database "mydb
" --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret
" \ --sql "insert intomytable
values (:id
,:val
)" --parameters "[{\"name\": \"id
\", \"value\": {\"longValue\":1
}},{\"name\": \"val
\", \"value\": {\"stringValue\": \"value1
\"}}]"
Windows의 경우:
aws rds-data execute-statement --resource-arn "
arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster
" ^ --database "mydb
" --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret
" ^ --sql "insert intomytable
values (:id
,:val
)" --parameters "[{\"name\": \"id
\", \"value\": {\"longValue\":1
}},{\"name\": \"val
\", \"value\": {\"stringValue\": \"value1
\"}}]"
다음은 이 응답의 예입니다.
{
"numberOfRecordsUpdated": 1
}
다음 CLI 명령은 데이터 정의 언어(DDL) SQL 문을 실행합니다. DDL 문은 job
열을 role
열로 이름을 바꿉니다.
중요
DDL 문에 대해서는 호출 시간이 초과된 후에도 문을 계속 실행하는 것이 좋습니다. DDL 문 실행이 끝나기 전에 종료되면 오류가 발생하고 데이터 구조가 손상될 수 있습니다. 호출이 RDS 데이터 API 시간 초과 간격인 45초를 초과한 후에도 문을 계속 실행하려면 --continue-after-timeout
옵션을 지정합니다.
대상 LinuxmacOS, 또는Unix:
aws rds-data execute-statement --resource-arn "
arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster
" \ --database "mydb
" --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret
" \ --sql "alter table mytable change column job role varchar(100)
" --continue-after-timeout
Windows의 경우:
aws rds-data execute-statement --resource-arn "
arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster
" ^ --database "mydb
" --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret
" ^ --sql "alter table mytable change column job role varchar(100)
" --continue-after-timeout
다음은 이 응답의 예입니다.
{
"generatedFields": [],
"numberOfRecordsUpdated": 0
}
참고
generatedFields
데이터는 Aurora PostgreSQL에서 지원하지 않습니다. 생성된 필드의 값을 가져오려면 RETURNING
절을 사용하십시오. 자세한 내용은 PostgreSQL 설명서의 수정된 행에서 데이터 반환
데이터 배열에서 일괄 SQL 문 실행
aws rds-data batch-execute-statement
CLI 명령을 사용하여 데이터 배열에 대해 일괄 SQL 문을 실행할 수 있습니다. 이 명령을 사용하여 일괄 가져오기 또는 업데이트 작업을 수행할 수 있습니다.
--transaction-id
옵션으로 트랜잭션 식별자를 지정하여 트랜잭션에서 SQL 문을 실행할 수 있습니다. aws rds-data
begin-transaction
CLI 명령을 사용하여 트랜잭션을 시작할 수 있습니다. aws rds-data commit-transaction
CLI 명령을 사용하여 트랜잭션을 종료하고 커밋할 수 있습니다.
중요
--transaction-id
옵션을 지정하지 않으면 호출 결과가 자동으로 커밋됩니다.
일반 옵션 외에도 다음 옵션을 지정하십시오.
-
--sql
(필수) – DB 클러스터에서 실행할 SQL 문.작은 정보
MySQL 호환 문의 경우
--sql
파라미터 끝에 세미콜론을 포함하지 마세요. 후행 세미콜론을 사용하면 구문 오류가 발생할 수 있습니다. -
--transaction-id
(선택 사항) –begin-transaction
CLI 명령을 사용하여 시작된 트랜잭션의 식별자. SQL 문을 포함할 트랜잭션의 트랜잭션 ID를 지정하십시오. -
--parameter-set
(선택 사항) – 일괄 처리를 위한 파라미터 집합. -
--database
(선택 사항) – 데이터베이스 이름.
DB 클러스터는 호출에 대한 응답을 반환합니다.
참고
파라미터 세트 수는 상한이 정해져 있지 않습니다. 그러나 데이터 API를 통해 전송된 HTTP 요청의 최대 크기는 4MiB입니다. 요청이 이 제한을 초과하면 데이터 API가 오류를 반환하고 요청을 처리하지 않습니다. 이 4MiB 제한에는 요청의 HTTP 헤더와 JSON 표기법의 크기가 포함됩니다. 따라서 포함할 수 있는 파라미터 세트의 수는 SQL 문의 크기 및 각 파라미터 세트의 크기와 같은 요인의 조합에 따라 달라집니다.
응답 크기 제한은 1MiB입니다. 호출이 1MiB를 초과하는 응답 데이터를 반환하면 호출이 종료됩니다.
Aurora Serverless v1의 경우 초당 최대 요청 수는 1,000개입니다. 지원되는 다른 모든 데이터베이스의 경우 제한이 없습니다.
예를 들어, 다음 CLI 명령은 파라미터 세트를 이용해 데이터 배열에 대해 배치 SQL 문을 실행합니다.
대상 LinuxmacOS, 또는Unix:
aws rds-data batch-execute-statement --resource-arn "
arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster
" \ --database "mydb
" --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret
" \ --sql "insert intomytable
values (:id
,:val
)" \ --parameter-sets "[[{\"name\": \"id
\", \"value\": {\"longValue\":1
}},{\"name\": \"val
\", \"value\": {\"stringValue\": \"ValueOne
\"}}], [{\"name\": \"id
\", \"value\": {\"longValue\":2
}},{\"name\": \"val
\", \"value\": {\"stringValue\": \"ValueTwo
\"}}], [{\"name\": \"id
\", \"value\": {\"longValue\":3
}},{\"name\": \"val
\", \"value\": {\"stringValue\": \"ValueThree
\"}}]]"
Windows의 경우:
aws rds-data batch-execute-statement --resource-arn "
arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster
" ^ --database "mydb
" --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret
" ^ --sql "insert intomytable
values (:id
,:val
)" ^ --parameter-sets "[[{\"name\": \"id
\", \"value\": {\"longValue\":1
}},{\"name\": \"val
\", \"value\": {\"stringValue\": \"ValueOne
\"}}], [{\"name\": \"id
\", \"value\": {\"longValue\":2
}},{\"name\": \"val
\", \"value\": {\"stringValue\": \"ValueTwo
\"}}], [{\"name\": \"id
\", \"value\": {\"longValue\":3
}},{\"name\": \"val
\", \"value\": {\"stringValue\": \"ValueThree
\"}}]]"
참고
--parameter-sets
옵션에 줄바꿈을 포함하지 마십시오.
SQL 트랜잭션 커밋
aws rds-data commit-transaction
CLI 명령을 사용하여 aws rds-data
begin-transaction
으로 시작한 SQL 트랜잭션을 종료하고 변경 사항을 커밋할 수 있습니다.
일반 옵션 외에 다음 옵션을 지정하십시오.
-
--transaction-id
(필수) –begin-transaction
CLI 명령을 사용하여 시작된 트랜잭션의 식별자. 종료하고 커밋할 트랜잭션의 트랜잭션 ID를 지정하십시오.
예를 들어 다음 CLI 명령은 SQL 트랜잭션을 끝내고 변경 내용을 커밋합니다.
대상 LinuxmacOS, 또는Unix:
aws rds-data commit-transaction --resource-arn "
arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster
" \ --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret
" \ --transaction-id "ABC1234567890xyz
"
Windows의 경우:
aws rds-data commit-transaction --resource-arn "
arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster
" ^ --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret
" ^ --transaction-id "ABC1234567890xyz
"
다음은 이 응답의 예입니다.
{
"transactionStatus": "Transaction Committed"
}
SQL 트랜잭션 롤백
aws rds-data rollback-transaction
CLI 명령을 사용하여 aws rds-data
begin-transaction
으로 시작한 SQL 트랜잭션을 롤백할 수 있습니다. 트랜잭션을 롤백하면 변경 내용이 취소됩니다.
중요
트랜잭션 ID가 만기되었다면 트랜잭션이 자동으로 롤백된 것입니다. 이 경우 만기된 트랜잭션 ID를 지정하는 aws rds-data rollback-transaction
명령이 오류를 반환합니다.
일반 옵션 외에 다음 옵션을 지정하십시오.
-
--transaction-id
(필수) –begin-transaction
CLI 명령을 사용하여 시작된 트랜잭션의 식별자. 롤백하려는 트랜잭션의 트랜잭션 ID를 지정하십시오.
예를 들어 다음 AWS CLI 명령은 SQL 트랜잭션을 롤백합니다.
대상 LinuxmacOS, 또는Unix:
aws rds-data rollback-transaction --resource-arn "
arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster
" \ --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret
" \ --transaction-id "ABC1234567890xyz
"
Windows의 경우:
aws rds-data rollback-transaction --resource-arn "
arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster
" ^ --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret
" ^ --transaction-id "ABC1234567890xyz
"
다음은 이 응답의 예입니다.
{
"transactionStatus": "Rollback Complete"
}