結構描述登錄檔入門 - AWS Glue

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

結構描述登錄檔入門

以下章節將提供概觀,並逐步引導您設定和使用結構描述登錄檔。如需結構描述登錄檔概念和要素的詳細資訊,請參閱AWS Glue 結構描述登錄檔

安裝 SerDe 程式庫

注意

必要條件:在完成下列步驟前,您必須擁有執行中的 Amazon Managed Streaming for Apache Kafka (Amazon MSK) 或 Apache Kafka 叢集。您的生產者和消費者需要在 Java 8 或更高版本上執行。

這些 SerDe 庫提供了一個用於序列化和反序列化數據的框架。

您將為產生資料的應用程式安裝開源序列化程式 (統稱為「序列化程式」)。序列化程式會處理序列化、壓縮以及與結構描述登錄檔的互動。序列化程式會自動從寫入結構描述登錄檔相容目的地的記錄擷取結構描述,例如 Amazon MSK。同樣地,您將在使用資料的應用程式上安裝開源還原序列化程式。

若要在生產者和消費者上安裝程式庫:

  1. 在生產者和消費者的 pom.xml 檔案中,透過下面的程式碼新增此相依性:

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

    或者,您也可以複製 AWS 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, 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 結構描述登錄檔 API 使用 AWS CLI

若要針對 AWS Glue 結構描述登錄檔 API 使用 AWS CLI,請務必將您的 AWS CLI 更新至最新版本。

建立登錄檔

您可以使用預設登錄檔,或使用 AWS Glue API 或 AWS Glue 主控台建立任意數量的新登錄檔。

AWS Glue API

您可以使用這些步驟,用 AWS Glue API 執行此任務。

若要新增登錄檔,請使用 CreateRegistry 動作(Python:創建註冊表) API。指定 RegistryName 作為要建立的登錄檔的名稱,最大長度為 255,只能包含字母、數字、連字號、底線、金額符號或井號。

將 a 指定Description為長度不超過 2048 個位元組的字串,符合 URI 位址多行字串樣式

(選用) 為登錄檔指定一個或多個 Tags,作為索引鍵-值對的映射陣列。

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

建立登錄檔後,系統會指派 Amazon Resource Name (ARN),您可以在 API 回應的 RegistryArn 中檢視。現在您已建立登錄檔,請為該登錄檔建立一或多個結構描述。

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. 輸入登錄名稱,由字母、數字、連字號或底線組成。無法變更此名稱。

  5. 輸入登錄檔的 Description (描述) (選用)。

  6. 或者,將一或多個標籤套用到您的登錄檔。選擇 Add new tag (新增標籤),然後指定 Tag key (標籤鍵) 以及選用的 Tag value (標籤值)

  7. 選擇 Add registry (新增登錄檔)

建立登錄檔的範例。

建立登錄檔後,系統會指派 Amazon Resource Name (ARN),您可以在 Schema registries (結構描述登錄檔) 的清單中選擇登錄檔來查看。現在您已建立登錄檔,請為該登錄檔建立一或多個結構描述。

處理 JSON 的特定記錄 (JAVA POJO)

您可以使用純舊 Java 物件 (POJO) 並將該物件作為記錄傳遞。這類似於 AVRO 中的特定記錄的概念。mbknor-jackson-jsonschema可以為傳遞的 POJO 生成一個 JSON 模式。此程式庫也可以在 JSON 結構描述中注入其他資訊。

AWS Glue 結構描述登錄檔程式庫會使用注入的「className」欄位,在結構描述中提供完全分類的類別名稱。「className」欄位由還原序列化程式用於還原序列化為該類別的物件。

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: 建立結構描述) API。

指定 RegistryId 結構來指出結構描述的登錄檔。或者,省略 RegistryId 以使用預設登錄檔。

指定由字母、數字、連字號或底線組成的 SchemaName,以及指定 DataFormatAVROJSON。在結構描述上設定 DataFormat 後就不可改變。

指定 Compatibility 模式:

  • 向後 (建議使用) — 消費者可以同時讀取目前版本和先前版本。

  • 全部向後 — 消費者可以讀取目前版本和所有先前版本。

  • 向前 — 消費者可以讀取目前和後續版本。

  • 全部向前 — 消費者可以讀取目前版本和所有後續版本。

  • 完整 — 向後和向前的組合。

  • 完整全部 — 全部向後與全部向前的組合。

  • — 不會執行相容性檢查。

  • 已停用 — 防止此結構描述的任何版本控制。

選用地指定結構描述的 Tags

指定 SchemaDefinition 可定義 Avro、JSON 或 Protobuf 資料格式的結構描述。請參閱範例。

對於 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 管理主控台並開啟位於 https://console.aws.amazon.com/glue/ 的 AWS Glue 主控台。

  2. 在導覽窗格中,於 Data catalog 下選擇 Schemas (Data Catalog) (結構描述 Data Catalog)。

  3. 選擇 Add schema (新增結構描述)

  4. 輸入 Schema name (結構描述名稱),由字母、數字、連字號、底線、金額符號或井號組成。無法變更此名稱。

  5. 選擇 Registry (登錄檔),其中結構描述會從下拉式選單儲存。建立後,無法變更父登錄檔。

  6. Data format (資料格式) 保留為 Apache AvroJSON。此格式會套用至此結構描述的所有版本。

  7. 選擇 Compatibility mode (相容性模式)

    • 向後 (建議使用) — 接收者可以讀取目前和以前的版本。

    • 全部向後 — 接收者可以讀取目前和所有以前的版本。

    • 向前 — 傳送者可以寫入目前和先前的版本。

    • 全部向前 — 傳送者可以寫入目前和所有先前的版本。

    • 完整 — 向後和向前的組合。

    • 完整全部 — 全部向後與全部向前的組合。

    • — 不執行相容性檢查。

    • 已停用 — 防止此結構描述的任何版本控制。

  8. 為登錄檔輸入選用 Description (描述),最多 250 個字元。

    建立資料結構描述的範例。
  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:更新註冊表) 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. Actions (動作) 選單上,選擇 Edit registry (編輯登錄檔)

更新結構描述

您可以更新結構描述的描述或相容性設定。

若要更新現有的結構描述,請使用 UpdateSchema 行動(Python:更新模式) API。

指定 SchemaId 結構描述,以指出您要更新的結構描述。必須提供其中一個 VersionNumberCompatibility

程式碼範例 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:註冊模式版本) 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 (Data Catalog) (結構描述 Data Catalog)。

  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:刪除模式) API 來刪除結構描述。

刪除一或多個結構描述是無法復原的永久動作。請確定已不再需要結構描述。

若要從登錄檔刪除結構描述,請呼叫 DeleteSchema 操作(Python:刪除模式) 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. 選擇刪除

您指定的結構描述會從登錄檔中刪除。

刪除結構描述版本

由於結構描述累積在登錄檔中,您可能想要使用AWS Management Console或 DeleteSchemaVersions 行動(Python:刪除模式版本) API 刪除不需要的結構描述版本。刪除一或多個結構描述版本是無法復原的永久動作。請確定不再需要結構描述版本。

刪除結構描述版本時,請注意以下限制:

  • 您無法刪除檢查點的版本。

  • 連續版本的範圍不能超過 25。

  • 最新結構描述版本不可處於待定狀態。

指定 SchemaId 結構來識別結構描述,並指定 Versions 作為要刪除的版本範圍。如需指定版本或版本範圍的詳細資訊,請參閱DeleteRegistry 行動(Python:刪除註冊表)。您指定的結構描述版本會從登錄檔中刪除。

在此呼叫後呼叫 ListSchemaVersions 行動(Python:列表模式版本) 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. 選擇刪除

您指定的結構描述版本會從登錄檔中刪除。

刪除登錄檔

當登錄檔包含的結構描述不應再組織在該登錄檔下時,您可能會想要刪除登錄檔。您將需要將這些結構描述重新指派到另一個登錄檔。

刪除一或多個登錄檔是無法復原的永久動作。請確定登錄檔不再需要。

預設登錄檔可以使用 AWS CLI 來刪除。

AWS Glue API

若要刪除整個登錄檔,包括結構描述及其所有版本,請呼叫 DeleteRegistry 行動(Python:刪除註冊表) 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. Actions (動作) 選單中,選擇 Delete registry (刪除登錄檔)

  5. 在欄位中輸入文字 Delete 以確認刪除。

  6. 選擇刪除

您選取的登錄檔會從 AWS Glue 刪除。

序列化程式的 IAM 範例

注意

AWS 受管政策授予常用案例所需的許可。如需使用受管政策來管理結構描述登錄檔的相關資訊,請參閱AWS 的管理 (預先定義) 策略 AWS Glue

對於序列化程式,您應該建立類似於下面的最小政策,以便您能夠找到特定結構描述定義的 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" ] }

還原序列化程式的 IAM 範例

對於還原序列化程式 (消費者方面),您應該建立類似下面的政策,以允許還原序列化程式從結構描述登錄檔中擷取結構描述以進行還原序列化。請注意,您應該能夠檢查登錄檔以擷取其中的結構描述。

程式碼範例 15:

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

使用 AWS PrivateLink 的私有連線

您可以使用 AWS PrivateLink 將資料生產者的 VPC 連接到 AWS Glue,方法是定義 AWS Glue 的界面 VPC 端點。使用 VPC 介面端點時,VPC 和 AWS Glue 之間的通訊完全在 AWS 網路中執行。如需詳細資訊,請參閱使用 AWS Glue 搭配 VPC 端點

存取 Amazon CloudWatch 指標

Amazon CloudWatch 指標可作為免費方案 CloudWatch的一部分提供。您可以在「 CloudWatch 主控台」中存取這些指標。API 層級量度包括 CreateSchema (成功和延遲)、(成功和延遲) GetSchemaByDefinition、(成功和延遲)、 GetSchemaVersion (成功和延遲)、 RegisterSchemaVersion (成功和延遲)、 PutSchemaVersionMetadata (成功和延遲)。資源層級度量包括登錄檔。 ThrottledByLimit, SchemaVersion。 ThrottledByLimit、 SchemaVersion。大小。

結構描述登錄檔的範例 AWS CloudFormation 範本

以下是在 AWS CloudFormation 中建立結構描述登錄檔資源的範例範本。若要在您的帳戶中建立此堆疊,請將上述範本複製到檔案 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"