Amazon RDS for Oracle을 Amazon S3와 통합할 때 발생하는 문제를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 10월 29일

Amazon Relational Database Service(Amazon RDS) for Oracle을 Amazon Simple Storage Service(Amazon S3)와 통합할 때 발생하는 문제와 오류를 해결하려고 합니다.

간략한 설명

Amazon RDS for Oracle DB 인스턴스와 Amazon S3 버킷 간에 파일을 전송할 때는 다음 사항을 확인합니다.

  • DB 인스턴스와 S3 버킷은 동일한 AWS 리전에 있습니다.
  • DB 인스턴스에는 S3 버킷에 필요한 액세스 권한이 있습니다.
  • DB 인스턴스는 S3_INTEGRATION 옵션이 포함된 옵션 그룹과 연결되어 있습니다.
  • Oracle 디렉터리 객체에서만 파일을 업로드하고 있습니다. 이 디렉터리는 사용자 생성 디렉터리 또는 DATA_PUMP_DIR 디렉터리일 수 있습니다.
  • 사용자 생성 디렉터리를 사용하는 경우 업로드 및 다운로드를 수행하는 사용자에게 디렉터리에 대해 필요한 읽기 및 쓰기 권한이 있어야 합니다. 자세한 내용은 원본 데이터베이스에서 사용자에게 권한 부여를 참조하세요.
  • 하위 디렉터리 내에서 데이터를 복사하는 경우 rdsadmin 패키지를 사용할 때 하위 디렉터리의 이름을 명시적으로 지정합니다. S3_INTEGRATION 옵션을 사용하여 하위 디렉터리를 복사할 수 없습니다.

해결 방법

DB 인스턴스에서 S3 버킷에 필요한 액세스 권한이 있는지 확인합니다.

DB 인스턴스에 S3에서 업로드 및 다운로드할 수 있는 최소 권한을 가진 AWS Identity and Access Management(IAM) 역할이 있는지 확인하려면 다음을 수행합니다.

  1. Amazon RDS 콘솔을 엽니다.
  2. 탐색 창에서 [데이터베이스(Databases)]를 선택합니다.
  3. 확인하려는 DB 인스턴스를 선택합니다.
  4. [연결 및 보안(Connectivity & security)] 탭을 선택합니다.
  5. [IAM 역할 관리(Manage IAM roles)] 섹션까지 아래로 스크롤하여 다음 권한을 가진 활성 IAM 역할이 있는지 확인합니다.
    S3:ListBucket
    S3:PutObject
    S3:GetObject

AWS Command Line Interface(AWS CLI) 명령 describe-db-instances를 사용하여 DB 인스턴스에 다음과 같은 최소 권한을 가진 IAM 역할이 있는지 확인할 수도 있습니다.

aws rds describe-db-instances \
--db-instance-identifier example-db-instance \
--query 'DBInstances[*].[AssociatedRoles[*]]'
참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우, 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

IAM 역할이 존재하는지 확인한 후 검색 결과에 따라 다음 중 하나를 수행합니다.

  • IAM 역할이 존재하지만 최소 권한이 없는 경우 이러한 권한을 포함하도록 역할을 수정합니다.
  • 필요한 권한을 가진 IAM 역할이 없는 경우 S3 버킷에서 Amazon RDS로 파일을 전송하는 데 필요한 권한으로 IAM 정책을 생성합니다. 자세한 내용은 Amazon RDS for Oracle을 Amazon S3와 통합하기 위한 사전 요구 사항을 참조하세요. IAM 정책을 생성할 때 버킷에 버킷 수준 권한을 추가하고 객체에 객체 수준 권한을 추가해야 합니다.

버킷 권한 문제가 계속 발생하면 S3 버킷에 대한 전체 액세스 권한을 부여하도록 IAM 역할을 수정합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::example-bucket/*",
                "arn:aws:s3:::example-bucket"
            ]
        }
    ]
}

중요: IAM 권한으로 인해 문제가 발생한 경우에만 테스트할 수 있는 전체 액세스 권한을 부여하도록 IAM 역할이 수정되었습니다. 문제가 해결된 후 필요에 따라 사용자 설정 권한을 조정합니다.

S3의 특정 폴더에 파일을 업로드하려면 rdsadmin.rdsadmin_s3_tasks.upload_to_s3프로시저에서 p_s3_prefix 파라미터를 사용합니다. 파일을 업로드하기 전에 필요한 권한이 있는지 확인합니다.

예를 들어 S3 bucket example-bucketexample-folder에 파일을 업로드하려면 다음 IAM 정책을 연결합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::example-bucket/example-folder/*"
            ]
        }
    ]
}

DB 인스턴스가 S3_INTEGRATION 옵션을 포함하는 옵션 그룹과 연결되어 있는지 확인합니다.

RDS DB 인스턴스에 연결된 옵션 그룹이 있는지 확인하려면 다음을 수행합니다.

  1. Amazon RDS 콘솔을 엽니다.
  2. 탐색 창에서 [데이터베이스(Databases)]를 선택합니다.
  3. 확인하려는 DB 인스턴스를 선택합니다.
  4. [구성(Configuration)] 탭을 선택합니다.
  5. 옵션 그룹 파라미터에 유의하세요.

이 옵션 그룹이 유효한 상태가 아니고 S3_INTEGRATION 옵션을 추가하려고 하면 옵션이 제대로 추가되지 않은 것입니다. 따라서 옵션 그룹이 유효한 상태인지 확인합니다.

이 옵션 그룹이 유효한 상태인지 확인하려면 다음 AWS CLI 명령을 실행합니다.

aws rds describe-db-instances \
--db-instance-identifier example-db-instance \
--query 'DBInstances[*].[OptionGroupMemberships[*]]'

옵션 그룹이 유효한 상태가 아닌 경우 데이터베이스에 대한 [로그 및 이벤트(Logs & events)] 탭을 선택한 다음 [최근 이벤트(Recent events)] 섹션으로 스크롤합니다. 옵션 그룹을 부적합하게 만드는 구성 요소를 식별하고 데이터베이스에서 이 구성 요소를 제거합니다.

옵션 그룹이 유효한 상태인 경우 S3_INTEGRATION 옵션이 옵션 그룹에 포함되어 있는지 확인합니다. 자세한 내용은 옵션 그룹에 대한 옵션 및 옵션 설정 나열을 참조하세요. S3_INTEGRATION 옵션이 옵션 그룹에 포함되어 있지 않은 경우 옵션을 추가합니다. 자세한 내용은 Amazon S3 통합 옵션 추가를 참조하세요.

참고: DB 인스턴스에 S3_통합 옵션을 추가하지 않으면 오류 ORA-00904: "RDSADMIN"."RDSADMIN_S3_TASKS"."UPLOAD_TO_S3": 잘못된 식별자”가 발생합니다. 이 오류는 업로드 및 다운로드에 필요한 절차가 DB 인스턴스에서 생성되지 않았음을 나타냅니다.

Amazon RDS에 S3_INTEGRATION 옵션을 추가해도 가동 중단 시간이 발생하지 않습니다. [즉시 적용(Apply Immediately)] 옵션을 사용하려는 경우 보류 중인 유지 관리 작업이 없는지 확인합니다. 보류 중인 작업이 있는 경우 해당 작업은 S3 통합과 함께 적용됩니다. 자세한 내용은 DB 인스턴스 유지 관리를 참조하세요.

사용자가 생성한 Oracle 디렉터리 객체 또는 DATA_PUMP_DIR 디렉터리에서만 파일을 업로드/다운로드하고 있는지 확인합니다.

데이터베이스 인스턴스에서 직접 S3 파일에 액세스할 수 없습니다. 이러한 파일에 액세스하려면 RDS 호스트의 디렉터리에 파일을 복사하여 액세스해야 합니다. DB 인스턴스에서 S3 버킷으로 파일을 업로드/다운로드하려면 다음을 수행합니다.

  1. Amazon RDS의 내보내기 파일을 S3로 복사하려면 DATA_DUMP_DIR 또는 사용자 지정 디렉터리에서 expdp 명령 또는 dbms_datapump API를 사용하여 덤프 파일을 생성해야 합니다. 그런 다음 rdsadmin.rdsadmin_s3_tasks.upload_to_s3 프로시저를 사용하여 파일을 S3에 업로드합니다. 이 프로시저의 파라미터 및 파일 업로드용 예제 쿼리에 대한 자세한 내용은 Oracle DB 인스턴스에서 Amazon S3 버킷으로 파일 업로드를 참조하세요.
  2. S3 버킷에서 DATA_PUMP_DIR 폴더 또는 사용자가 생성한 디렉터리로 파일을 다운로드하려면 rdsadmin. rdsadmin_s3_tasks.download_from_s3 프로시저를 사용합니다. 이 프로시저의 파라미터 및 다운로드 파일용 예제 쿼리에 대한 자세한 내용은 Amazon S3 버킷에서 Oracle DB 인스턴스까지 파일 다운로드를 참조하세요.

파일 전송 상태를 모니터링하려면 rdsadmin 패키지를 업로드하거나 다운로드하는 절차를 실행할 때 생성되는 로그를 확인합니다. 이러한 로그를 보려면 다음을 수행합니다.

  1. Amazon RDS 콘솔을 엽니다.
  2. 탐색 창에서 [데이터베이스(Databases)]를 선택합니다.
  3. 로그를 보려는 DB 인스턴스를 선택합니다.
  4. [로그 및 이벤트(Logs & events)] 탭을 선택합니다.
  5. [로그(Logs)] 섹션 아래의 검색 필터에서 프로시저로 반환한 작업 ID를 입력합니다.
  6. 반환된 파일을 선택합니다.
  7. 로그를 보려면 [보기(Watch)]를 선택합니다.
    -또는-
    로그를 다운로드하려면 [다운로드(Download)]를 선택합니다.

다음 명령을 실행하여 업로드/다운로드 프로세스 중에 생성된 로그 파일을 읽을 수도 있습니다.

SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-task-id.log'));

참고: task-id를 프로시저에서 반환한 작업 ID로 바꿔야 합니다.