RDS 프록시 문제 해결
다음에서 몇 가지 일반적인 RDS 프록시 문제에 대한 문제 해결 아이디어와 RDS 프록시에 대한 CloudWatch 로그에 대한 정보를 찾을 수 있습니다.
RDS 프록시 로그에서 각 항목에는 연결된 프록시 엔드포인트의 이름이 접두사로 붙습니다. 이 이름은 사용자 정의 엔드포인트에 지정한 이름일 수 있습니다. 아니면 읽기/쓰기 요청을 수행하는 프록시의 기본 엔드포인트에 대한 특수 이름(default
)일 수 있습니다. 프록시 엔드포인트에 대한 자세한 내용은 Amazon RDS 프록시 엔드포인트 작업 섹션을 참조하세요.
프록시에 대한 연결 확인
다음 명령을 사용하여 연결 내의 모든 구성 요소(예: 프록시, 데이터베이스, 컴퓨팅 인스턴스)가 서로 통신할 수 있는지 확인할 수 있습니다.
describe-db-proxies 명령을 사용하여 프록시 자체를 검사합니다. 또한 describe-db-proxy-target-groups 명령을 사용하여 연결된 대상 그룹을 검사합니다. 대상의 세부 정보가 프록시와 연결하려는 RDS DB 인스턴스와 일치하는지 확인합니다. 다음과 같은 명령을 사용합니다.
aws rds describe-db-proxies --db-proxy-name $DB_PROXY_NAME aws rds describe-db-proxy-target-groups --db-proxy-name $DB_PROXY_NAME
프록시가 기본 데이터베이스에 연결할 수 있는지 확인하려면 describe-db-proxy-targets 명령을 사용하여 대상 그룹에 지정된 대상을 검사합니다. 다음과 같은 명령을 사용합니다.
aws rds describe-db-proxy-targets --db-proxy-name $DB_PROXY_NAME
describe-db-proxy-targets 명령의 출력에는 TargetHealth
필드가 포함됩니다. State
내부의 Reason
, Description
및 TargetHealth
필드를 검사하여 프록시가 기본 DB 인스턴스와 통신할 수 있는지 확인할 수 있습니다.
-
프록시가 DB 인스턴스에 연결할 수 있는
State
의AVAILABLE
값입니다. -
State
의UNAVAILABLE
값은 임시 또는 영구 연결 문제를 나타냅니다. 이 경우Reason
및Description
필드를 검사합니다. 예를 들어Reason
의 값이PENDING_PROXY_CAPACITY
인 경우 프록시가 조정 작업을 완료한 후 다시 연결해 보십시오.Reason
의 값이UNREACHABLE
,CONNECTION_FAILED
또는AUTH_FAILURE
인 경우Description
필드의 설명을 사용하여 문제를 진단합니다. -
State
또는REGISTERING
로 변경하기 전에AVAILABLE
필드의 값이 잠시 동안UNAVAILABLE
일 수 있습니다.
다음 Netcat 명령(nc
)이 성공하면 로그인한 EC2 인스턴스 또는 다른 시스템에서 프록시 엔드포인트에 액세스할 수 있습니다. 이 명령은 프록시 및 연결된 데이터베이스와 동일한 VPC에 있지 않은 경우 실패를 보고합니다. 동일한 VPC에 있지 않아도 데이터베이스에 직접 로그인할 수 있습니다. 그러나 동일한 VPC에 있지 않으면 프록시에 로그인할 수는 없습니다.
nc -zx
MySQL_proxy_endpoint
3306 nc -zxPostgreSQL_proxy_endpoint
5432
다음 명령을 사용하여 EC2 인스턴스에 필수 속성이 있는지 확인할 수 있습니다. 특히 EC2 인스턴스의 VPC는 프록시가 연결하는 의 VPC와 동일해야 합니다.
aws ec2 describe-instances --instance-ids
your_ec2_instance_id
프록시에 사용되는 Secrets Manager 비밀을 검사합니다.
aws secretsmanager list-secrets aws secretsmanager get-secret-value --secret-id
your_secret_id
get-secret-value
에서 표시한 SecretString
필드가 username
및 password
필드를 포함하는 JSON 문자열로 인코딩되어 있는지 확인합니다. 다음 예제는 SecretString
필드의 형식을 보여 줍니다.
{
"ARN": "some_arn
",
"Name": "some_name
",
"VersionId": "some_version_id",
"SecretString": '{"username":"some_username","password":"some_password
"}',
"VersionStages": [ "some_stage
" ],
"CreatedDate": some_timestamp
}
일반적인 문제 및 해결 방법
이 섹션에서는 RDS 프록시를 사용할 때 발생하는 몇 가지 일반적인 문제와 잠재적 해결 방법에 대해 설명합니다.
aws rds describe-db-proxy-targets
CLI 명령을 실행한 후 TargetHealth
설명에 Proxy does not have any registered
credentials
라고 표시되면 다음을 확인하세요.
-
사용자가 프록시에 액세스할 수 있도록 등록된 보안 인증 정보가 있습니다.
-
프록시에서 사용하는 Secrets Manager 보안 암호에 액세스하는 IAM 역할은 유효합니다.
DB 프록시를 생성하거나 DB 프록시에 연결하는 동안 다음과 같은 RDS 이벤트가 발생할 수 있습니다.
범주 | RDS 이벤트 ID | 설명 |
---|---|---|
실패 |
RDS-EVENT-0243 | 서브넷에서 사용할 수 있는 IP 주소가 충분하지 않기 때문에 RDS가 프록시 용량을 프로비저닝할 수 없습니다. 이러한 문제를 해결하려면 서브넷에 최소한의 미사용 IP 주소가 있는지 확인합니다. 권장 인스턴스 클래스 수를 확인하려면 IP 주소 용량 계획 섹션을 참조하세요. |
실패 |
RDS-EVENT-0275 |
RDS가 DB 프록시 |
새 프록시를 생성하거나 프록시에 연결하는 동안 다음과 같은 문제가 발생할 수 있습니다.
오류 | 원인 또는 해결 방법 |
---|---|
|
새 IAM 역할을 생성하는 대신 기존 IAM 역할을 선택합니다. |
MySQL 프록시에 연결하는 동안 다음과 같은 문제가 발생할 수 있습니다.
오류 | 원인 또는 해결 방법 |
---|---|
ERROR 1040 (HY000): Connections rate limit exceeded (
|
클라이언트에서 프록시로의 연결 요청 속도가 제한을 초과했습니다. |
ERROR 1040 (HY000): IAM authentication rate limit exceeded
|
클라이언트에서 프록시로의 IAM 인증을 사용하는 동시 요청 수가 제한을 초과했습니다. |
ERROR 1040 (HY000): Number simultaneous connections exceeded (
|
클라이언트에서 프록시로의 동시 연결 요청 수가 제한을 초과했습니다. |
|
프록시에서 사용하는 Secrets Manager 비밀이 기존 데이터베이스 사용자의 사용자 이름 및 암호와 일치하지 않습니다. Secrets Manager 비밀의 자격 증명을 업데이트하거나 데이터베이스 사용자가 존재하고 비밀과 동일한 암호를 가지고 있는지 확인합니다. |
ERROR 1105 (HY000): Unknown error
|
알 수 없는 오류가 발생했습니다. |
ERROR 1231 (42000): Variable ''character_set_client'' can't be set to the value of
|
|
ERROR 3159 (HY000): This RDS Proxy requires TLS connections.
|
프록시에서 전송 계층 보안 필요 설정을 활성화했지만 연결에 MySQL 클라이언트의 파라미터
|
ERROR 2026 (HY000): SSL connection error: Internal Server
|
프록시에 대한 TLS 핸드셰이크가 실패했습니다. 몇 가지 가능한 이유는 다음과 같습니다.
|
ERROR 9501 (HY000): Timed-out waiting to acquire database connection
|
데이터베이스 연결을 얻기 위해 대기 중인 프록시 시간이 초과되었습니다. 몇 가지 가능한 이유는 다음과 같습니다.
|
PostgreSQL 프록시에 연결하는 동안 다음과 같은 문제가 발생할 수 있습니다.
오류 | 원인 | 솔루션 |
---|---|---|
|
사용자가 PostgreSQL 클라이언트에서 |
사용자는 PostgreSQL 클라이언트에서 |
|
이 역할에 대한 Secrets Manager 암호가 없습니다. |
이 역할에 대한 Secrets Manager 암호를 추가하세요. 자세한 내용은 RDS 프록시에 대한 AWS Identity and Access Management(IAM) 정책 설정 단원을 참조하십시오. |
|
프록시에 연결하는 데 사용되는 데이터베이스 클라이언트가 프록시에서 현재 지원하지 않는 인증 메커니즘을 사용하고 있습니다. |
IAM 인증을 사용하지 않는 경우 MD5 또는 SCRAM 암호 인증을 사용하세요. |
|
연결을 설정하려고 할 때 프록시에 연결하는 데 사용되는 데이터베이스 클라이언트가 사용자 이름을 전송하지 않습니다. |
선택한 PostgreSQL 클라이언트를 사용하여 프록시에 대한 연결을 설정할 때 사용자 이름을 정의해야 합니다. |
|
클라이언트가 IAM 인증을 사용하여 연결을 시도했지만 SSL이 활성화되지 않았습니다. |
PostgreSQL 클라이언트에서 SSL을 활성화하세요. |
|
사용자가 전송 계층 보안 필요 설정을 활성화했지만 PostgreSQL 클라이언트에서 |
이 오류를 해결하려면 다음 중 하나를 수행합니다.
|
|
이 오류는 다음과 같은 이유 때문일 수 있습니다.
|
이 오류를 해결하려면 다음을 수행하십시오.
|
|
이 역할의 암호가 Secrets Manager 암호와 일치하지 않습니다. |
Secrets Manager에서 이 역할의 암호를 확인하여 암호가 PostgreSQL 클라이언트에서 사용 중인 암호와 같은지 확인하세요. |
|
IAM 인증에 사용되는 IAM 토큰에 문제가 있습니다. |
새 인증 토큰을 생성하여 새 연결에 사용하세요. |
|
프록시에 연결하는 데 사용되는 PostgreSQL 클라이언트는 3.0보다 오래된 프로토콜을 사용합니다. |
3.0 메시징 프로토콜을 지원하는 최신 PostgreSQL 클라이언트를 사용하세요. PostgreSQL |
|
프록시에 연결하는 데 사용되는 PostgreSQL 클라이언트가 현재 RDS 프록시에서 지원되지 않는 스트리밍 복제 모드를 사용하려고 합니다. |
연결하는 데 사용되는 PostgreSQL 클라이언트에서 스트리밍 복제 모드를 해제하세요. |
|
시작 메시지를 통해 프록시에 연결하는 데 사용되는 PostgreSQL 클라이언트가 현재 RDS 프록시에서 지원되지 않는 옵션을 요청하고 있습니다. |
연결하는 데 사용되는 PostgreSQL 클라이언트에서 위의 메시지에서 지원되지 않는 것으로 표시되는 옵션을 해제하세요. |
|
클라이언트에서 프록시로의 IAM 인증을 사용하는 동시 요청 수가 제한을 초과했습니다. |
PostgreSQL 클라이언트에서 IAM 인증을 사용하는 연결이 설정되는 속도를 줄이세요. |
|
클라이언트에서 프록시로의 동시 연결 요청 수가 제한을 초과했습니다. |
PostgreSQL 클라이언트에서 이 RDS 프록시로의 활성 연결 수를 줄이세요. |
|
클라이언트에서 프록시로의 연결 요청 속도가 제한을 초과했습니다. |
PostgreSQL 클라이언트로부터의 연결이 설정되는 속도를 줄이세요. |
|
알 수 없는 오류가 발생했습니다. |
문제를 조사할 수 있도록 AWS Support에 문의해 주세요. |
|
데이터베이스 연결을 얻기 위해 대기 중인 프록시 시간이 초과되었습니다. 몇 가지 가능한 이유는 다음과 같습니다.
|
가능한 해결책은 다음과 같습니다.
|
|
프록시에서 설정된 데이터베이스 연결이 오류를 반환했습니다. |
솔루션은 특정 데이터베이스 오류에 따라 다릅니다. 예를 들면 다음과 같습니다. |