RDS 내부 검사 - AWS AppSync

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

RDS 내부 검사

AWS AppSync는 기존 관계형 데이터베이스에서 API를 쉽게 구축할 수 있습니다. 내부 검사 유틸리티는 데이터베이스 테이블에서 모델을 검색하고 GraphQL 유형을 제안할 수 있습니다. AWS AppSync 콘솔의 API 생성 마법사는 Aurora MySQL 또는 PostgreSQL 데이터베이스에서 API를 즉시 생성할 수 있습니다. 데이터를 읽고 쓸 수 있는 유형과 JavaScript 해석기를 자동으로 생성합니다.

AWS AppSync는 Amazon RDS 데이터 API를 통한 Amazon Aurora 데이터베이스와의 직접 통합을 제공합니다. Amazon RDS Data API는 지속적인 데이터베이스 연결을 요구하는 대신 SQL 문 실행을 위해 AWS AppSync가 연결하는 안전한 HTTP 엔드포인트를 제공합니다. 이를 사용하여 Aurora에서 MySQL 및 PostgreSQL 워크로드를 위한 관계형 데이터베이스 API를 생성할 수 있습니다.

AWS AppSync로 관계형 데이터베이스용 API를 구축하면 다음과 같은 몇 가지 이점이 있습니다.

  • 데이터베이스는 액세스 포인트를 데이터베이스 자체에서 분리하므로 클라이언트에 직접 노출되지 않습니다.

  • 다양한 애플리케이션의 요구 사항에 맞게 특별히 구축된 API를 구축할 수 있으므로 프런트엔드에서 사용자 지정 비즈니스 로직이 필요하지 않습니다. 이는 Backend-For-Frontend(BFF) 패턴과 일치합니다.

  • 다양한 권한 부여 모드를 사용하여 AWS AppSync 계층에서 권한 부여 및 액세스 제어를 구현하여 액세스를 제어할 수 있습니다. 웹 서버 호스팅 또는 프록시 연결과 같이 데이터베이스에 연결하는 데 추가 컴퓨팅 리소스가 필요하지 않습니다.

  • 구독을 통해 실시간 기능을 추가할 수 있으며, AppSync를 통해 이루어진 데이터 변경은 연결된 클라이언트에 자동으로 푸시됩니다.

  • 클라이언트는 443과 같은 일반 포트를 사용하여 HTTPS를 통해 API에 연결할 수 있습니다.

AWS AppSync는 기존 관계형 데이터베이스에서 API를 쉽게 구축할 수 있습니다. 내부 검사 유틸리티는 데이터베이스 테이블에서 모델을 검색하고 GraphQL 유형을 제안할 수 있습니다. AWS AppSync 콘솔의 API 생성 마법사는 Aurora MySQL 또는 PostgreSQL 데이터베이스에서 API를 즉시 생성할 수 있습니다. 데이터를 읽고 쓸 수 있는 유형과 JavaScript 해석기를 자동으로 생성합니다.

AWS AppSync는 해석기에서 SQL 문 작성을 단순화하는 통합 JavaScript 유틸리티를 제공합니다. 동적 값이 있는 정적 문에는 AWS AppSync의 sql 태그 템플릿을 사용하거나 프로그래밍 방식으로 문을 작성하는 데 rds 모듈 유틸리티를 사용할 수 있습니다. 자세한 내용은 RDS용 해석기 함수 참조 데이터 소스 및 내장 모듈 섹션을 참조하십시오.

내부 검사 기능 사용(콘솔)

자세한 자습서 및 시작하기 안내서는 자습서: 데이터 API를 사용하는 Aurora PostgreSQL Serverless 섹션을 참조하십시오.

AWS AppSync 콘솔을 사용하면 데이터 API로 구성된 기존 Aurora 데이터베이스에서 단 몇 분 만에 AWS AppSync GraphQL API를 생성할 수 있습니다. 그러면 데이터베이스 구성을 기반으로 운영 스키마가 빠르게 생성됩니다. API를 있는 그대로 사용하거나 API를 기반으로 기능을 추가할 수 있습니다.

  1. AWS Management Console에 로그인한 다음 AppSync 콘솔을 엽니다.

    1. 대시보드에서 API 생성을 선택합니다.

  2. API 옵션에서 GraphQL API를 선택하고 Amazon Aurora 클러스터로 시작을 누른 다음 다음을 선택합니다.

    1. API 이름을 입력합니다. 이는 콘솔에서 API의 식별자로 사용됩니다.

    2. 연락처 세부 정보에는 API 관리자를 식별할 연락처를 입력하면 됩니다. 이 필드는 선택 사항입니다.

    3. 프라이빗 API 구성에서 프라이빗 API 기능을 활성화할 수 있습니다. 프라이빗 API는 구성된 VPC 엔드포인트(VPCE)에서만 액세스할 수 있습니다. 자세한 내용은 프라이빗 API를 참조하세요.

      이 예에서는 이 기능을 활성화하지 않는 것이 좋습니다. 입력 내용을 검토한 후 다음을 선택합니다.

  3. 데이터베이스 페이지에서 데이터베이스 선택을 선택합니다.

    1. 클러스터에서 데이터베이스를 선택해야 합니다. 첫 번째 단계는 클러스터가 있는 리전을 선택하는 것입니다.

    2. 드롭다운 목록에서 Aurora 클러스터를 선택합니다. 리소스를 사용하기 전에 해당 데이터 API를 생성하고 활성화해야 합니다.

    3. 다음으로 데이터베이스에 대한 보안 인증을 서비스에 추가해야 합니다. 이는 주로 AWS Secrets Manager를 사용하여 수행됩니다. 암호가 존재하는 리전을 선택합니다. 암호 정보를 검색하는 방법에 대한 자세한 내용은 보안 암호 찾기 또는 보안 암호 검색을 참조하십시오.

    4. 드롭다운 목록에서 암호를 추가합니다. 단, 사용자에게 데이터베이스에 대한 읽기 권한이 있어야 합니다.

  4. 가져오기를 선택합니다.

    AWS AppSync는 데이터베이스 검사를 시작하여 테이블, 열, 프라이머리 키, 색인을 검색합니다. 검색된 테이블이 GraphQL API에서 지원될 수 있는지 확인합니다. 새 행 생성을 지원하려면 테이블에 여러 열을 사용할 수 있는 프라이머리 키가 필요합니다. AWS AppSync가 다음과 같이 테이블 열을 유형 필드에 매핑합니다.

    데이터 유형 필드 유형
    VARCHAR String
    CHAR String
    BINARY String
    VARBINARY String
    TINYBLOB String
    TINYTEXT String
    TEXT String
    BLOB String
    MEDIUMTEXT String
    MEDIUMBLOB String
    LONGTEXT String
    LONGBLOB String
    BOOL Boolean
    BOOLEAN Boolean
    BIT Int
    TINYINT Int
    SMALLINT Int
    MEDIUMINT Int
    INT Int
    INTEGER Int
    BIGINT Int
    YEAR Int
    FLOAT Float
    DOUBLE Float
    DECIMAL Float
    DEC Float
    NUMERIC Float
    DATE AWSDate
    TIMESTAMP String
    DATETIME String
    TIME AWSTime
    JSON AWSJson
    ENUM ENUM
  5. 테이블 검색이 완료되면 데이터베이스 섹션에 사용자 정보가 채워집니다. 새 데이터베이스 테이블 섹션에서 테이블의 데이터가 이미 채워져 스키마의 유형으로 변환되었을 수 있습니다. 필수 데이터 중 일부가 보이지 않는 경우 테이블 추가를 선택하고 나타나는 모달에서 해당 유형의 확인란을 클릭한 다음 추가를 선택하여 해당 데이터를 확인할 수 있습니다.

    데이터베이스 테이블 섹션에서 유형을 제거하려면 제거하려는 유형 옆의 확인란을 클릭한 다음 제거를 선택합니다. 제거된 유형은 나중에 다시 추가하려는 경우 테이블 추가 모달에 배치됩니다.

    참고로 AWS AppSync는 테이블 이름을 유형 이름으로 사용하지만 이름을 바꿀 수 있습니다. 예를 들어 movies와 같은 복수형 테이블 이름을 Movie라는 유형 이름으로 변경할 수 있습니다. 데이터베이스 테이블 섹션에서 유형의 이름을 바꾸려면 이름을 바꾸려는 유형의 확인란을 클릭한 다음 유형 이름 열에서 연필 아이콘을 클릭합니다.

    선택에 따라 스키마의 내용을 미리 보려면 스키마 미리 보기를 선택합니다. 이 스키마는 비워 둘 수 없으므로 한 개 이상의 테이블을 유형으로 변환해야 합니다. 또한 이 스키마의 크기는 1MB를 초과할 수 없습니다.

    1. 서비스 역할에서 이 가져오기를 위한 새 서비스 역할을 만들지 아니면 기존 역할을 사용할지를 선택합니다.

  6. 다음을 선택합니다.

  7. 그런 다음 읽기 전용 API(쿼리만 해당)를 만들지 아니면 데이터 읽기 및 쓰기를 위한 API(쿼리 및 변형 해당)를 만들지 선택합니다. 후자는 변형에 의해 트리거되는 실시간 구독도 지원합니다.

  8. 다음을 선택합니다.

  9. 선택 사항을 검토한 다음 API 생성을 선택합니다. AWS AppSync는 API를 생성하고 해석기를 쿼리와 변형에 연결합니다. 생성된 API는 완벽하게 작동하며 필요에 따라 확장할 수 있습니다.

내부 검사 기능 사용(API)

StartDataSourceIntrospection 내부 검사 API를 사용하여 데이터베이스에서 프로그래밍 방식으로 모델을 검색할 수 있습니다. 명령에 대한 자세한 내용은 StartDataSourceIntrospection API 사용 섹션을 참조하십시오.

StartDataSourceIntrospection을 사용하려면 Aurora 클러스터 Amazon 리소스 이름(ARN), 데이터베이스 이름 및 AWS Secrets Manager 암호 ARN을 입력합니다. 이 명령은 내부 검사 프로세스를 시작합니다. GetDataSourceIntrospection 명령을 사용하여 결과를 검색할 수 있습니다. 검색된 모델의 스토리지 정의 언어(SDL) 문자열을 명령으로 반환할지 여부를 지정할 수 있습니다. 이는 검색된 모델에서 직접 SDL 스키마 정의를 생성하는 데 유용합니다.

예를 들어, 단순 Todos 테이블에 다음과 같은 데이터 정의 언어(DDL) 문이 있는 경우

create table if not exists public.todos ( id serial constraint todos_pk primary key, description text, due timestamp, "createdAt" timestamp default now() );

내부 검사는 다음과 같이 시작합니다.

aws appsync start-data-source-introspection \ --rds-data-api-config resourceArn=<cluster-arn>,secretArn=<secret-arn>,databaseName=database

그런 다음 GetDataSourceIntrospection 명령을 사용하여 결과를 검색합니다.

aws appsync get-data-source-introspection \ --introspection-id a1234567-8910-abcd-efgh-identifier \ --include-models-sdl

그 결과 다음 결과를 반환합니다.

{ "introspectionId": "a1234567-8910-abcd-efgh-identifier", "introspectionStatus": "SUCCESS", "introspectionStatusDetail": null, "introspectionResult": { "models": [ { "name": "todos", "fields": [ { "name": "description", "type": { "kind": "Scalar", "name": "String", "type": null, "values": null }, "length": 0 }, { "name": "due", "type": { "kind": "Scalar", "name": "AWSDateTime", "type": null, "values": null }, "length": 0 }, { "name": "id", "type": { "kind": "NonNull", "name": null, "type": { "kind": "Scalar", "name": "Int", "type": null, "values": null }, "values": null }, "length": 0 }, { "name": "createdAt", "type": { "kind": "Scalar", "name": "AWSDateTime", "type": null, "values": null }, "length": 0 } ], "primaryKey": { "name": "PRIMARY_KEY", "fields": [ "id" ] }, "indexes": [], "sdl": "type todos\n{\ndescription: String\n\ndue: AWSDateTime\n\nid: Int!\n\ncreatedAt: AW SDateTime\n}\n" } ], "nextToken": null } }