AWS CloudFormation para AWS Glue - AWS Glue

AWS CloudFormation para AWS Glue

O AWS CloudFormation é um serviço que pode criar muitos recursos da AWS. O AWS Glue fornece operações de API para criar objetos no AWS Glue Data Catalog. No entanto, pode ser mais conveniente definir e criar objetos do AWS Glue e outros objetos de recurso relacionados da AWS em um arquivo de modelo do AWS CloudFormation. Em seguida, você pode automatizar o processo de criação de objetos.

O AWS CloudFormation fornece uma sintaxe simplificada, JSON (JavaScript Object Notation) ou YAML (YAML Ain't Markup Language), para expressar a criação de recursos da AWS. Você pode usar os modelos do AWS CloudFormation para definir os objetos do Data Catalog, como bancos de dados, tabelas, partições, crawlers, classificadores e conexões. Você também pode definir objetos ETL como trabalhos, acionadores e endpoints de desenvolvimento. Você cria um modelo que descreve todos os recursos da AWS desejados, e o AWS CloudFormation cuida do provisionamento e da configuração desses recursos para você.

Para obter mais informações, consulte O que é o AWS CloudFormation? e Trabalhar com modelos do AWS CloudFormation no Manual do usuário do AWS CloudFormation.

Se você planeja usar modelos do AWS CloudFormation compatíveis com o AWS Glue, como administrador, você deve conceder acesso ao AWS CloudFormation e às ações e aos serviços da AWS dos quais ele depende. Para conceder permissões para criar recursos do AWS CloudFormation, anexe a seguinte política aos usuários que trabalham com o AWS CloudFormation:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:*" ], "Resource": "*" } ] }

A tabela a seguir contém as ações que um modelo do AWS CloudFormation pode realizar em seu nome. Ela inclui links para informações sobre os tipos de recursos da AWS e os tipos de propriedade que você pode adicionar a um modelo do AWS CloudFormation.

Para começar, use os seguintes modelos de exemplo e personalize-os com seus próprios metadados. Em seguida, use o console do AWS CloudFormation para criar uma pilha do AWS CloudFormation para adicionar objetos ao AWS Glue e a todos os serviços associados. Muitos campos em um objeto do AWS Glue são opcionais. Esses modelos ilustram os campos que são obrigatórios ou necessários para um objeto do AWS Glue funcional.

Um modelo do AWS CloudFormation pode estar no formato JSON ou YAML. Nestes exemplos, o YAML é usado para facilitar a leitura. Os exemplos contêm comentários (#) para descrever os valores que são definidos nos modelos.

Os modelos do AWS CloudFormation podem incluir uma seção Parameters. Esta seção pode ser alterada no texto de exemplo ou quando o arquivo YAML for enviado para o console do AWS CloudFormation para criar uma pilha. A seção Resources do modelo contém a definição do AWS Glue e objetos relacionados. As definições de sintaxe de modelos do AWS CloudFormation pode conter propriedades que incluem uma sintaxe de propriedades mais detalhada. Nem todas as propriedades podem ser necessárias para criar um objeto do AWS Glue. Essas amostras mostram exemplos de valores para propriedades comuns para criar um objeto do AWS Glue.

Exemplo de modelo do AWS CloudFormation para um banco de dados do AWS Glue

Um banco de dados do AWS Glue no Data Catalog contém tabelas de metadados. O banco de dados consiste em poucas propriedades e pode ser criado no Data Catalog com um modelo do AWS CloudFormation. O modelo de exemplo a seguir é fornecido para você começar e para ilustrar o uso de pilhas do AWS CloudFormation com o AWS Glue. O único recurso criado pelo modelo de exemplo é um banco de dados chamado cfn-mysampledatabase. Você pode alterá-lo ao editar o texto do exemplo ou ao alterar o valor no console do AWS CloudFormation quando você enviar o YAML.

Veja a seguir exemplos de valores para as propriedades comuns para criar um banco de dados do AWS Glue. Para obter mais informações sobre o modelo de banco de dados do AWS CloudFormation para o AWS Glue, consulte AWS::Glue::Database.

--- AWSTemplateFormatVersion: '2010-09-09' # Sample CloudFormation template in YAML to demonstrate creating a database named mysampledatabase # The metadata created in the Data Catalog points to the flights public S3 bucket # # Parameters section contains names that are substituted in the Resources section # These parameters are the names the resources created in the Data Catalog Parameters: CFNDatabaseName: Type: String Default: cfn-mysampledatabse # Resources section defines metadata for the Data Catalog Resources: # Create an AWS Glue database CFNDatabaseFlights: Type: AWS::Glue::Database Properties: # The database is created in the Data Catalog for your account CatalogId: !Ref AWS::AccountId DatabaseInput: # The name of the database is defined in the Parameters section above Name: !Ref CFNDatabaseName Description: Database to hold tables for flights data LocationUri: s3://crawler-public-us-east-1/flight/2016/csv/ #Parameters: Leave AWS database parameters blank

Exemplo de modelo do AWS CloudFormation para um banco de dados, uma tabela e uma partição do AWS Glue

Uma tabela do AWS Glue contém os metadados que definem a estrutura e o local dos dados que você deseja processar com seus scripts de ETL. Em uma tabela, você pode definir partições para paralelizar o processamento de seus dados. Uma partição é um bloco de dados definido com uma chave. Por exemplo, usando o mês como uma chave, todos os dados de janeiro estão contidos na mesma partição. No AWS Glue, bancos de dados podem conter tabelas, e tabelas podem conter partições.

O exemplo a seguir mostra como preencher um banco de dados, uma tabela e partições usando um modelo do AWS CloudFormation. O formato de dados base é csv e delimitado por uma vírgula (,). Como um banco de dados deve existir antes de poder conter uma tabela, e uma tabela deve existir antes que as partições possam ser criadas, o modelo usa a instrução DependsOn para definir a dependência desses objetos quando eles são criados.

Os valores neste exemplo definem uma tabela que contém dados de voo de um bucket do Amazon S3 publicamente disponível. Para ilustração, apenas algumas colunas dos dados e uma chave de particionamento são definidas. Quatro partições também são definidas no Data Catalog. Alguns campos para descrever o armazenamento do banco de dados também são mostrados nos campos StorageDescriptor.

--- AWSTemplateFormatVersion: '2010-09-09' # Sample CloudFormation template in YAML to demonstrate creating a database, a table, and partitions # The metadata created in the Data Catalog points to the flights public S3 bucket # # Parameters substituted in the Resources section # These parameters are names of the resources created in the Data Catalog Parameters: CFNDatabaseName: Type: String Default: cfn-database-flights-1 CFNTableName1: Type: String Default: cfn-manual-table-flights-1 # Resources to create metadata in the Data Catalog Resources: ### # Create an AWS Glue database CFNDatabaseFlights: Type: AWS::Glue::Database Properties: CatalogId: !Ref AWS::AccountId DatabaseInput: Name: !Ref CFNDatabaseName Description: Database to hold tables for flights data ### # Create an AWS Glue table CFNTableFlights: # Creating the table waits for the database to be created DependsOn: CFNDatabaseFlights Type: AWS::Glue::Table Properties: CatalogId: !Ref AWS::AccountId DatabaseName: !Ref CFNDatabaseName TableInput: Name: !Ref CFNTableName1 Description: Define the first few columns of the flights table TableType: EXTERNAL_TABLE Parameters: { "classification": "csv" } # ViewExpandedText: String PartitionKeys: # Data is partitioned by month - Name: mon Type: bigint StorageDescriptor: OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Columns: - Name: year Type: bigint - Name: quarter Type: bigint - Name: month Type: bigint - Name: day_of_month Type: bigint InputFormat: org.apache.hadoop.mapred.TextInputFormat Location: s3://crawler-public-us-east-1/flight/2016/csv/ SerdeInfo: Parameters: field.delim: "," SerializationLibrary: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe # Partition 1 # Create an AWS Glue partition CFNPartitionMon1: DependsOn: CFNTableFlights Type: AWS::Glue::Partition Properties: CatalogId: !Ref AWS::AccountId DatabaseName: !Ref CFNDatabaseName TableName: !Ref CFNTableName1 PartitionInput: Values: - 1 StorageDescriptor: OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Columns: - Name: mon Type: bigint InputFormat: org.apache.hadoop.mapred.TextInputFormat Location: s3://crawler-public-us-east-1/flight/2016/csv/mon=1/ SerdeInfo: Parameters: field.delim: "," SerializationLibrary: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe # Partition 2 # Create an AWS Glue partition CFNPartitionMon2: DependsOn: CFNTableFlights Type: AWS::Glue::Partition Properties: CatalogId: !Ref AWS::AccountId DatabaseName: !Ref CFNDatabaseName TableName: !Ref CFNTableName1 PartitionInput: Values: - 2 StorageDescriptor: OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Columns: - Name: mon Type: bigint InputFormat: org.apache.hadoop.mapred.TextInputFormat Location: s3://crawler-public-us-east-1/flight/2016/csv/mon=2/ SerdeInfo: Parameters: field.delim: "," SerializationLibrary: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe # Partition 3 # Create an AWS Glue partition CFNPartitionMon3: DependsOn: CFNTableFlights Type: AWS::Glue::Partition Properties: CatalogId: !Ref AWS::AccountId DatabaseName: !Ref CFNDatabaseName TableName: !Ref CFNTableName1 PartitionInput: Values: - 3 StorageDescriptor: OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Columns: - Name: mon Type: bigint InputFormat: org.apache.hadoop.mapred.TextInputFormat Location: s3://crawler-public-us-east-1/flight/2016/csv/mon=3/ SerdeInfo: Parameters: field.delim: "," SerializationLibrary: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe # Partition 4 # Create an AWS Glue partition CFNPartitionMon4: DependsOn: CFNTableFlights Type: AWS::Glue::Partition Properties: CatalogId: !Ref AWS::AccountId DatabaseName: !Ref CFNDatabaseName TableName: !Ref CFNTableName1 PartitionInput: Values: - 4 StorageDescriptor: OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Columns: - Name: mon Type: bigint InputFormat: org.apache.hadoop.mapred.TextInputFormat Location: s3://crawler-public-us-east-1/flight/2016/csv/mon=4/ SerdeInfo: Parameters: field.delim: "," SerializationLibrary: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe

Exemplo de modelo do AWS CloudFormation para um classificador grok do AWS Glue

Um classificador do AWS Glue determina o esquema dos seus dados. Um tipo de classificador personalizado usa um padrão grok para corresponder aos seus dados. Se o padrão corresponder, o classificador personalizado será usado para criar o esquema da tabela e definir classification como o valor definido na definição do classificador.

Este exemplo cria um classificador que cria um esquema com uma coluna denominada message e define a classificação para greedy.

--- AWSTemplateFormatVersion: '2010-09-09' # Sample CFN YAML to demonstrate creating a classifier # # Parameters section contains names that are substituted in the Resources section # These parameters are the names the resources created in the Data Catalog Parameters: # The name of the classifier to be created CFNClassifierName: Type: String Default: cfn-classifier-grok-one-column-1 # # # Resources section defines metadata for the Data Catalog Resources: # Create classifier that uses grok pattern to put all data in one column and classifies it as "greedy". CFNClassifierFlights: Type: AWS::Glue::Classifier Properties: GrokClassifier: #Grok classifier that puts all data in one column Name: !Ref CFNClassifierName Classification: greedy GrokPattern: "%{GREEDYDATA:message}" #CustomPatterns: none

Exemplo de modelo do AWS CloudFormation para um classificador JSON do AWS Glue

Um classificador do AWS Glue determina o esquema dos seus dados. Um tipo de classificador personalizado usa uma string JsonPath que define os dados JSON para o classificador classificar. O AWS Glue oferece suporte a um subconjunto de operadores para JsonPath, conforme descrito em Gravando classificadores personalizados JsonPath.

Se o padrão for correspondente, o classificador personalizado será usado para criar o esquema da tabela.

Este exemplo cria um classificador que cria um esquema com cada registro na matriz Records3 em um objeto.

--- AWSTemplateFormatVersion: '2010-09-09' # Sample CFN YAML to demonstrate creating a JSON classifier # # Parameters section contains names that are substituted in the Resources section # These parameters are the names the resources created in the Data Catalog Parameters: # The name of the classifier to be created CFNClassifierName: Type: String Default: cfn-classifier-json-one-column-1 # # # Resources section defines metadata for the Data Catalog Resources: # Create classifier that uses a JSON pattern. CFNClassifierFlights: Type: AWS::Glue::Classifier Properties: JSONClassifier: #JSON classifier Name: !Ref CFNClassifierName JsonPath: $.Records3[*]

Exemplo de modelo do AWS CloudFormation para um classificador XML do AWS Glue

Um classificador do AWS Glue determina o esquema dos seus dados. Um tipo de classificador personalizado especifica uma tag XML para designar o elemento que contém cada registro em um documento XML que está sendo analisado. Se o padrão corresponder, o classificador personalizado será usado para criar o esquema da tabela e definir classification como o valor definido na definição do classificador.

Este exemplo cria um classificador que cria um esquema com uma registro na tag Record e define a classificação como XML.

--- AWSTemplateFormatVersion: '2010-09-09' # Sample CFN YAML to demonstrate creating an XML classifier # # Parameters section contains names that are substituted in the Resources section # These parameters are the names the resources created in the Data Catalog Parameters: # The name of the classifier to be created CFNClassifierName: Type: String Default: cfn-classifier-xml-one-column-1 # # # Resources section defines metadata for the Data Catalog Resources: # Create classifier that uses the XML pattern and classifies it as "XML". CFNClassifierFlights: Type: AWS::Glue::Classifier Properties: XMLClassifier: #XML classifier Name: !Ref CFNClassifierName Classification: XML RowTag: <Records>

Exemplo de modelo do AWS CloudFormation de um crawler do AWS Glue para o Amazon S3

Um crawler do AWS Glue cria tabelas de metadados no Data Catalog que correspondem aos seus dados. Você pode usar essas definições de tabela como origens e destinos em trabalhos de ETL.

Este exemplo cria um crawler, a função do IAM necessária e um banco de dados do AWS Glue no Data Catalog. Quando esse crawler é executado, ele assume a função do IAM e cria uma tabela no banco de dados para os dados de voos públicos. A tabela é criada com o prefixo "cfn_sample_1_". A função do IAM criada por esse modelo permite permissões globais, caso você queira criar uma função personalizada. Nenhum classificador personalizado é definido por esse classificador. Os classificadores integrados do AWS Glue são usados por padrão.

Quando você envia esse exemplo para o console do AWS CloudFormation, é necessário confirmar se deseja criar a função do IAM.

--- AWSTemplateFormatVersion: '2010-09-09' # Sample CFN YAML to demonstrate creating a crawler # # Parameters section contains names that are substituted in the Resources section # These parameters are the names the resources created in the Data Catalog Parameters: # The name of the crawler to be created CFNCrawlerName: Type: String Default: cfn-crawler-flights-1 CFNDatabaseName: Type: String Default: cfn-database-flights-1 CFNTablePrefixName: Type: String Default: cfn_sample_1_ # # # Resources section defines metadata for the Data Catalog Resources: #Create IAM Role assumed by the crawler. For demonstration, this role is given all permissions. CFNRoleFlights: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Principal: Service: - "glue.amazonaws.com" Action: - "sts:AssumeRole" Path: "/" Policies: - PolicyName: "root" PolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Action: "*" Resource: "*" # Create a database to contain tables created by the crawler CFNDatabaseFlights: Type: AWS::Glue::Database Properties: CatalogId: !Ref AWS::AccountId DatabaseInput: Name: !Ref CFNDatabaseName Description: "AWS Glue container to hold metadata tables for the flights crawler" #Create a crawler to crawl the flights data on a public S3 bucket CFNCrawlerFlights: Type: AWS::Glue::Crawler Properties: Name: !Ref CFNCrawlerName Role: !GetAtt CFNRoleFlights.Arn #Classifiers: none, use the default classifier Description: AWS Glue crawler to crawl flights data #Schedule: none, use default run-on-demand DatabaseName: !Ref CFNDatabaseName Targets: S3Targets: # Public S3 bucket with the flights data - Path: "s3://crawler-public-us-east-1/flight/2016/csv" TablePrefix: !Ref CFNTablePrefixName SchemaChangePolicy: UpdateBehavior: "UPDATE_IN_DATABASE" DeleteBehavior: "LOG" Configuration: "{\"Version\":1.0,\"CrawlerOutput\":{\"Partitions\":{\"AddOrUpdateBehavior\":\"InheritFromTable\"},\"Tables\":{\"AddOrUpdateBehavior\":\"MergeNewColumns\"}}}"

Exemplo de modelo do AWS CloudFormation para uma conexão do AWS Glue

Uma conexão do AWS Glue no Data Catalog contém as informações do JDBC e de rede que são necessárias para se conectar a um banco de dados JDBC. Essas informações são usadas quando você se conecta a um banco de dados JDBC para rastrear ou executar trabalhos de ETL.

Este exemplo cria uma conexão com um banco de dados MySQL do Amazon RDS chamado devdb. Quando essa conexão é usada, uma função do IAM, as credenciais do banco de dados e os valores de conexão de rede também devem ser fornecidos. Consulte as informações dos campos necessários no modelo.

--- AWSTemplateFormatVersion: '2010-09-09' # Sample CFN YAML to demonstrate creating a connection # # Parameters section contains names that are substituted in the Resources section # These parameters are the names the resources created in the Data Catalog Parameters: # The name of the connection to be created CFNConnectionName: Type: String Default: cfn-connection-mysql-flights-1 CFNJDBCString: Type: String Default: "jdbc:mysql://xxx-mysql.yyyyyyyyyyyyyy.us-east-1.rds.amazonaws.com:3306/devdb" CFNJDBCUser: Type: String Default: "master" CFNJDBCPassword: Type: String Default: "12345678" NoEcho: true # # # Resources section defines metadata for the Data Catalog Resources: CFNConnectionMySQL: Type: AWS::Glue::Connection Properties: CatalogId: !Ref AWS::AccountId ConnectionInput: Description: "Connect to MySQL database." ConnectionType: "JDBC" #MatchCriteria: none PhysicalConnectionRequirements: AvailabilityZone: "us-east-1d" SecurityGroupIdList: - "sg-7d52b812" SubnetId: "subnet-84f326ee" ConnectionProperties: { "JDBC_CONNECTION_URL": !Ref CFNJDBCString, "USERNAME": !Ref CFNJDBCUser, "PASSWORD": !Ref CFNJDBCPassword } Name: !Ref CFNConnectionName

Exemplo de modelo do AWS CloudFormation para um crawler do AWS Glue para o JDBC

Um crawler do AWS Glue cria tabelas de metadados no Data Catalog que correspondem aos seus dados. Você pode usar essas definições de tabela como origens e destinos em trabalhos de ETL.

Este exemplo cria um crawler, a função do IAM necessária e um banco de dados do AWS Glue no Data Catalog. Quando esse crawler é executado, ele assume a função do IAM e cria uma tabela no banco de dados para os dados de voo públicos que foram armazenados em um banco de dados MySQL. A tabela é criada com o prefixo "cfn_jdbc_1_". A função do IAM criada por esse modelo permite permissões globais, caso você queira criar uma função personalizada. Nenhum classificador personalizado pode ser definido para dados JDBC. Os classificadores integrados do AWS Glue são usados por padrão.

Quando você envia esse exemplo para o console do AWS CloudFormation, é necessário confirmar se deseja criar a função do IAM.

--- AWSTemplateFormatVersion: '2010-09-09' # Sample CFN YAML to demonstrate creating a crawler # # Parameters section contains names that are substituted in the Resources section # These parameters are the names the resources created in the Data Catalog Parameters: # The name of the crawler to be created CFNCrawlerName: Type: String Default: cfn-crawler-jdbc-flights-1 # The name of the database to be created to contain tables CFNDatabaseName: Type: String Default: cfn-database-jdbc-flights-1 # The prefix for all tables crawled and created CFNTablePrefixName: Type: String Default: cfn_jdbc_1_ # The name of the existing connection to the MySQL database CFNConnectionName: Type: String Default: cfn-connection-mysql-flights-1 # The name of the JDBC path (database/schema/table) with wildcard (%) to crawl CFNJDBCPath: Type: String Default: saldev/% # # # Resources section defines metadata for the Data Catalog Resources: #Create IAM Role assumed by the crawler. For demonstration, this role is given all permissions. CFNRoleFlights: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Principal: Service: - "glue.amazonaws.com" Action: - "sts:AssumeRole" Path: "/" Policies: - PolicyName: "root" PolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Action: "*" Resource: "*" # Create a database to contain tables created by the crawler CFNDatabaseFlights: Type: AWS::Glue::Database Properties: CatalogId: !Ref AWS::AccountId DatabaseInput: Name: !Ref CFNDatabaseName Description: "AWS Glue container to hold metadata tables for the flights crawler" #Create a crawler to crawl the flights data in MySQL database CFNCrawlerFlights: Type: AWS::Glue::Crawler Properties: Name: !Ref CFNCrawlerName Role: !GetAtt CFNRoleFlights.Arn #Classifiers: none, use the default classifier Description: AWS Glue crawler to crawl flights data #Schedule: none, use default run-on-demand DatabaseName: !Ref CFNDatabaseName Targets: JdbcTargets: # JDBC MySQL database with the flights data - ConnectionName: !Ref CFNConnectionName Path: !Ref CFNJDBCPath #Exclusions: none TablePrefix: !Ref CFNTablePrefixName SchemaChangePolicy: UpdateBehavior: "UPDATE_IN_DATABASE" DeleteBehavior: "LOG" Configuration: "{\"Version\":1.0,\"CrawlerOutput\":{\"Partitions\":{\"AddOrUpdateBehavior\":\"InheritFromTable\"},\"Tables\":{\"AddOrUpdateBehavior\":\"MergeNewColumns\"}}}"

Exemplo do modelo do AWS CloudFormation de um trabalho do AWS Glue para o Amazon S3 ao Amazon S3

Um trabalho do AWS Glue no Data Catalog contém os valores de parâmetros que são necessários para executar um script no AWS Glue.

Este exemplo cria um trabalho que lê dados de voo de um bucket do Amazon S3 no formato csv e os grava em um arquivo Parquet do Amazon S3. O script que é executado por esse trabalho já deve existir. Você pode gerar um script de ETL para seu ambiente com o console do AWS Glue. Quando esse trabalho é executado, uma função do IAM com as permissões corretas também deve ser fornecida.

Os valores de parâmetro comuns são exibidos no modelo. Por exemplo, o padrão é 5 para AllocatedCapacity (DPUs).

--- AWSTemplateFormatVersion: '2010-09-09' # Sample CFN YAML to demonstrate creating a job using the public flights S3 table in a public bucket # # Parameters section contains names that are substituted in the Resources section # These parameters are the names the resources created in the Data Catalog Parameters: # The name of the job to be created CFNJobName: Type: String Default: cfn-job-S3-to-S3-2 # The name of the IAM role that the job assumes. It must have access to data, script, temporary directory CFNIAMRoleName: Type: String Default: AWSGlueServiceRoleGA # The S3 path where the script for this job is located CFNScriptLocation: Type: String Default: s3://aws-glue-scripts-123456789012-us-east-1/myid/sal-job-test2 # # # Resources section defines metadata for the Data Catalog Resources: # Create job to run script which accesses flightscsv table and write to S3 file as parquet. # The script already exists and is called by this job CFNJobFlights: Type: AWS::Glue::Job Properties: Role: !Ref CFNIAMRoleName #DefaultArguments: JSON object # If script written in Scala, then set DefaultArguments={'--job-language'; 'scala', '--class': 'your scala class'} #Connections: No connection needed for S3 to S3 job # ConnectionsList #MaxRetries: Double Description: Job created with CloudFormation #LogUri: String Command: Name: glueetl ScriptLocation: !Ref CFNScriptLocation # for access to directories use proper IAM role with permission to buckets and folders that begin with "aws-glue-" # script uses temp directory from job definition if required (temp directory not used S3 to S3) # script defines target for output as s3://aws-glue-target/sal AllocatedCapacity: 5 ExecutionProperty: MaxConcurrentRuns: 1 Name: !Ref CFNJobName

Exemplo de modelo do AWS CloudFormation de um trabalho do AWS Glue para JDBC para o Amazon S3

Um trabalho do AWS Glue no Data Catalog contém os valores de parâmetros que são necessários para executar um script no AWS Glue.

Este exemplo cria um trabalho que lê dados de voo de um banco de dados MySQL do JDBC, conforme definido pela conexão denominada cfn-connection-mysql-flights-1 e os grava em um arquivo Parquet do Amazon S3. O script que é executado por esse trabalho já deve existir. Você pode gerar um script de ETL para seu ambiente com o console do AWS Glue. Quando esse trabalho é executado, uma função do IAM com as permissões corretas também deve ser fornecida.

Os valores de parâmetro comuns são exibidos no modelo. Por exemplo, o padrão é 5 para AllocatedCapacity (DPUs).

--- AWSTemplateFormatVersion: '2010-09-09' # Sample CFN YAML to demonstrate creating a job using a MySQL JDBC DB with the flights data to an S3 file # # Parameters section contains names that are substituted in the Resources section # These parameters are the names the resources created in the Data Catalog Parameters: # The name of the job to be created CFNJobName: Type: String Default: cfn-job-JDBC-to-S3-1 # The name of the IAM role that the job assumes. It must have access to data, script, temporary directory CFNIAMRoleName: Type: String Default: AWSGlueServiceRoleGA # The S3 path where the script for this job is located CFNScriptLocation: Type: String Default: s3://aws-glue-scripts-123456789012-us-east-1/myid/sal-job-dec4a # The name of the connection used for JDBC data source CFNConnectionName: Type: String Default: cfn-connection-mysql-flights-1 # # # Resources section defines metadata for the Data Catalog Resources: # Create job to run script which accesses JDBC flights table via a connection and write to S3 file as parquet. # The script already exists and is called by this job CFNJobFlights: Type: AWS::Glue::Job Properties: Role: !Ref CFNIAMRoleName #DefaultArguments: JSON object # For example, if required by script, set temporary directory as DefaultArguments={'--TempDir'; 's3://aws-glue-temporary-xyc/sal'} Connections: Connections: - !Ref CFNConnectionName #MaxRetries: Double Description: Job created with CloudFormation using existing script #LogUri: String Command: Name: glueetl ScriptLocation: !Ref CFNScriptLocation # for access to directories use proper IAM role with permission to buckets and folders that begin with "aws-glue-" # if required, script defines temp directory as argument TempDir and used in script like redshift_tmp_dir = args["TempDir"] # script defines target for output as s3://aws-glue-target/sal AllocatedCapacity: 5 ExecutionProperty: MaxConcurrentRuns: 1 Name: !Ref CFNJobName

Exemplo de modelo do AWS CloudFormation para um acionador sob demanda do AWS Glue

Um acionador do AWS Glue no Data Catalog contém os valores de parâmetros que são necessários para iniciar uma execução de trabalho quando esse acionador é disparado. Um acionador sob demanda é acionado quando você o ativa.

Este exemplo cria um acionador sob demanda que inicia um trabalho denominado cfn-job-S3-to-S3-1.

--- AWSTemplateFormatVersion: '2010-09-09' # Sample CFN YAML to demonstrate creating an on-demand trigger # # Parameters section contains names that are substituted in the Resources section # These parameters are the names the resources created in the Data Catalog Parameters: # The existing job to be started by this trigger CFNJobName: Type: String Default: cfn-job-S3-to-S3-1 # The name of the trigger to be created CFNTriggerName: Type: String Default: cfn-trigger-ondemand-flights-1 # # Resources section defines metadata for the Data Catalog # Sample CFN YAML to demonstrate creating an on-demand trigger for a job Resources: # Create trigger to run an existing job (CFNJobName) on an on-demand schedule. CFNTriggerSample: Type: AWS::Glue::Trigger Properties: Name: Ref: CFNTriggerName Description: Trigger created with CloudFormation Type: ON_DEMAND Actions: - JobName: !Ref CFNJobName # Arguments: JSON object #Schedule: #Predicate:

Exemplo de modelo do AWS CloudFormation para um acionador programado do AWS Glue

Um acionador do AWS Glue no Data Catalog contém os valores de parâmetros que são necessários para iniciar uma execução de trabalho quando esse acionador é disparado. Um acionador programado é acionado quando está habilitado e o temporizador cron é exibido.

Este exemplo cria um acionador programado que inicia um trabalho denominado cfn-job-S3-to-S3-1. O temporizador é uma expressão cron para executar o trabalho a cada 10 minutos em dias da semana.

--- AWSTemplateFormatVersion: '2010-09-09' # Sample CFN YAML to demonstrate creating a scheduled trigger # # Parameters section contains names that are substituted in the Resources section # These parameters are the names the resources created in the Data Catalog Parameters: # The existing job to be started by this trigger CFNJobName: Type: String Default: cfn-job-S3-to-S3-1 # The name of the trigger to be created CFNTriggerName: Type: String Default: cfn-trigger-scheduled-flights-1 # # Resources section defines metadata for the Data Catalog # Sample CFN YAML to demonstrate creating a scheduled trigger for a job # Resources: # Create trigger to run an existing job (CFNJobName) on a cron schedule. TriggerSample1CFN: Type: AWS::Glue::Trigger Properties: Name: Ref: CFNTriggerName Description: Trigger created with CloudFormation Type: SCHEDULED Actions: - JobName: !Ref CFNJobName # Arguments: JSON object # # Run the trigger every 10 minutes on Monday to Friday Schedule: cron(0/10 * ? * MON-FRI *) #Predicate:

Exemplo de modelo do AWS CloudFormation para um acionador condicional do AWS Glue

Um acionador do AWS Glue no Data Catalog contém os valores de parâmetros que são necessários para iniciar uma execução de trabalho quando esse acionador é disparado. Um acionador condicional é acionado quando é ativado e suas condições são atendidas, como um trabalho sendo concluído com êxito.

Este exemplo cria um acionador condicional que inicia um trabalho denominado cfn-job-S3-to-S3-1. Esse trabalho começa quando o trabalho denominado cfn-job-S3-to-S3-2 é concluído com êxito.

--- AWSTemplateFormatVersion: '2010-09-09' # Sample CFN YAML to demonstrate creating a conditional trigger for a job, which starts when another job completes # # Parameters section contains names that are substituted in the Resources section # These parameters are the names the resources created in the Data Catalog Parameters: # The existing job to be started by this trigger CFNJobName: Type: String Default: cfn-job-S3-to-S3-1 # The existing job that when it finishes causes trigger to fire CFNJobName2: Type: String Default: cfn-job-S3-to-S3-2 # The name of the trigger to be created CFNTriggerName: Type: String Default: cfn-trigger-conditional-1 # Resources: # Create trigger to run an existing job (CFNJobName) when another job completes (CFNJobName2). CFNTriggerSample: Type: AWS::Glue::Trigger Properties: Name: Ref: CFNTriggerName Description: Trigger created with CloudFormation Type: CONDITIONAL Actions: - JobName: !Ref CFNJobName # Arguments: JSON object #Schedule: none Predicate: #Value for Logical is required if more than 1 job listed in Conditions Logical: AND Conditions: - LogicalOperator: EQUALS JobName: !Ref CFNJobName2 State: SUCCEEDED

Exemplo de modelo do AWS CloudFormation para um endpoint de desenvolvimento do AWS Glue

Uma transformação de machine learning do AWS Glue é uma transformação personalizada para limpar seus dados. No momento, existe uma transformação disponível chamada FindMatches. A transformação FindMatches permite identificar registros duplicados ou correspondentes no seu conjunto de dados, mesmo quando os registros não têm um identificador exclusivo comum e quando não há campos com uma correspondência exata.

Essa amostra cria uma transformação de machine learning. Para obter mais informações sobre os parâmetros necessários para criar uma transformação de machine learning, consulte Correspondência de registros com o FindMatches do AWS Lake Formation.

--- AWSTemplateFormatVersion: '2010-09-09' # Sample CFN YAML to demonstrate creating a machine learning transform # # Resources section defines metadata for the machine learning transform Resources: MyMLTransform: Type: "AWS::Glue::MLTransform" Condition: "isGlueMLGARegion" Properties: Name: !Sub "MyTransform" Description: "The bestest transform ever" Role: !ImportValue MyMLTransformUserRole GlueVersion: "1.0" WorkerType: "Standard" NumberOfWorkers: 5 Timeout: 120 MaxRetries: 1 InputRecordTables: GlueTables: - DatabaseName: !ImportValue MyMLTransformDatabase TableName: !ImportValue MyMLTransformTable TransformParameters: TransformType: "FIND_MATCHES" FindMatchesParameters: PrimaryKeyColumnName: "testcolumn" PrecisionRecallTradeoff: 0.5 AccuracyCostTradeoff: 0.5 EnforceProvidedLabels: True Tags: key1: "value1" key2: "value2" TransformEncryption: TaskRunSecurityConfigurationName: !ImportValue MyMLTransformSecurityConfiguration MLUserDataEncryption: MLUserDataEncryptionMode: "SSE-KMS" KmsKeyId: !ImportValue MyMLTransformEncryptionKey

Exemplo de modelo do AWS CloudFormation para um conjunto de regras do AWS Glue Data Quality

Um conjunto de regras de qualidade de dados do AWS Glue contém regras que podem ser avaliadas em uma tabela no catálogo de dados. Depois que o conjunto de regras é colocado na tabela de destino, você pode acessar o catálogo de dados e executar uma avaliação que executa seus dados de acordo com as regras do conjunto de regras. Essas regras podem variar desde a avaliação do número de linhas até a avaliação da integridade referencial em seus dados.

O exemplo a seguir é um modelo do CloudFormation que cria um conjunto de regras com uma variedade de regras na tabela de destino especificada.

AWSTemplateFormatVersion: '2010-09-09' # Sample CFN YAML to demonstrate creating a DataQualityRuleset # # Parameters section contains names that are substituted in the Resources section # These parameters are the names the resources created in the Data Catalog Parameters: # The name of the ruleset to be created RulesetName: Type: String Default: "CFNRulesetName" RulesetDescription: Type: String Default: "CFN DataQualityRuleset" # Rules that will be associated with this ruleset Rules: Type: String Default: 'Rules = [ RowCount > 100, IsUnique "id", IsComplete "nametype" ]' # Name of database and table within Data Catalog which the ruleset will # be applied too DatabaseName: Type: String Default: "ExampleDatabaseName" TableName: Type: String Default: "ExampleTableName" # Resources section defines metadata for the Data Catalog Resources: # Creates a Data Quality ruleset under specified rules DQRuleset: Type: AWS::Glue::DataQualityRuleset Properties: Name: !Ref RulesetName Description: !Ref RulesetDescription # The String within rules must be formatted in DQDL, a language # used specifically to make rules Ruleset: !Ref Rules # The targeted table must exist within Data Catalog alongside # the correct database TargetTable: DatabaseName: !Ref DatabaseName TableName: !Ref TableName

Modelo da AWS CloudFormation de amostra para um conjunto de regras do AWS Glue Data Quality com o agendador do EventBridge

Um conjunto de regras de qualidade de dados do AWS Glue contém regras que podem ser avaliadas em uma tabela no catálogo de dados. Depois que o conjunto de regras é colocado na tabela de destino, você pode acessar o catálogo de dados e executar uma avaliação que executa seus dados de acordo com as regras do conjunto de regras. Em vez de precisar acessar manualmente o catálogo de dados para avaliar o conjunto de regras, você também pode adicionar um agendador do EventBridge em nosso modelo do CloudFormation para agendar essas avaliações do conjunto de regras para você em um intervalo cronometrado.

O exemplo a seguir é um modelo do CloudFormation que cria um conjunto de regras de qualidade de dados e um agendador do EventBridge para avaliar o conjunto de regras mencionado acima a cada cinco minutos.

AWSTemplateFormatVersion: '2010-09-09' # Sample CFN YAML to demonstrate creating a DataQualityRuleset # # Parameters section contains names that are substituted in the Resources section # These parameters are the names the resources created in the Data Catalog Parameters: # The name of the ruleset to be created RulesetName: Type: String Default: "CFNRulesetName" # Rules that will be associated with this Ruleset Rules: Type: String Default: 'Rules = [ RowCount > 100, IsUnique "id", IsComplete "nametype" ]' # The name of the Schedule to be created ScheduleName: Type: String Default: "ScheduleDQRulsetEvaluation" # This expression determines the rate at which the Schedule will evaluate # your data using the above ruleset ScheduleRate: Type: String Default: "rate(5 minutes)" # The Request that being sent must match the details of the Data Quality Ruleset ScheduleRequest: Type: String Default: ' { "DataSource": { "GlueTable": { "DatabaseName": "ExampleDatabaseName", "TableName": "ExampleTableName" } }, "Role": "role/AWSGlueServiceRoleDefault", "RulesetNames": [ ""CFNRulesetName"" ] } ' # Resources section defines metadata for the Data Catalog Resources: # Creates a Data Quality ruleset under specified rules DQRuleset: Type: AWS::Glue::DataQualityRuleset Properties: Name: !Ref RulesetName Description: "CFN DataQualityRuleset" # The String within rules must be formatted in DQDL, a language # used specifically to make rules Ruleset: !Ref Rules # The targeted table must exist within Data Catalog alongside # the correct database TargetTable: DatabaseName: "ExampleDatabaseName" TableName: "ExampleTableName" # Create a Scheduler to schedule evaluation runs on the above ruleset ScheduleDQEval: Type: AWS::Scheduler::Schedule Properties: Name: !Ref ScheduleName Description: "Schedule DataQualityRuleset Evaluations" FlexibleTimeWindow: Mode: "OFF" ScheduleExpression: !Ref ScheduleRate ScheduleExpressionTimezone: "America/New_York" State: "ENABLED" Target: # The ARN is the API that will be run, since we want to evaluate our ruleset # we want this specific ARN Arn: "arn:aws:scheduler:::aws-sdk:glue:startDataQualityRulesetEvaluationRun" # Your RoleArn must have approval to schedule RoleArn: "arn:aws:iam::123456789012:role/AWSGlueServiceRoleDefault" # This is the Request that is being sent to the Arn Input: ' { "DataSource": { "GlueTable": { "DatabaseName": "sampledb", "TableName": "meteorite" } }, "Role": "role/AWSGlueServiceRoleDefault", "RulesetNames": [ "TestCFN" ] } '

Exemplo de modelo do AWS CloudFormation para um endpoint de desenvolvimento do AWS Glue

Um endpoint de desenvolvimento do AWS Glue é um ambiente que você pode usar para desenvolver e testar seus scripts do AWS Glue.

Este exemplo cria um endpoint de desenvolvimento com os valores mínimos de parâmetros de rede necessários para criá-lo com êxito. Para obter mais informações sobre os parâmetros necessários para configurar um endpoint de desenvolvimento, consulte Configurar redes para desenvolvimento para o AWS Glue.

Você fornece um ARN (nome do recurso da Amazon) da função do IAM existente para criar o endpoint de desenvolvimento. Forneça uma chave pública RSA válida e mantenha a chave privada correspondente disponível se você planeja criar um servidor de notebook no endpoint de desenvolvimento.

nota

Todo servidor de notebook que criar associado a um endpoint de desenvolvimento será gerenciado por você. Portanto, se você excluir o endpoint de desenvolvimento, deverá excluir a pilha do AWS CloudFormation no console do AWS CloudFormation se quiser excluir o servidor de notebook.

--- AWSTemplateFormatVersion: '2010-09-09' # Sample CFN YAML to demonstrate creating a development endpoint # # Parameters section contains names that are substituted in the Resources section # These parameters are the names the resources created in the Data Catalog Parameters: # The name of the crawler to be created CFNEndpointName: Type: String Default: cfn-devendpoint-1 CFNIAMRoleArn: Type: String Default: arn:aws:iam::123456789012/role/AWSGlueServiceRoleGA # # # Resources section defines metadata for the Data Catalog Resources: CFNDevEndpoint: Type: AWS::Glue::DevEndpoint Properties: EndpointName: !Ref CFNEndpointName #ExtraJarsS3Path: String #ExtraPythonLibsS3Path: String NumberOfNodes: 5 PublicKey: ssh-rsa public.....key myuserid-key RoleArn: !Ref CFNIAMRoleArn SecurityGroupIds: - sg-64986c0b SubnetId: subnet-c67cccac