架构注册表入门 - Amazon连接词
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

架构注册表入门

以下章节概述和演示了如何设置和使用架构注册表。有关架构注册表概念和组件的信息,请参阅。Amazon Glue 架构注册表

安装 SerDe 库

注意

先决条件:在完成以下步骤之前,您需要运行 Apache Kafka (MSK) 或 Apache Kafka 集群的托管流。您的生产者和消费者需要在 Java 8 或更高版本上运行。

SerDE 库提供了一个用于序列化和反序列化数据的框架。

您将为生成数据的应用程序(统称为 “序列化器”)安装开源序列化器。序列化程序处理序列化、压缩以及与架构注册表的交互。序列化程序自动从正在写入到架构注册表兼容目标(如 Amazon MSK)的记录中提取架构。同样,您将在使用数据的应用程序上安装开源解序器。

在生产者和消费者上安装库:

  1. 在生产者和消费者的 pom.xml 文件中,通过下面的代码添加此依赖关系:

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

    或者,您也可以克隆Amazon Glue架构注册表 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, AWSKafkaAvroSerializer.class.getName()); props.put(AWSSchemaRegistryConstants.AWS_REGION, "us-east-2");

    如果没有现有模式,则需要打开自动注册(下一步)。如果您确实有一个要应用的模式,请将 “my-schema” 替换为您的模式名称。此外,如果模式自动注册处于关闭状态,则必须提供 “注册表名称”。如果模式是在 “默认注册表” 下创建的,则可以省略注册表名称。

  3. (可选)设置这些可选的创建器属性中的任何一个。有关详细属性说明,请参阅自述文件

    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

    自动注册会在默认注册表(“默认注册表”)下注册模式版本。如果SCHEMA_NAME未在上一步中指定,则主题名称被推断为SCHEMA_NAME

    请参阅架构版本控制和兼容性了解有关兼容模式的详细信息。

  4. 使用以下必需的属性设置您的消费者:

    props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName()); props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, AWSKafkaAvroDeserializer.class.getName()); props.put(AWSSchemaRegistryConstants.AWS_REGION, "us-east-2"); // Pass an AWS Region props.put(AWSSchemaRegistryConstants.AVRO_RECORD_TYPE, AvroRecordType.GENERIC_RECORD.getName());
  5. (可选)设置这些可选的使用者属性。有关详细属性说明,请参阅自述文件

    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 CLI 用于Amazon Glue架构注册表 API

将 AWS CLI 用于Amazon Glue架构注册 API,请确保将 AWS CLI 更新到最新版本。

创建注册表

您可以使用默认注册表或根据需要使用Amazon GlueAPI 或Amazon Glue控制台。

Amazon Glue API

您可以使用这些步骤来执行此任务,使用Amazon GlueAPI。

若要添加新注册表,请使用创建注册表操作 (Python: create_注册表)API。指定RegistryName作为要创建的注册表的名称,最大长度为 255,仅包含字母、数字、连字符、下划线、美元符号或哈希标记。

指定Description作为一个不超过 2048 个字节的字符串,与匹配。URI 地址多行字符串模式

(可选)指定一个或多个Tags作为键值对的映射数组。

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

当您的注册表创建器时,它会分配一个 Amazon 资源名称 (ARN),您可以在RegistryArn的 API 响应。现在您已创建注册表,请为该注册表创建一个或多个模式。

Amazon Glue 控制台

若要在Amazon Glue控制台:

  1. 登录 Amazon Web Services 管理控制台,然后打开Amazon Glue控制台https://console.aws.amazon.com/glue/

  2. 在导航窗格中的下数据目录中,选择架构注册表

  3. 选择添加注册表

  4. 输入注册表名称,由字母、数字、连字符或下划线组成。此名称不能更改。

  5. 输入说明(可选)为注册表。

  6. (可选)将一个或多个标签应用到您的注册表。选择添加新标签,指定标记密钥和可选的标签值

  7. 选择添加注册表


			创建注册表的示例。

创建注册表后,系统会为其分配一个 Amazon 资源名称 (ARN),您可以通过从架构注册表。现在您已创建注册表,请为该注册表创建一个或多个模式。

创建架构

您可以使用创建架构Amazon GlueAPI 或Amazon Glue控制台。

Amazon Glue API

您可以使用这些步骤来执行此任务,使用Amazon GlueAPI。

若要添加新架构,请使用CreateSchemate 操作 (Python: create_schema)API。

指定RegistryId结构来指示模式的注册表。或者,省略RegistryId以使用默认注册表。

指定SchemaName由字母、数字、连字符或下划线组成,以及DataFormat作为AVRO

指定Compatibility模式:

  • 向后(推荐)— 消费者可以同时读取当前版本和先前版本。

  • 向后全部— 消费者可以读取当前版本和所有以前版本。

  • Forward— 使用者可以读取当前版本和后续版本。

  • 全部转发— 使用者可以读取当前版本和所有后续版本。

  • FULL— 向后和向前的组合。

  • FULL— “向后全部” 和 “全部前进” 的组合。

  • — 不执行兼容性检查。

  • Disabled— 防止对此架构进行任何版本控制。

(可选)指定Tags的 Schema。

指定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\"} ]}"

Amazon Glue 控制台

若要使用Amazon Glue控制台:

  1. 登录 Amazon Web Services 管理控制台,然后打开Amazon Glue控制台https://console.aws.amazon.com/glue/

  2. 在导航窗格中的下数据目录中,选择Schemas

  3. 选择添加架构

  4. 输入架构名称,由字母、数字、连字符、下划线、美元符号或哈希标记组成。此名称不能更改。

  5. 选择注册表,其中将从下拉菜单中存储架构。无法在创建后更改父注册表。

  6. 离开数据格式作为Apache Avro。此格式适用于此架构的所有版本。

  7. 选择兼容性模式

    • 向后(推荐)― 接收器可以读取当前版本和先前版本。

    • 向后全部— 接收器可以读取当前和所有以前的版本.

    • Forward— 发件人可以同时写入当前版本和先前版本。

    • 全部转发— 发件人可以写入当前版本和所有以前版本。

    • FULL— 向后和向前的组合。

    • FULL― “全部向后” 和 “全部前进” 的组合。

    • ― 不执行兼容性检查。

    • Disabled― 防止对此架构进行任何版本控制。

  8. 输入可选说明,用于最多 250 个字符的注册表。

    
			创建架构的示例。
  9. (可选)将一个或多个标签应用到您的架构。选择添加新标签,指定标记密钥和可选的标签值

  10. 第一个架构版本框中,输入或粘贴初始 Apache Avro 模式。请参阅 使用 Avro 数据格式

  11. (可选) 选择添加元数据添加版本元数据以对架构版本进行注释或分类。

  12. 选择创建架构和版本


			创建架构的示例。

该架构将被创建并显示在Schemas

使用 Avro 数据格式

Avro 提供数据序列化和数据交换服务。Avro 以 JSON 格式存储数据定义,使其易于阅读和解释。数据本身以二进制格式存储。

有关定义 Apache Avro 模式的信息,请参阅Apache Avro 规格

更新架构或注册表

创建后,您可以编辑架构、架构版本或注册表。

更新注册表

您可以使用Amazon GlueAPI 或Amazon Glue控制台。无法编辑现有注册表的名称。您可以编辑注册表的描述。

Amazon Glue API

要更新现有的注册表,请使用UpdateTristCreateTimtes 操作 (Python: update_注册表)API。

指定RegistryId结构以指示要更新的注册表。传递Description,以更改注册表的描述。

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

Amazon Glue 控制台

若要使用Amazon Glue控制台:

  1. 登录 Amazon Web Services 管理控制台,然后打开Amazon Glue控制台https://console.aws.amazon.com/glue/

  2. 在导航窗格中的下数据目录中,选择架构注册表

  3. 从注册表列表中选择一个注册表,方法是选中该注册表的复选框。

  4. 操作菜单中,选择编辑注册表

更新架构

您可以更新架构的描述或兼容性设置。

要更新现有架构,请使用UpdateSchemate 操作 (Python: update_schema)API。

指定SchemaId结构以指示要更新的架构。必须提供 CompatibilityVersionNumber 中的一个。

代码示例 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

添加架构版本

添加架构版本时,需要比较版本以确保新架构被接受。

要向现有架构添加新版本,请使用开发创建器注册表架构操作 (Python: 注册机_schema _version)API。

指定SchemaId结构来指示要为其添加版本的架构,以及SchemaDefinition以定义 Avro 数据格式的架构。

代码示例 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. 登录 Amazon Web Services 管理控制台,然后打开Amazon Glue控制台https://console.aws.amazon.com/glue/

  2. 在导航窗格中的下数据目录中,选择Schemas

  3. 通过选中方案框,从方案列表中选择方案。

  4. 通过选中复选框,从列表中选择一个或多个方案。

  5. 操作菜单中,选择注册新版本

  6. 新版本框中,输入或粘贴新的 Apache Avro 模式。

  7. 选择与先前版本比较查看与先前架构版本的差异。

  8. (可选) 选择添加元数据添加版本元数据以对架构版本进行注释或分类。Enter密钥和可选

  9. 选择注册版本


			添加架构版本。

架构版本会显示在版本列表中。如果版本更改了兼容模式,则该版本将被标记为检查点。

模式版本比较示例

当您选择与先前版本比较,您将看到以前版本和新版本一起显示。更改的信息将突出显示如下:

  • 黄色:表示已更改的信息。

  • Green:表示在最新版本中添加的内容。

  • 红光:表示在最新版本中删除的内容。

您还可以与早期版本进行比较。


			模式版本比较示例。

删除架构或注册表

删除模式、模式版本或注册表是永久性操作,无法撤消。

删除架构

如果模式不再在注册表中使用,您可能希望使用 AWS 管理控制台或DeleteSchema sions 操作 (Python: delete_schema)API。

删除一个或多个架构是一项无法撤消的永久性操作。确保不再需要架构或架构。

要从注册表中删除架构,请调用DeleteSchema sions 操作 (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"

Amazon Glue 控制台

要从Amazon Glue控制台:

  1. 登录 Amazon Web Services 管理控制台,然后打开Amazon Glue控制台https://console.aws.amazon.com/glue/

  2. 在导航窗格中的下数据目录中,选择架构注册表

  3. 从注册表列表中选择包含模式的注册表。

  4. 通过选中复选框,从列表中选择一个或多个方案。

  5. 操作菜单中,选择删除架构

  6. 输入文本Delete,以确认删除。

  7. 选择 Delete (删除)

您指定的方案将从注册表中删除。

删除架构版本

随着模式在注册表中累积,您可能需要使用 AWS 管理控制台或Delete架构版本操作 (Python: delete_架构 _version)API。删除一个或多个架构版本是一项无法撤消的永久性操作。确保不再需要架构版本。

删除架构版本时,请注意以下约束:

  • 您无法删除检查点版本。

  • 连续版本的范围不能超过 25。

  • 最新架构版本不得处于待处理状态。

指定SchemaId结构来标识架构,并指定Versions作为要删除的版本范围。有关指定版本或版本范围的详细信息,请参阅。DeleteTristAction 操作 (Python: delete_注册表)。您指定的架构版本将从注册表中删除。

调用ListSchemma_version 操作 (Python: list_schema_version)此调用后的 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. 登录 Amazon Web Services 管理控制台,然后打开Amazon Glue控制台https://console.aws.amazon.com/glue/

  2. 在导航窗格中的下数据目录中,选择架构注册表

  3. 从注册表列表中选择包含模式的注册表。

  4. 通过选中复选框,从列表中选择一个或多个方案。

  5. 操作菜单中,选择删除架构

  6. 输入文本Delete,以确认删除。

  7. 选择 Delete (删除)

您指定的架构版本将从注册表中删除。

删除注册表

您可能希望删除注册表中包含的模式应该不再在该注册表下进行组织。您需要将这些架构重新分配给另一个注册表。

删除一个或多个注册表是一项无法撤消的永久性操作。确保不再需要注册表或注册表。

可以使用 AWS CLI 删除默认注册表。

Amazon Glue API

要删除整个注册表(包括架构及其所有版本),请调用DeleteTristAction 操作 (Python: delete_注册表)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"

要获取删除操作的状态,您可以调用GetRegistryAPI 在异步调用后。

Amazon Glue 控制台

若要删除注册表从Amazon Glue控制台:

  1. 登录 Amazon Web Services 管理控制台,然后打开Amazon Glue控制台https://console.aws.amazon.com/glue/

  2. 在导航窗格中的下数据目录中,选择架构注册表

  3. 通过选中一个复选框,从列表中选择一个注册表。

  4. 操作菜单中,选择删除注册表

  5. 输入文本Delete,以确认删除。

  6. 选择 Delete (删除)

您选择的注册表将从Amazon Glue。

IAM 示例,用于序列化程序

注意

AWS 托管策略授予针对常见使用案例的必要权限。有关使用托管策略管理模式注册表的信息,请参阅Amazon适用于 的 托管(预定义)策略Amazon连接词

对于序列化程序,您应该创建一个类似于下面的最小策略,以便您能够找到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: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" ] }

IAM 示例解序列化器

对于反序列化器(使用者端),您应创建类似于以下策略的策略,以允许反序列化程序从模式注册表中获取模式以进行反序列化。请注意,您应该能够检查注册表以获取其中的模式。您可以限制可以通过使用Resource子句。但是,如果需要访问所有注册管理机构,则可以通过为 ARN 的适当部分指定 “*” 来实现。

代码示例 15:

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

使用 AWS PrivateLink 的私有连接

通过为 AWS Glue 定义接口 VPC 终端节点,您可以使用 AWS PrivateLink 将数据创建者的 VPC 连接到 AWS Glue。当您使用 VPC 接口终端节点时,您的 VPC 与 AWS Glue 之间的通信完全在 AWS 网络内进行。有关更多信息,请参阅将 AWS Glue 与 VPC 终端节点结合使用

访问 AWS CloudWatch 指标

AWS CloudWatch 指标可作为云观察免费套餐的一部分提供。您可以在 CloudWatch 控制台中访问这些指标。API 级别的衡量指标包括创建架构(成功和延迟)、获取架构定义、(成功和延迟)、获取架构版本(成功和延迟)、注册模式版本(成功和延迟)、PutSchemation 版本元数据(成功和延迟)。资源级度量包括注册表。受限制、方案版本限制。限制、架构。大小。