Schema Registry 시작하기 - AWS Glue

Schema Registry 시작하기

다음 섹션은 Schema Registry를 설정하고 사용하는 방법에 대한 개요 및 설명입니다. Schema Registry 개념 및 구성 요소에 대한 자세한 내용은 AWS Glue Schema Registry 섹션을 참조하세요.

SerDe 라이브러리 설치

참고

전제 조건: 다음 단계를 완료하기 전에 Amazon Managed Streaming for Apache Kafka(Amazon MSK) 또는 Apache Kafka 클러스터가 실행 중이어야 합니다. 생산자와 소비자는 Java 8 이상에서 실행 중이어야 합니다.

SerDe 라이브러리는 데이터 직렬화 및 역직렬화를 위한 프레임워크를 제공합니다.

데이터를 생성하는 애플리케이션("serializer"로 통칭)을 위한 오픈 소스 serializer를 설치합니다. Serializer는 직렬화, 압축 및 Schema Registry와의 상호 작용을 처리합니다. Serializer는 Amazon MSK와 같은 Schema Registry 호환 대상에 기록되는 레코드에서 스키마를 자동으로 추출합니다. 마찬가지로 데이터를 사용하는 애플리케이션에 오픈 소스 deserializer를 설치합니다.

생산자와 소비자에 라이브러리를 설치하려면

  1. 생산자와 소비자의 pom.xml 파일 내에서 아래 코드를 통해 이 종속성을 추가합니다.

    <dependency> <groupId>software.amazon.glue</groupId> <artifactId>schema-registry-serde</artifactId> <version>1.1.5</version> </dependency>

    또는 AWS Glue Schema Registry Github 리포지토리를 복제할 수 있습니다.

  2. 다음 필수 속성으로 생산자를 설정합니다.

    props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName()); // Can replace StringSerializer.class.getName()) with any other key serializer that you may use props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, GlueSchemaRegistryKafkaSerializer.class.getName()); props.put(AWSSchemaRegistryConstants.AWS_REGION, "us-east-2"); properties.put(AWSSchemaRegistryConstants.DATA_FORMAT, "JSON"); // OR "AVRO"

    기존 스키마가 없으면 자동 등록을 설정해야 합니다(다음 단계). 적용하려는 스키마가 있는 경우 "my-schema"를 스키마 이름으로 바꿉니다. 또한 스키마 자동 등록이 꺼져 있는 경우 "registry-name"을 제공해야 합니다. 스키마가 "default-registry" 아래에 생성된 경우 레지스트리 이름을 생략할 수 있습니다.

  3. (선택 사항) 이러한 선택적 생산자 속성을 설정합니다. 자세한 속성 설명은 ReadMe 파일을 참조하세요.

    props.put(AWSSchemaRegistryConstants.SCHEMA_AUTO_REGISTRATION_SETTING, "true"); // If not passed, uses "false" props.put(AWSSchemaRegistryConstants.SCHEMA_NAME, "my-schema"); // If not passed, uses transport name (topic name in case of Kafka, or stream name in case of Kinesis Data Streams) props.put(AWSSchemaRegistryConstants.REGISTRY_NAME, "my-registry"); // If not passed, uses "default-registry" props.put(AWSSchemaRegistryConstants.CACHE_TIME_TO_LIVE_MILLIS, "86400000"); // If not passed, uses 86400000 (24 Hours) props.put(AWSSchemaRegistryConstants.CACHE_SIZE, "10"); // default value is 200 props.put(AWSSchemaRegistryConstants.COMPATIBILITY_SETTING, Compatibility.FULL); // Pass a compatibility mode. If not passed, uses Compatibility.BACKWARD props.put(AWSSchemaRegistryConstants.DESCRIPTION, "This registry is used for several purposes."); // If not passed, constructs a description props.put(AWSSchemaRegistryConstants.COMPRESSION_TYPE, AWSSchemaRegistryConstants.COMPRESSION.ZLIB); // If not passed, records are sent uncompressed

    자동 등록은 기본 레지스트리("default-registry") 아래에 스키마 버전을 등록합니다. 이전 단계에서 SCHEMA_NAME을 지정하지 않으면 주제 이름이 SCHEMA_NAME으로 유추됩니다.

    호환성 모드에 대한 자세한 내용은 스키마 버전 관리 및 호환성 섹션을 참조하세요.

  4. 다음 필수 속성으로 소비자를 설정합니다.

    props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName()); props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, GlueSchemaRegistryKafkaDeserializer.class.getName()); props.put(AWSSchemaRegistryConstants.AWS_REGION, "us-east-2"); // Pass an AWS 리전 props.put(AWSSchemaRegistryConstants.AVRO_RECORD_TYPE, AvroRecordType.GENERIC_RECORD.getName()); // Only required for AVRO data format
  5. (선택 사항) 이러한 선택적 소비자 속성을 설정합니다. 자세한 속성 설명은 ReadMe 파일을 참조하세요.

    properties.put(AWSSchemaRegistryConstants.CACHE_TIME_TO_LIVE_MILLIS, "86400000"); // If not passed, uses 86400000 props.put(AWSSchemaRegistryConstants.CACHE_SIZE, "10"); // default value is 200 props.put(AWSSchemaRegistryConstants.SECONDARY_DESERIALIZER, "com.amazonaws.services.schemaregistry.deserializers.external.ThirdPartyDeserializer"); // For migration fall back scenario

AWS Glue Schema Registry API에 AWS CLI 사용

AWS Glue Schema Registry API에 AWS CLI를 사용하려면 AWS CLI를 최신 버전으로 업데이트해야 합니다.

레지스트리 생성

기본 레지스트리를 사용하거나 AWS Glue API 또는 AWS Glue 콘솔을 사용하여 필요한 만큼 새 레지스트리를 생성할 수 있습니다.

AWS Glue API

다음 단계를 사용하여 AWS Glue API로 이 태스크를 수행할 수 있습니다.

새 레지스트리를 추가하려면 CreateRegistry 작업(Python: create_registry) API를 사용합니다. 생성할 레지스트리의 이름으로 RegistryName을 지정합니다. 최대 길이는 255이며 문자, 숫자, 하이픈, 밑줄, 달러 기호 또는 해시 표시만 포함합니다.

URI 주소 여러 줄 문자열 패턴과 일치하는 2,048바이트 이하의 문자열로 Description을 지정합니다.

선택적으로 키-값 페어의 맵 배열로 레지스트리에 대해 하나 이상의 Tags를 지정합니다.

aws glue create-registry --registry-name registryName1 --description description

레지스트리가 생성되면 API 응답의 RegistryArn에서 볼 수 있는 Amazon 리소스 이름(ARN)이 할당됩니다. 이제 레지스트리를 생성했으므로 해당 레지스트리에 대해 하나 이상의 스키마를 생성합니다.

AWS Glue 콘솔

AWS Glue 콘솔에서 새 레지스트리를 추가하려면

  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/glue/에서 AWS Glue 콘솔을 엽니다.

  2. 탐색 창의 [데이터 카탈로그(Data catalog)]에서 [스키마 레지스트리(Schema registries)]를 선택합니다.

  3. [레지스트리 추가(Add registry)]를 선택합니다.

  4. 문자, 숫자, 하이픈 또는 밑줄로 구성된 레지스트리의 [레지스트리 이름(Registry name)]을 입력합니다. 이 이름은 변경할 수 없습니다.

  5. 레지스트리에 대한 [설명(Description)](선택 사항)을 입력합니다.

  6. 선택적으로 레지스트리에 하나 이상의 태그를 적용합니다. [새 태그 추가(Add new tag)]를 선택하고 [태그 키(Tag key)]와 [태그 값(Tag value)](선택 사항)을 지정합니다.

  7. [레지스트리 추가(Add registry)]를 선택합니다.


			레지스트리 생성의 예.

레지스트리가 생성되면 [스키마 레지스트리(Schema registries)]의 목록에서 레지스트리를 선택하여 볼 수 있는 Amazon 리소스 이름(ARN)이 할당됩니다. 이제 레지스트리를 생성했으므로 해당 레지스트리에 대해 하나 이상의 스키마를 생성합니다.

JSON에 대한 특정 레코드(JAVA POJO) 처리

POJO(Plain Old Java Object)를 사용하고 객체를 레코드로 전달할 수 있습니다. 이는 AVRO에서 특정 레코드의 개념과 유사합니다. mbknor-jackson-jsonschema는 전달된 POJO에 대한 JSON 스키마를 생성할 수 있습니다. 이 라이브러리는 JSON 스키마에 추가 정보를 삽입할 수도 있습니다.

AWS Glue Schema Registry 라이브러리는 스키마에 삽입된 "className" 필드를 사용하여 완전히 분류된 클래스 이름을 제공합니다. "className" 필드는 deserializer에서 해당 클래스의 객체로 역직렬화하는 데 사용됩니다.

Example class : @JsonSchemaDescription("This is a car") @JsonSchemaTitle("Simple Car Schema") @Builder @AllArgsConstructor @EqualsAndHashCode // Fully qualified class name to be added to an additionally injected property // called className for deserializer to determine which class to deserialize // the bytes into @JsonSchemaInject( strings = {@JsonSchemaString(path = "className", value = "com.amazonaws.services.schemaregistry.integrationtests.generators.Car")} ) // List of annotations to help infer JSON Schema are defined by https://github.com/mbknor/mbknor-jackson-jsonSchema public class Car { @JsonProperty(required = true) private String make; @JsonProperty(required = true) private String model; @JsonSchemaDefault("true") @JsonProperty public boolean used; @JsonSchemaInject(ints = {@JsonSchemaInt(path = "multipleOf", value = 1000)}) @Max(200000) @JsonProperty private int miles; @Min(2000) @JsonProperty private int year; @JsonProperty private Date purchaseDate; @JsonProperty @JsonFormat(shape = JsonFormat.Shape.NUMBER) private Date listedDate; @JsonProperty private String[] owners; @JsonProperty private Collection<Float> serviceChecks; // Empty constructor is required by Jackson to deserialize bytes // into an Object of this class public Car() {} }

스키마 생성

AWS Glue API 또는 AWS Glue 콘솔을 사용하여 스키마를 생성할 수 있습니다.

AWS Glue API

다음 단계를 사용하여 AWS Glue API로 이 태스크를 수행할 수 있습니다.

새 스키마를 추가하려면 CreateSchema 작업(Python: create_schema) API를 사용합니다.

스키마에 대한 레지스트리를 나타내려면 RegistryId 구조를 지정합니다. 또는 기본 레지스트리를 사용하려면 RegistryId를 생략합니다.

문자, 숫자, 하이픈, 밑줄로 구성된 SchemaName을 지정하고 DataFormatAVRO 또는 JSON으로 지정합니다. DataFormat은 스키마에 한 번 설정되면 변경할 수 없습니다.

Compatibility 모드를 지정합니다.

  • [뒤로(권장)(Backward (recommended))] - 소비자가 현재 버전과 이전 버전을 모두 읽을 수 있습니다.

  • [모두 뒤로(Backward all)] - 소비자가 현재 및 모든 이전 버전을 읽을 수 있습니다.

  • [앞으로(Forward)] - 소비자가 현재 및 후속 버전을 모두 읽을 수 있습니다.

  • [모두 앞으로(Forward all)] - 소비자가 현재 버전과 모든 후속 버전을 읽을 수 있습니다.

  • [전체(Full)] - 뒤로 및 앞으로의 조합입니다.

  • [모두 전체(Full all)] - 모두 뒤로 및 모두 앞으로의 조합입니다.

  • [없음(None)] - 호환성 확인이 수행되지 않습니다.

  • [사용 중지됨(Disabled)] - 이 스키마에 대한 버전 관리를 방지합니다.

선택적으로 스키마에 Tags를 지정합니다.

Avro, JSON 또는 Protobuf 데이터 포맷으로 스키마를 정의하려면 SchemaDefinition을(를) 지정합니다. 예제를 참조하세요.

Avro 데이터 포맷의 경우:

aws glue create-schema --registry-id RegistryName="registryName1" --schema-name testschema --compatibility NONE --data-format AVRO --schema-definition "{\"type\": \"record\", \"name\": \"r1\", \"fields\": [ {\"name\": \"f1\", \"type\": \"int\"}, {\"name\": \"f2\", \"type\": \"string\"} ]}"
aws glue create-schema --registry-id RegistryArn="arn:aws:glue:us-east-2:901234567890:registry/registryName1" --schema-name testschema --compatibility NONE --data-format AVRO --schema-definition "{\"type\": \"record\", \"name\": \"r1\", \"fields\": [ {\"name\": \"f1\", \"type\": \"int\"}, {\"name\": \"f2\", \"type\": \"string\"} ]}"

JSON 데이터 포맷의 경우:

aws glue create-schema --registry-id RegistryName="registryName" --schema-name testSchemaJson --compatibility NONE --data-format JSON --schema-definition "{\"$schema\": \"http://json-schema.org/draft-07/schema#\",\"type\":\"object\",\"properties\":{\"f1\":{\"type\":\"string\"}}}"
aws glue create-schema --registry-id RegistryArn="arn:aws:glue:us-east-2:901234567890:registry/registryName" --schema-name testSchemaJson --compatibility NONE --data-format JSON --schema-definition "{\"$schema\": \"http://json-schema.org/draft-07/schema#\",\"type\":\"object\",\"properties\":{\"f1\":{\"type\":\"string\"}}}"

Protobuf 데이터 형식의 경우:

aws glue create-schema --registry-id RegistryName="registryName" --schema-name testSchemaProtobuf --compatibility NONE --data-format PROTOBUF --schema-definition "syntax = \"proto2\";package org.test;message Basic { optional int32 basic = 1;}"
aws glue create-schema --registry-id RegistryArn="arn:aws:glue:us-east-2:901234567890:registry/registryName" --schema-name testSchemaProtobuf --compatibility NONE --data-format PROTOBUF --schema-definition "syntax = \"proto2\";package org.test;message Basic { optional int32 basic = 1;}"
AWS Glue 콘솔

AWS Glue 콘솔을 사용하여 새 스키마를 추가하려면

  1. AWS Management Console에 로그인하여 AWS Glue 콘솔을 https://console.aws.amazon.com/glue/에서 엽니다.

  2. 탐색 창의 [데이터 카탈로그(Data catalog)]에서 [스키마(Schemas)]를 선택합니다.

  3. [스키마 추가(Add schema)]를 선택합니다.

  4. 문자, 숫자, 하이픈, 밑줄, 달러 기호 또는 해시마크로 구성된 [스키마 이름(Schema name)]을 입력합니다. 이 이름은 변경할 수 없습니다.

  5. 드롭다운 메뉴에서 스키마가 저장될 [레지스트리(Registry)]를 선택합니다. 상위 레지스트리는 생성 후에 변경할 수 없습니다.

  6. [데이터 포맷(Data format)]을 [Apache Avro] 또는 [JSON]으로 둡니다. 이 포맷은 이 스키마의 모든 버전에 적용됩니다.

  7. [호환성 모드(Compatibility mode)]를 선택합니다.

    • [뒤로(권장)(Backward (recommended))] - 수신자가 현재 버전과 이전 버전을 모두 읽을 수 있습니다.

    • [모두 뒤로(Backward All)] - 수신자가 현재 및 모든 이전 버전을 읽을 수 있습니다.

    • [앞으로(Forward)] - 발신자가 현재 버전과 이전 버전을 모두 쓸 수 있습니다.

    • [모두 앞으로(Forward All)] - 발신자가 현재 버전과 모든 이전 버전을 모두 쓸 수 있습니다.

    • [전체(Full)] - 뒤로 및 앞으로의 조합입니다.

    • [모두 전체(Full All)] - 모두 뒤로 및 모두 앞으로의 조합입니다.

    • [없음(None)] - 호환성 확인이 수행되지 않습니다.

    • [사용 중지됨(Disabled)] - 이 스키마에 대한 버전 관리를 방지합니다.

  8. 최대 250자의 레지스트리에 대한 선택적 [설명(Description)]을 입력합니다.

    
			스키마 생성의 예.
  9. 선택적으로 스키마에 하나 이상의 태그를 적용합니다. [새 태그 추가(Add new tag)]를 선택하고 [태그 키(Tag key)]와 [태그 값(Tag value)](선택 사항)을 지정합니다.

  10. [첫 번째 스키마 버전(First schema version)] 상자에 초기 스키마를 입력하거나 붙여넣습니다.

    Avro 포맷은 Avro 데이터 포맷 작업 섹션을 참조하세요.

    JSON 포맷은 JSON 데이터 포맷 작업 섹션을 참조하세요.

  11. 선택적으로 [메타데이터 추가(Add metadata)]를 선택하여 스키마 버전에 주석을 달거나 분류할 버전 메타데이터를 추가합니다.

  12. [스키마 및 버전 생성(Create schema and version)]을 선택합니다.


			스키마 생성의 예.

스키마가 생성되고 [스키마(Schemas)] 아래의 목록에 나타납니다.

Avro 데이터 포맷 작업

Avro는 데이터 직렬화 및 데이터 교환 서비스를 제공합니다. Avro는 데이터 정의를 JSON 포맷으로 저장하므로 읽고 해석하기 쉽습니다. 데이터 자체는 바이너리 포맷으로 저장됩니다.

Apache Avro 스키마 정의에 대한 자세한 내용은 Apache Avro 사양을 참조하세요.

JSON 데이터 포맷 작업

데이터는 JSON 포맷으로 직렬화 할 수 있습니다. JSON 스키마 포맷은 JSON 스키마 포맷의 표준을 정의합니다.

스키마 또는 레지스트리 업데이트

생성되면 스키마, 스키마 버전 또는 레지스트리를 편집할 수 있습니다.

레지스트리 업데이트

AWS Glue API 또는 AWS Glue 콘솔을 사용하여 레지스트리를 업데이트할 수 있습니다. 기존 레지스트리의 이름은 편집할 수 없습니다. 레지스트리에 대한 설명을 편집할 수 있습니다.

AWS Glue API

기존 레지스트리를 업데이트하려면UpdateRegistry 작업(Python: update_registry) API를 사용합니다.

업데이트할 레지스트리를 나타내는 RegistryId 구조를 지정합니다. 레지스트리에 대한 설명을 변경하려면 Description을 전달합니다.

aws glue update-registry --description updatedDescription --registry-id RegistryArn="arn:aws:glue:us-east-2:901234567890:registry/registryName1"
AWS Glue 콘솔

AWS Glue 콘솔을 사용하여 레지스트리를 업데이트하려면

  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/glue/에서 AWS Glue 콘솔을 엽니다.

  2. 탐색 창의 [데이터 카탈로그(Data catalog)]에서 [스키마 레지스트리(Schema registries)]를 선택합니다.

  3. 해당 확인란을 선택하여 레지스트리 목록에서 레지스트리를 선택합니다.

  4. [작업(Action)] 메뉴에서 [레지스트리 편집(Edit registry)]을 선택합니다.

스키마 업데이트

스키마에 대한 설명 또는 호환성 설정을 업데이트할 수 있습니다.

기존 스키마를 업데이트하려면UpdateSchema 작업(Python: update_schema) API를 사용합니다.

업데이트할 스키마를 나타내는 SchemaId 구조를 지정합니다. VersionNumber 또는 Compatibility 중 하나가 제공되어야 합니다.

코드 예제 11:

aws glue update-schema --description testDescription --schema-id SchemaName="testSchema1",RegistryName="registryName1" --schema-version-number LatestVersion=true --compatibility NONE
aws glue update-schema --description testDescription --schema-id SchemaArn="arn:aws:glue:us-east-2:901234567890:schema/registryName1/testSchema1" --schema-version-number LatestVersion=true --compatibility NONE

스키마 버전 추가

스키마 버전을 추가할 때 버전을 비교하여 새 스키마가 허용되는지 확인해야 합니다.

기존 스키마에 새 버전을 추가하려면 RegisterSchemaVersion 작업(Python: register_schema_version) API를 사용합니다.

버전을 추가하려는 스키마를 나타내려면 SchemaId 구조를 지정하고 스키마를 정의하려면 SchemaDefinition을 지정합니다.

코드 예제 12:

aws glue register-schema-version --schema-definition "{\"type\": \"record\", \"name\": \"r1\", \"fields\": [ {\"name\": \"f1\", \"type\": \"int\"}, {\"name\": \"f2\", \"type\": \"string\"} ]}" --schema-id SchemaArn="arn:aws:glue:us-east-1:901234567890:schema/registryName/testschema"
aws glue register-schema-version --schema-definition "{\"type\": \"record\", \"name\": \"r1\", \"fields\": [ {\"name\": \"f1\", \"type\": \"int\"}, {\"name\": \"f2\", \"type\": \"string\"} ]}" --schema-id SchemaName="testschema",RegistryName="testregistry"
  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/glue/에서 AWS Glue 콘솔을 엽니다.

  2. 탐색 창의 [데이터 카탈로그(Data catalog)]에서 [스키마(Schemas)]를 선택합니다.

  3. 해당 확인란을 선택하여 스키마 목록에서 스키마를 선택합니다.

  4. 확인란을 선택하여 목록에서 하나 이상의 스키마를 선택합니다.

  5. [작업(Action)] 메뉴에서 [새 버전 등록(Register new version)]을 선택합니다.

  6. [새 버전(New version)] 상자에 새 스키마를 입력하거나 붙여 넣습니다.

  7. [이전 버전과 비교(Compare with previous version)]를 선택하여 이전 스키마 버전과의 차이점을 확인합니다.

  8. 선택적으로 [메타데이터 추가(Add metadata)]를 선택하여 스키마 버전에 주석을 달거나 분류할 버전 메타데이터를 추가합니다. [키(Key)]와 [값(Value)](선택 사항)을 입력합니다.

  9. [버전 등록(Register version)]을 선택합니다.


			스키마 버전 추가

스키마 버전이 버전 목록에 나타납니다. 버전이 호환 모드를 변경한 경우 버전이 체크포인트로 표시됩니다.

스키마 버전 비교의 예

[이전 버전과 비교(Compare with previous version)]를 선택하면 이전 버전과 새 버전이 함께 표시됩니다. 변경된 정보는 다음과 같이 강조 표시됩니다.

  • 노란색: 변경된 정보를 나타냅니다.

  • 녹색: 최신 버전에 추가된 내용을 나타냅니다.

  • 빨간색: 최신 버전에서 제거된 콘텐츠를 나타냅니다.

이전 버전과 비교할 수도 있습니다.


			스키마 버전 비교의 예입니다.

스키마 또는 레지스트리 삭제

스키마, 스키마 버전 또는 레지스트리 삭제는 취소할 수 없는 영구적인 작업입니다.

스키마 삭제

AWS Management Console 또는 DeleteSchema 작업(Python: delete_schema) API를 사용하여 레지스트리 내에서 더 이상 사용되지 않는 스키마를 삭제할 수 있습니다.

하나 이상의 스키마 삭제는 실행 취소할 수 없는 영구 작업입니다. 스키마가 이제 필요 없는지 확인합니다.

레지스트리에서 스키마를 삭제하려면 DeleteSchema 작업(Python: delete_schema) API를 호출하여 스키마를 식별하는 SchemaId 구조를 지정합니다.

예:

aws glue delete-schema --schema-id SchemaArn="arn:aws:glue:us-east-2:901234567890:schema/registryName1/schemaname"
aws glue delete-schema --schema-id SchemaName="TestSchema6-deleteschemabyname",RegistryName="default-registry"
AWS Glue 콘솔

AWS Glue 콘솔에서 스키마를 삭제하려면

  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/glue/에서 AWS Glue 콘솔을 엽니다.

  2. 탐색 창의 [데이터 카탈로그(Data catalog)]에서 [스키마 레지스트리(Schema registries)]를 선택합니다.

  3. 레지스트리 목록에서 스키마가 포함된 레지스트리를 선택합니다.

  4. 확인란을 선택하여 목록에서 하나 이상의 스키마를 선택합니다.

  5. [작업(Action)] 메뉴에서 [스키마 삭제(Delete schema)]를 선택합니다.

  6. 필드에 Delete 텍스트를 입력하여 삭제를 확인합니다.

  7. 삭제(Delete)를 선택합니다.

지정한 스키마가 레지스트리에서 삭제됩니다.

스키마 버전 삭제

스키마가 레지스트리에 누적되면 AWS Management Console 또는 DeleteSchemaVersions 작업(Python: delete_schema_versions) API를 사용하여 원치 않는 스키마 버전을 삭제할 수 있습니다. 하나 이상의 스키마 버전 삭제는 실행 취소할 수 없는 영구 작업입니다. 스키마 버전이 이제 필요 없는지 확인합니다.

스키마 버전을 삭제할 때 다음 제약 조건에 유의합니다.

  • 체크포인트된 버전은 삭제할 수 없습니다.

  • 연속 버전의 범위는 25개를 초과할 수 없습니다.

  • 최신 스키마 버전은 보류 상태가 아니어야 합니다.

SchemaId 구조를 지정하여 스키마를 식별하고 Versions를 삭제할 버전 범위로 지정합니다. 버전 또는 버전 범위 지정에 대한 자세한 내용은 DeleteRegistry 작업(Python: delete_registry) 섹션을 참조하세요. 지정한 스키마 버전이 레지스트리에서 삭제됩니다.

이 호출 후 ListSchemaVersions 작업(Python: list_schema_versions) API를 호출하면 삭제된 버전의 상태가 나열됩니다.

예:

aws glue delete-schema-versions --schema-id SchemaName="TestSchema6",RegistryName="default-registry" --versions "1-1"
aws glue delete-schema-versions --schema-id SchemaArn="arn:aws:glue:us-east-2:901234567890:schema/default-registry/TestSchema6-NON-Existent" --versions "1-1"
  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/glue/에서 AWS Glue 콘솔을 엽니다.

  2. 탐색 창의 [데이터 카탈로그(Data catalog)]에서 [스키마 레지스트리(Schema registries)]를 선택합니다.

  3. 레지스트리 목록에서 스키마가 포함된 레지스트리를 선택합니다.

  4. 확인란을 선택하여 목록에서 하나 이상의 스키마를 선택합니다.

  5. [작업(Action)] 메뉴에서 [스키마 삭제(Delete schema)]를 선택합니다.

  6. 필드에 Delete 텍스트를 입력하여 삭제를 확인합니다.

  7. 삭제(Delete)를 선택합니다.

지정한 스키마 버전이 레지스트리에서 삭제됩니다.

레지스트리 삭제

포함된 스키마가 해당 레지스트리 아래에 더 이상 구성되지 않아야 하는 경우 레지스트리를 삭제할 수 있습니다. 이러한 스키마를 다른 레지스트리에 재할당해야 합니다.

하나 이상의 레지스트리 삭제는 실행 취소할 수 없는 영구 작업입니다. 레지스트리가 이제 필요 없는지 확인합니다.

AWS CLI를 사용하여 기본 레지스트리를 삭제할 수 있습니다.

AWS Glue API

스키마와 모든 해당 버전을 포함한 전체 레지스트리를 삭제하려면 DeleteRegistry 작업(Python: delete_registry) API를 호출합니다. RegistryId 구조를 지정하여 레지스트리를 식별합니다.

예:

aws glue delete-registry --registry-id RegistryArn="arn:aws:glue:us-east-2:901234567890:registry/registryName1"
aws glue delete-registry --registry-id RegistryName="TestRegistry-deletebyname"

삭제 작업의 상태를 얻으려면 비동기 호출 후 GetRegistry API를 호출할 수 있습니다.

AWS Glue 콘솔

AWS Glue 콘솔에서 레지스트리를 삭제하려면

  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/glue/에서 AWS Glue 콘솔을 엽니다.

  2. 탐색 창의 [데이터 카탈로그(Data catalog)]에서 [스키마 레지스트리(Schema registries)]를 선택합니다.

  3. 확인란을 선택하여 목록에서 레지스트리를 선택합니다.

  4. [작업(Action)] 메뉴에서 [레지스트리 삭제(Delete registry)]를 선택합니다.

  5. 필드에 Delete 텍스트를 입력하여 삭제를 확인합니다.

  6. 삭제(Delete)를 선택합니다.

선택한 레지스트리가 AWS Glue에서 삭제됩니다.

Serializer에 대한 IAM 예

참고

AWS 관리형 정책은 일반 사용 사례에서 필요한 권한을 부여합니다. 관리형 정책으로 스키마 레지스트리 관리에 대한 자세한 내용은 AWS Glue에 대한 AWS 관리형(미리 정의된) 정책 섹션을 참조하세요.

Serializer의 경우 지정된 스키마 정의에 대해 schemaVersionId를 찾는 기능을 제공하려면 아래와 유사한 최소 정책을 만들어야 합니다. 레지스트리의 스키마를 읽으려면 레지스트리에 대한 읽기 권한이 있어야 합니다. Resource 절을 사용하여 읽을 수 있는 레지스트리를 제한할 수 있습니다.

코드 예제 13:

{ "Sid" : "GetSchemaByDefinition", "Effect" : "Allow", "Action" : [ "glue:GetSchemaByDefinition" ], "Resource" : ["arn:aws:glue:us-east-2:012345678:registry/registryname-1", "arn:aws:glue:us-east-2:012345678:schema/registryname-1/schemaname-1", "arn:aws:glue:us-east-2:012345678:schema/registryname-1/schemaname-2" ] }

또한 다음과 같은 추가 메서드를 포함하여 생산자가 새 스키마 및 버전을 생성하도록 허용할 수도 있습니다. 참고로 레지스트리 내부의 스키마를 추가/제거/발전시키기 위해 레지스트리를 검사할 수 있어야 합니다. Resource 절을 사용하여 검사할 수 있는 레지스트리를 제한할 수 있습니다.

코드 예제 14:

{ "Sid" : "RegisterSchemaWithMetadata", "Effect" : "Allow", "Action" : [ "glue:GetSchemaByDefinition", "glue:CreateSchema", "glue:RegisterSchemaVersion", "glue:PutSchemaVersionMetadata", ], "Resource" : ["arn:aws:glue:aws-region:123456789012:registry/registryname-1", "arn:aws:glue:aws-region:123456789012:schema/registryname-1/schemaname-1", "arn:aws:glue:aws-region:123456789012:schema/registryname-1/schemaname-2" ] }

Deserializer에 대한 IAM 예

Deserializer(소비자 측)의 경우 deserializer가 역직렬화를 위해 Schema Registry에서 스키마를 가져올 수 있도록 아래와 유사한 정책을 생성해야 합니다. 참고로 레지스트리 내부의 스키마를 가져오기 위해 레지스트리를 검사할 수 있어야 합니다.

코드 예제 15:

{ "Sid" : "GetSchemaVersion", "Effect" : "Allow", "Action" : [ "glue:GetSchemaVersion" ], "Resource" : ["*"] }

AWS PrivateLink를 사용한 프라이빗 연결

AWS PrivateLink를 사용하여 AWS Glue에 대한 인터페이스 VPC 엔드포인트를 정의하여 데이터 생산자의 VPC를 AWS Glue에 연결할 수 있습니다. VPC 엔드포인트를 사용하는 경우 VPC와 AWS Glue 사이의 통신은 모두 AWS 네트워크에서 수행됩니다. 자세한 내용은 VPC 엔드포인트와 함께 AWS Glue 사용을 참조하세요.

Amazon CloudWatch 지표에 액세스

Amazon CloudWatch 지표는 CloudWatch 프리 티어의 일부로 제공됩니다. CloudWatch 콘솔에서 이러한 지표에 액세스할 수 있습니다. API 수준 지표에는 CreateSchema(성공 및 대기 시간), GetSchemaByDefinition, (성공 및 대기 시간), GetSchemaVersion(성공 및 대기 시간), RegisterSchemaVersion(성공 및 대기 시간), PutSchemaVersionMetadata(성공 및 대기 시간)가 포함됩니다. 리소스 수준 지표에는 Registry.ThrottledByLimit, SchemaVersion.ThrottledByLimit, SchemaVersion.Size가 포함됩니다.

Schema Registry용 샘플 AWS CloudFormation 템플릿

다음은 AWS CloudFormation에서 Schema Registry 리소스를 생성하기 위한 샘플 템플릿입니다. 계정에 이 스택을 생성하려면 위 템플릿을 파일 SampleTemplate.yaml에 복사하고 다음 명령을 실행합니다.

aws cloudformation create-stack --stack-name ABCSchemaRegistryStack --template-body "'cat SampleTemplate.yaml'"

이 예에서는 AWS::Glue::Registry를 사용하여 레지스트리를 생성하고, AWS::Glue::Schema를 사용하여 스키마를 생성하고, AWS::Glue::SchemaVersion을 사용하여 스키마 버전을 생성하고, AWS::Glue::SchemaVersionMetadata를 사용하여 스키마 버전 메타데이터를 채웁니다.

Description: "A sample CloudFormation template for creating Schema Registry resources." Resources: ABCRegistry: Type: "AWS::Glue::Registry" Properties: Name: "ABCSchemaRegistry" Description: "ABC Corp. Schema Registry" Tags: - Key: "Project" Value: "Foo" ABCSchema: Type: "AWS::Glue::Schema" Properties: Registry: Arn: !Ref ABCRegistry Name: "TestSchema" Compatibility: "NONE" DataFormat: "AVRO" SchemaDefinition: > {"namespace":"foo.avro","type":"record","name":"user","fields":[{"name":"name","type":"string"},{"name":"favorite_number","type":"int"}]} Tags: - Key: "Project" Value: "Foo" SecondSchemaVersion: Type: "AWS::Glue::SchemaVersion" Properties: Schema: SchemaArn: !Ref ABCSchema SchemaDefinition: > {"namespace":"foo.avro","type":"record","name":"user","fields":[{"name":"status","type":"string", "default":"ON"}, {"name":"name","type":"string"},{"name":"favorite_number","type":"int"}]} FirstSchemaVersionMetadata: Type: "AWS::Glue::SchemaVersionMetadata" Properties: SchemaVersionId: !GetAtt ABCSchema.InitialSchemaVersionId Key: "Application" Value: "Kinesis" SecondSchemaVersionMetadata: Type: "AWS::Glue::SchemaVersionMetadata" Properties: SchemaVersionId: !Ref SecondSchemaVersion Key: "Application" Value: "Kinesis"