DataZone Amazon-Schnellstart mit Beispielskripten - Amazon DataZone

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

DataZone Amazon-Schnellstart mit Beispielskripten

Sie können DataZone über das Verwaltungsportal oder das DataZone Amazon-Datenportal oder programmgesteuert über Amazon auf Amazon zugreifen DataZone HTTPSAPI, sodass Sie HTTPS Anfragen direkt an den Service richten können. Dieser Abschnitt enthält Beispielskripts, die Amazon aufrufen und mit DataZone APIs denen Sie die folgenden allgemeinen Aufgaben ausführen können:

Erstellen Sie eine DataZone Amazon-Domain und ein Datenportal

Sie können das folgende Beispielskript verwenden, um eine DataZone Amazon-Domain zu erstellen. Weitere Informationen zu DataZone Amazon-Domains finden Sie unter DataZone Amazon-Terminologie und Konzepte.

import sys import boto3 // Initialize datazone client region = 'us-east-1' dzclient = boto3.client(service_name='datazone', region_name='us-east-1') // Create DataZone domain def create_domain(name): return dzclient.create_domain( name = name, description = "this is a description", domainExecutionRole = "arn:aws:iam::<account>:role/AmazonDataZoneDomainExecutionRole", )

Erstellen Sie ein Veröffentlichungsprojekt

Sie können das folgende Beispielskript verwenden, um ein Veröffentlichungsprojekt in Amazon zu erstellen DataZone.

// Create Project def create_project(domainId): return dzclient.create_project( domainIdentifier = domainId, name = "sample-project" )

Erstellen Sie ein Umgebungsprofil

Sie können die folgenden Beispielskripts verwenden, um ein Umgebungsprofil in Amazon zu erstellen DataZone.

Diese Beispielnutzlast wird verwendet, wenn der aufgerufen CreateEnvironmentProfile API wird:

Sample Payload { "Content":{ "project_name": "Admin_project", "domain_name": "Drug-Research-and-Development", "blueprint_account_region": [ { "blueprint_name": "DefaultDataLake", "account_id": ["066535990535", "413878397724", "676266385322", "747721550195", "755347404384" ], "region": ["us-west-2", "us-east-1"] }, { "blueprint_name": "DefaultDataWarehouse", "account_id": ["066535990535", "413878397724", "676266385322", "747721550195", "755347404384" ], "region":["us-west-2", "us-east-1"] } ] } }

Dieses Beispielskript ruft Folgendes auf: CreateEnvironmentProfile API

def create_environment_profile(domain_id, project_id, env_blueprints) try: response = dz.list_environment_blueprints( domainIdentifier=domain_id, managed=True ) env_blueprints = response.get("items") env_blueprints_map = {} for i in env_blueprints: env_blueprints_map[i["name"]] = i['id'] print("Environment Blueprint map", env_blueprints_map) for i in blueprint_account_region: print(i) for j in i["account_id"]: for k in i["region"]: print("The env blueprint name is", i['blueprint_name']) dz.create_environment_profile( description='This is a test environment profile created via lambda function', domainIdentifier=domain_id, awsAccountId=j, awsAccountRegion=k, environmentBlueprintIdentifier=env_blueprints_map.get(i["blueprint_name"]), name=i["blueprint_name"] + j + k + "_profile", projectIdentifier=project_id ) except Exception as e: print("Failed to created Environment Profile") raise e

Dies ist die Beispielausgabe-Payload, sobald die aufgerufen wurde CreateEnvironmentProfileAPI:

{ "Content":{ "project_name": "Admin_project", "domain_name": "Drug-Research-and-Development", "blueprint_account_region": [ { "blueprint_name": "DefaultDataWarehouse", "account_id": ["111111111111"], "region":["us-west-2"], "user_parameters":[ { "name": "dataAccessSecretsArn", "value": "" } ] } ] } }

Erstellen einer Umgebung

Sie können das folgende Beispielskript verwenden, um eine Umgebung in Amazon zu erstellen DataZone.

def create_environment(domain_id, project_id,blueprint_account_region ): try: #refer to get_domain_id and get_project_id for fetching ids using names. sts_client = boto3.client("sts") # Get the current account ID account_id = sts_client.get_caller_identity()["Account"] print("Fetching environment profile ids") env_profile_map = get_env_profile_map(domain_id, project_id) for i in blueprint_account_region: for j in i["account_id"]: for k in i["region"]: print(" env blueprint name", i['blueprint_name']) profile_name = i["blueprint_name"] + j + k + "_profile" env_name = i["blueprint_name"] + j + k + "_env" description = f'This is environment is created for {profile_name}, Account {account_id} and region {i["region"]}' try: dz.create_environment( description=description, domainIdentifier=domain_id, environmentProfileIdentifier=env_profile_map.get(profile_name), name=env_name, projectIdentifier=project_id ) print(f"Environment created - {env_name}") except: dz.create_environment( description=description, domainIdentifier=domain_id, environmentProfileIdentifier=env_profile_map.get(profile_name), name=env_name, projectIdentifier=project_id, userParameters= i["user_parameters"] ) print(f"Environment created - {env_name}") except Exception as e: print("Failed to created Environment") raise e

Metadaten von AWS Glue sammeln

Sie können dieses Beispielskript verwenden, um Metadaten aus AWS Glue zu sammeln. Dieses Skript wird nach einem Standardzeitplan ausgeführt. Sie können die Parameter aus dem Beispielskript abrufen und sie global machen. Rufen Sie das Projekt, die Umgebung und die Domain-ID mithilfe von Standardfunktionen ab. Die AWS Glue-Datenquelle wird zu einer Standardzeit erstellt und ausgeführt, die im Cron-Abschnitt des Skripts aktualisiert werden kann.

def crcreate_data_source(domain_id, project_id,data_source_name) print("Creating Data Source") data_source_creation = dz.create_data_source( # Define data source : Customize the data source to which you'd like to connect # define the name of the Data source to create, example: name ='TestGlueDataSource' name=data_source_name, # give a description for the datasource (optional), example: description='This is a dorra test for creation on DZ datasources' description=data_source_description, # insert the domain identifier corresponding to the domain to which the datasource will belong, example: domainIdentifier= 'dzd_6f3gst5jjmrrmv' domainIdentifier=domain_id, # give environment identifier , example: environmentIdentifier= '3weyt6hhn8qcvb' environmentIdentifier=environment_id, # give corresponding project identifier, example: projectIdentifier= '6tl4csoyrg16ef', projectIdentifier=project_id, enableSetting="ENABLED", # publishOnImport used to select whether assets are added to the inventory and/or discovery catalog . # publishOnImport = True : Assets will be added to project's inventory as well as published to the discovery catalog # publishOnImport = False : Assets will only be added to project's inventory. # You can later curate the metadata of the assets and choose subscription terms to publish them from the inventory to the discovery catalog. publishOnImport=False, # Automated business name generation : Use AI to automatically generate metadata for assets as they are published or updated by this data source run. # Automatically generated metadata can be be approved, rejected, or edited by data publishers. # Automatically generated metadata is badged with a small icon next to the corresponding metadata field. recommendation={"enableBusinessNameGeneration": True}, type="GLUE", configuration={ "glueRunConfiguration": { "dataAccessRole": "arn:aws:iam::" + account_id + ":role/service-role/AmazonDataZoneGlueAccess-" + current_region + "-" + domain_id + "", "relationalFilterConfigurations": [ { # "databaseName": glue_database_name, "filterExpressions": [ {"expression": "*", "type": "INCLUDE"}, ], # "schemaName": "TestSchemaName", }, ], }, }, # Add metadata forms to the data source (OPTIONAL). # Metadata forms will be automatically applied to any assets that are created by the data source. # assetFormsInput=[ # { # "content": "string", # "formName": "string", # "typeIdentifier": "string", # "typeRevision": "string", # }, # ], schedule={ "schedule": "cron(5 20 * * ? *)", "timezone": "UTC", }, ) # This is a suggested syntax to return values # return_values["data_source_creation"] = data_source_creation["items"] print("Data Source Created") //This is the sample response payload after the CreateDataSource API is invoked: { "Content":{ "project_name": "Admin", "domain_name": "Drug-Research-and-Development", "env_name": "GlueEnvironment", "glue_database_name": "test", "data_source_name" : "test", "data_source_description" : "This is a test data source" } }

Kuratieren und veröffentlichen Sie ein Datenobjekt

Sie können die folgenden Beispielskripts verwenden, um Datenbestände in Amazon DataZone zu kuratieren und zu veröffentlichen.

Sie können das folgende Skript verwenden, um benutzerdefinierte Formulartypen zu erstellen:

def create_form_type(domainId, projectId): return dzclient.create_form_type( domainIdentifier = domainId, name = "customForm", model = { "smithy": "structure customForm { simple: String }" }, owningProjectIdentifier = projectId, status = "ENABLED" )

Sie können das folgende Beispielskript verwenden, um benutzerdefinierte Asset-Typen zu erstellen:

def create_custom_asset_type(domainId, projectId): return dzclient.create_asset_type( domainIdentifier = domainId, name = "userCustomAssetType", formsInput = { "Model": { "typeIdentifier": "customForm", "typeRevision": "1", "required": False } }, owningProjectIdentifier = projectId, )

Sie können das folgende Beispielskript verwenden, um benutzerdefinierte Assets zu erstellen:

def create_custom_asset(domainId, projectId): return dzclient.create_asset( domainIdentifier = domainId, name = 'custom asset', description = "custom asset", owningProjectIdentifier = projectId, typeIdentifier = "userCustomAssetType", formsInput = [ { "formName": "UserCustomForm", "typeIdentifier": "customForm", "content": "{\"simple\":\"sample-catalogId\"}" } ] )

Sie können das folgende Beispielskript verwenden, um ein Glossar zu erstellen:

def create_glossary(domainId, projectId): return dzclient.create_glossary( domainIdentifier = domainId, name = "test7", description = "this is a test glossary", owningProjectIdentifier = projectId )

Sie können das folgende Beispielskript verwenden, um einen Glossarbegriff zu erstellen:

def create_glossary_term(domainId, glossaryId): return dzclient.create_glossary_term( domainIdentifier = domainId, name = "soccer", shortDescription = "this is a test glossary", glossaryIdentifier = glossaryId, )

Sie können das folgende Beispielskript verwenden, um ein Asset mit einem systemdefinierten Asset-Typ zu erstellen:

def create_asset(domainId, projectId): return dzclient.create_asset( domainIdentifier = domainId, name = 'sample asset name', description = "this is a glue table asset", owningProjectIdentifier = projectId, typeIdentifier = "amazon.datazone.GlueTableAssetType", formsInput = [ { "formName": "GlueTableForm", "content": "{\"catalogId\":\"sample-catalogId\",\"columns\":[{\"columnDescription\":\"sample-columnDescription\",\"columnName\":\"sample-columnName\",\"dataType\":\"sample-dataType\",\"lakeFormationTags\":{\"sample-key1\":\"sample-value1\",\"sample-key2\":\"sample-value2\"}}],\"compressionType\":\"sample-compressionType\",\"lakeFormationDetails\":{\"lakeFormationManagedTable\":false,\"lakeFormationTags\":{\"sample-key1\":\"sample-value1\",\"sample-key2\":\"sample-value2\"}},\"primaryKeys\":[\"sample-Key1\",\"sample-Key2\"],\"region\":\"us-east-1\",\"sortKeys\":[\"sample-sortKey1\"],\"sourceClassification\":\"sample-sourceClassification\",\"sourceLocation\":\"sample-sourceLocation\",\"tableArn\":\"sample-tableArn\",\"tableDescription\":\"sample-tableDescription\",\"tableName\":\"sample-tableName\"}" } ] )

Sie können das folgende Beispielskript verwenden, um eine Asset-Revision zu erstellen und einen Glossarbegriff anzuhängen:

def create_asset_revision(domainId, assetId): return dzclient.create_asset_revision( domainIdentifier = domainId, identifier = assetId, name = 'glue table asset 7', description = "glue table asset description update", formsInput = [ { "formName": "GlueTableForm", "content": "{\"catalogId\":\"sample-catalogId\",\"columns\":[{\"columnDescription\":\"sample-columnDescription\",\"columnName\":\"sample-columnName\",\"dataType\":\"sample-dataType\",\"lakeFormationTags\":{\"sample-key1\":\"sample-value1\",\"sample-key2\":\"sample-value2\"}}],\"compressionType\":\"sample-compressionType\",\"lakeFormationDetails\":{\"lakeFormationManagedTable\":false,\"lakeFormationTags\":{\"sample-key1\":\"sample-value1\",\"sample-key2\":\"sample-value2\"}},\"primaryKeys\":[\"sample-Key1\",\"sample-Key2\"],\"region\":\"us-east-1\",\"sortKeys\":[\"sample-sortKey1\"],\"sourceClassification\":\"sample-sourceClassification\",\"sourceLocation\":\"sample-sourceLocation\",\"tableArn\":\"sample-tableArn\",\"tableDescription\":\"sample-tableDescription\",\"tableName\":\"sample-tableName\"}" } ], glossaryTerms = ["<glossaryTermId:>"] )

Sie können das folgende Beispielskript verwenden, um ein Asset zu veröffentlichen:

def publish_asset(domainId, assetId): return dzclient.create_listing_change_set( domainIdentifier = domainId, entityIdentifier = assetId, entityType = "ASSET", action = "PUBLISH", )

Durchsuchen Sie den Datenkatalog und abonnieren Sie Daten

Sie können die folgenden Beispielskripts verwenden, um den Datenkatalog zu durchsuchen und Daten zu abonnieren:

def search_asset(domainId, projectId, text): return dzclient.search( domainIdentifier = domainId, owningProjectIdentifier = projectId, searchScope = "ASSET", searchText = text, )

Sie können das folgende Beispielskript verwenden, um die Listing-ID für das Asset abzurufen:

def search_listings(domainId, assetName, assetId): listings = dzclient.search_listings( domainIdentifier=domainId, searchText=assetName, additionalAttributes=["FORMS"] ) assetListing = None for listing in listings['items']: if listing['assetListing']['entityId'] == assetId: assetListing = listing return listing['assetListing']['listingId']

Sie können die folgenden Beispielskripts verwenden, um mithilfe der Listing-ID eine Abonnementanfrage zu erstellen:

create_subscription_response = def create_subscription_request(domainId, projectId, listingId): return dzclient.create_subscription_request( subscribedPrincipals=[{ "project": { "identifier": projectId } }], subscribedListings=[{ "identifier": listingId }], requestReason="Give request reason here." )

Rufen Sie mithilfe der create_subscription_response obigen Anweisungen das subscription_request_id Abonnement ab und akzeptieren/genehmigen Sie es anschließend mithilfe des folgenden Beispielskripts:

subscription_request_id = create_subscription_response["id"] def accept_subscription_request(domainId, subscriptionRequestId): return dzclient.accept_subscription_request( domainIdentifier=domainId, identifier=subscriptionRequestId )

Suchen Sie im Datenkatalog nach Ressourcen

Sie können die folgenden Beispielskripts verwenden, die die Freitextsuche verwenden, um Ihre veröffentlichten Datenbestände (Angebote) im DataZone Amazon-Katalog nachzuschlagen.

  • Das folgende Beispiel führt eine Freitextsuche nach Schlüsselwörtern in der Domain durch und gibt alle Angebote zurück, die dem angegebenen Schlüsselwort „Credit“ entsprechen:

    aws datazone search-listings \ --domain-identifier dzd_c1s7uxe71prrtz \ --search-text "credit"
  • Sie können auch mehrere Suchbegriffe kombinieren, um den Suchbereich weiter einzugrenzen. Wenn Sie beispielsweise nach allen veröffentlichten Datenbeständen (Auflistungen) suchen, die Daten zu Verkäufen in Mexiko enthalten, können Sie Ihre Abfrage mit den beiden Schlüsselwörtern „Mexiko“ und „Vertrieb“ formulieren.

    aws datazone search-listings \ --domain-identifier dzd_c1s7uxe71prrtz \ --search-text "mexico sales"

Sie können auch mithilfe von Filtern nach einem Eintrag suchen. Der filters Parameter in SearchListings API ermöglicht es Ihnen, gefilterte Ergebnisse aus der Domain abzurufen. Der API unterstützt mehrere Standardfilter, und Sie können auch zwei oder mehr Filter kombinieren und eine AND /OR-Operation für sie ausführen. Die Filterklausel akzeptiert zwei Parameter: Attribut und Wert. Die standardmäßig unterstützten Filterattribute sindtypeName, undowningProjectId. glossaryTerms

  • Im folgenden Beispiel werden alle Angebote in einer bestimmten Domain mithilfe des assetType Filters durchsucht, wobei die Auflistung vom Typ Redshift Table ist.

    aws datazone search-listings \ --domain-identifier dzd_c1s7uxe71prrtz \ --filters '{"or":[{"filter":{"attribute":"typeName","value":"RedshiftTableAssetType"}} ]}'
  • Sie können auch mehrere Filter mithilfe von AND /OR-Operationen miteinander kombinieren. Im folgenden Beispiel kombinieren typeName und project filtern Sie.

    aws datazone search-listings \ --domain-identifier dzd_c1s7uxe71prrtz \ --filters '{"or":[{"filter":{"attribute":"typeName","value":"RedshiftTableAssetType"}}, {"filter":{"attribute":"owningProjectId","value":"cwrrjch7f5kppj"}} ]}'
  • Sie können die Freitextsuche sogar mit Filtern kombinieren, um exakte Ergebnisse zu finden und diese weiter nach Erstellungs- bzw. Aktualisierungszeit des Eintrags zu sortieren, wie im folgenden Beispiel gezeigt:

    aws datazone search-listings \ --domain-identifier dzd_c1s7uxe71prrtz \ --search-text "finance sales" \ --filters '{"or":[{"filter":{"attribute":"typeName","value":"GlueTableViewType"}} ]}' \ --sort '{"attribute": "UPDATED_AT", "order":"ASCENDING"}'

Andere nützliche Beispielskripte

Sie können die folgenden Beispielskripts verwenden, um verschiedene Aufgaben zu erledigen, während Sie mit Ihren Daten in Amazon arbeiten DataZone.

Verwenden Sie das folgende Beispielskript, um bestehende DataZone Amazon-Domains aufzulisten:

def list_domains(): datazone = boto3.client('datazone') response = datazone.list_domains(status='AVAILABLE') [print("%12s | %16s | %12s | %52s" % (item['id'], item['name'], item['managedAccountId'], item['portalUrl'])) for item in response['items']] return

Verwenden Sie das folgende Beispielskript, um bestehende DataZone Amazon-Projekte aufzulisten:

def list_projects(domain_id): datazone = boto3.client('datazone') response = datazone.list_projects(domainIdentifier=domain_id) [print("%12s | %16s " % (item['id'], item['name'])) for item in response['items']] return

Verwenden Sie das folgende Beispielskript, um bestehende DataZone Amazon-Metadatenformulare aufzulisten:

def list_metadata_forms(domain_id): datazone = boto3.client('datazone') response = datazone.search_types(domainIdentifier=domain_id, managed=False, searchScope='FORM_TYPE') [print("%16s | %16s | %3s | %8s" % (item['formTypeItem']['name'], item['formTypeItem']['owningProjectId'],item['formTypeItem']['revision'], item['formTypeItem']['status'])) for item in response['items']] return