Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Amazon DataZone QuickStart avec des exemples de scripts
Vous pouvez accéder à Amazon DataZone via le portail de gestion ou le portail de DataZone données Amazon, ou par programmation en utilisant Amazon DataZone HTTPSAPI, qui vous permet d'envoyer des HTTPS demandes directement au service. Cette section contient des exemples de scripts qui invoquent Amazon et DataZone APIs que vous pouvez utiliser pour effectuer les tâches courantes suivantes :
Exemples de scripts
Création d'un DataZone domaine Amazon et d'un portail de données
Vous pouvez utiliser l'exemple de script suivant pour créer un DataZone domaine Amazon. Pour plus d'informations sur DataZone les domaines Amazon, consultez DataZone Terminologie et concepts d'Amazon.
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", )
Création d'un projet de publication
Vous pouvez utiliser l'exemple de script suivant pour créer un projet de publication sur Amazon DataZone.
// Create Project def create_project(domainId): return dzclient.create_project( domainIdentifier = domainId, name = "sample-project" )
Création d'un profil d'environnement
Vous pouvez utiliser les exemples de scripts suivants pour créer un profil d'environnement dans Amazon DataZone.
Cet exemple de charge utile est utilisé lorsque le CreateEnvironmentProfile
API est invoqué :
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"] } ] } }
Cet exemple de script invoque : 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
Voici l'exemple de charge utile de sortie une fois que le CreateEnvironmentProfile
API est invoqué :
{ "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": "" } ] } ] } }
Création d'un environnement
Vous pouvez utiliser l'exemple de script suivant pour créer un environnement dans Amazon 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
Collectez des métadonnées à partir de AWS Glue
Vous pouvez utiliser cet exemple de script pour collecter des métadonnées à partir de AWS Glue. Ce script s'exécute selon un calendrier standard. Vous pouvez récupérer les paramètres à partir de l'exemple de script et les rendre globaux. Récupérez le projet, l'environnement et l'ID de domaine à l'aide des fonctions standard. La source de données AWS Glue est créée et exécutée à une heure standard qui peut être mise à jour dans la section cron du script.
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" } }
Organiser et publier un actif de données
Vous pouvez utiliser les exemples de scripts suivants pour organiser et publier des actifs de données sur Amazon DataZone.
Vous pouvez utiliser le script suivant pour créer des types de formulaires personnalisés :
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" )
Vous pouvez utiliser l'exemple de script suivant pour créer des types de ressources personnalisés :
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, )
Vous pouvez utiliser l'exemple de script suivant pour créer des ressources personnalisées :
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\"}" } ] )
Vous pouvez utiliser l'exemple de script suivant pour créer un glossaire :
def create_glossary(domainId, projectId): return dzclient.create_glossary( domainIdentifier = domainId, name = "test7", description = "this is a test glossary", owningProjectIdentifier = projectId )
Vous pouvez utiliser l'exemple de script suivant pour créer un terme de glossaire :
def create_glossary_term(domainId, glossaryId): return dzclient.create_glossary_term( domainIdentifier = domainId, name = "soccer", shortDescription = "this is a test glossary", glossaryIdentifier = glossaryId, )
Vous pouvez utiliser l'exemple de script suivant pour créer une ressource à l'aide d'un type de ressource défini par le système :
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\"}" } ] )
Vous pouvez utiliser l'exemple de script suivant pour créer une révision de ressource et y joindre un terme du glossaire :
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:>"] )
Vous pouvez utiliser l'exemple de script suivant pour publier une ressource :
def publish_asset(domainId, assetId): return dzclient.create_listing_change_set( domainIdentifier = domainId, entityIdentifier = assetId, entityType = "ASSET", action = "PUBLISH", )
Rechercher dans le catalogue de données et s'abonner aux données
Vous pouvez utiliser les exemples de scripts suivants pour effectuer des recherches dans le catalogue de données et vous abonner aux données :
def search_asset(domainId, projectId, text): return dzclient.search( domainIdentifier = domainId, owningProjectIdentifier = projectId, searchScope = "ASSET", searchText = text, )
Vous pouvez utiliser l'exemple de script suivant pour obtenir l'ID de liste de l'actif :
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']
Vous pouvez utiliser les exemples de scripts suivants pour créer une demande d'abonnement à l'aide de l'ID de liste :
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." )
À l'aide de create_subscription_response
ce qui précède, obtenez le
subscription_request_id
, puis acceptez/approuvez l'abonnement à l'aide de l'exemple de script suivant :
subscription_request_id = create_subscription_response["id"] def accept_subscription_request(domainId, subscriptionRequestId): return dzclient.accept_subscription_request( domainIdentifier=domainId, identifier=subscriptionRequestId )
Rechercher des actifs dans le catalogue de données
Vous pouvez utiliser les exemples de scripts suivants qui utilisent la recherche en texte libre pour rechercher vos actifs de données publiés (listes) dans le DataZone catalogue Amazon.
-
L'exemple suivant effectue une recherche par mot clé en texte libre dans le domaine et renvoie toutes les listes correspondant au mot clé « crédit » fourni :
aws datazone search-listings \ --domain-identifier dzd_c1s7uxe71prrtz \ --search-text "credit"
-
Vous pouvez également combiner plusieurs mots clés pour affiner davantage le champ de recherche. Par exemple, si vous recherchez tous les actifs de données publiés (listes) contenant des données relatives aux ventes au Mexique, vous pouvez formuler votre requête avec deux mots clés « Mexique » et « ventes ».
aws datazone search-listings \ --domain-identifier dzd_c1s7uxe71prrtz \ --search-text "mexico sales"
Vous pouvez également rechercher une annonce à l'aide de filtres. Le filters
paramètre indiqué dans le SearchListings API permet de récupérer des résultats filtrés à partir du domaine. Il API prend en charge plusieurs filtres par défaut et vous pouvez également combiner deux filtres ou plus et effectuer une opération AND /OR sur eux. La clause filter prend en compte deux paramètres : attribut et valeur. Les attributs de filtre pris en charge par défaut sont typeName
owningProjectId
, etglossaryTerms
.
-
L'exemple suivant effectue une recherche dans toutes les listes d'un domaine donné à l'aide du
assetType
filtre dans lequel la liste est un type de Redshift Table.aws datazone search-listings \ --domain-identifier dzd_c1s7uxe71prrtz \ --filters '{"or":[{"filter":{"attribute":"typeName","value":"RedshiftTableAssetType"}} ]}'
-
Vous pouvez également combiner plusieurs filtres à l'aide des opérations AND /OR. Dans l'exemple suivant, vous combinez
typeName
etproject
filtrez.aws datazone search-listings \ --domain-identifier dzd_c1s7uxe71prrtz \ --filters '{"or":[{"filter":{"attribute":"typeName","value":"RedshiftTableAssetType"}}, {"filter":{"attribute":"owningProjectId","value":"cwrrjch7f5kppj"}} ]}'
-
Vous pouvez même combiner la recherche en texte libre avec des filtres pour obtenir des résultats exacts et les trier par date de création/dernière mise à jour de l'annonce, comme indiqué dans l'exemple suivant :
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"}'
Autres exemples de scripts utiles
Vous pouvez utiliser les exemples de scripts suivants pour effectuer diverses tâches lorsque vous travaillez avec vos données sur Amazon DataZone.
Utilisez l'exemple de script suivant pour répertorier les DataZone domaines Amazon existants :
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
Utilisez l'exemple de script suivant pour répertorier les DataZone projets Amazon existants :
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
Utilisez l'exemple de script suivant pour répertorier les formulaires de DataZone métadonnées Amazon existants :
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