

# AWS CloudFormation para AWS Glue
<a name="populate-with-cloudformation-templates"></a>

CloudFormation es un servicio que puede crear muchos recursos de AWS. AWS Glue proporciona operaciones de API para crear objetos en AWS Glue Data Catalog. Sin embargo, podría ser más cómodo definir y crear objetos de AWS Glue y otros objetos de recursos de AWS relacionados en un archivo de plantilla de CloudFormation. A continuación, puede automatizar el proceso de creación de objetos. 

CloudFormation proporciona una sintaxis simplificada, JSON (JavaScript Object Notation) o YAML (YAML Ain't Markup Language), para expresar la creación de recursos de AWS. Puede utilizar las plantillas de CloudFormation para definir objetos del Catálogo de datos, como bases de datos, tablas, particiones, rastreadores, clasificadores y conexiones. También puede definir objetos ETL, por ejemplo, trabajos, disparadores y puntos de enlace de desarrollo. Puede crear una plantilla que describa todos los recursos de AWS que desea y CloudFormation se encargará del aprovisionamiento y la configuración de dichos recursos.

Para obtener más información, consulte [¿Qué es AWS CloudFormation?](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) y [Trabajar con plantillas AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html) en la *Guía del usuario de AWS CloudFormation*.

Si tiene previsto utilizar plantillas de CloudFormation que sean compatibles con AWS Glue, como administrador, debe conceder acceso a CloudFormation y a los servicios y acciones de AWS de los que depende. Para otorgar permisos para crear recursos de CloudFormation, adjunte la siguiente política a los usuarios que trabajan con CloudFormation: 

------
#### [ JSON ]

****  

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

------

La siguiente tabla contiene las acciones que puede realizar una plantilla de CloudFormation en su nombre. Incluye enlaces a información sobre los tipos de recursos de AWS y sus tipos de propiedad que puede agregar a una plantilla de CloudFormation. 


| Recurso de AWS Glue | CloudFormationPlantilla de  | AWS GlueEjemplos de  | 
| --- | --- | --- | 
| Clasificador | [AWS::Glue::Classifier](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-classifier.html) | [Clasificador de grok](#sample-cfn-template-classifier), [clasificador de JSON](#sample-cfn-template-classifier-json), [clasificador de XML](#sample-cfn-template-classifier-xml) | 
| Connection | [AWS::Glue::Connection](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-connection.html) | [Conexión de MySQL](#sample-cfn-template-connection) | 
| Rastreador | [AWS::Glue::Crawler](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-crawler.html) | [Rastreador de Amazon S3](#sample-cfn-template-crawler-s3), [rastreador de MySQL](#sample-cfn-template-crawler-jdbc) | 
| Database | [AWS::Glue::Database](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-database.html) | [Base de datos vacía](#sample-cfn-template-database), [base de datos con tablas](#sample-cfn-template-db-table-partition)  | 
| Punto de enlace de desarrollo | [AWS::Glue::DevEndpoint](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-devendpoint.html) | [Punto de enlace de desarrollo](#sample-cfn-template-devendpoint) | 
| Integración | [AWS::Glue::Integration](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-integration.html) | [Integración sin ETL](#sample-cfn-template-integration) | 
| Propiedad de recursos de integración | [AWS::Glue::IntegrationResourceProperty](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-integrationresourceproperty.html) | [Integración sin ETL con la propiedad de recurso de integración](#sample-cfn-template-integration-resource-property) | 
| Trabajo | [AWS::Glue::Job](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-job.html) | [Trabajo de Amazon S3](#sample-cfn-template-job-s3), [trabajo de JDBC](#sample-cfn-template-job-jdbc) | 
| Transformación de machine learning | [AWS::Glue::MLTransform](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-mltransform.html) | [Transformación de machine learning](#sample-cfn-template-machine-learning-transform) | 
| Conjunto de reglas de calidad de datos | [AWS::Glue::DataQualityRuleset](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-dataqualityruleset.html) | [Conjunto de reglas de calidad de datos](#sample-cfn-template-data-quality-ruleset), [conjunto de reglas de calidad de datos con el programador de EventBridge](#sample-cfn-template-data-quality-ruleset-eventbridge) | 
| Partición | [AWS::Glue::Partition](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-partition.html) | [Particiones de una tabla](#sample-cfn-template-db-table-partition) | 
| Tabla | [AWS::Glue::Table](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-table.html) | [Tabla en una base de datos](#sample-cfn-template-db-table-partition) | 
| Desencadenador | [AWS::Glue::Trigger](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-trigger.html) | [Disparador bajo demanda](#sample-cfn-template-trigger-ondemand), [disparador programado](#sample-cfn-template-trigger-scheduled), [disparador condicional](#sample-cfn-template-trigger-conditional)  | 

Para comenzar, utilice las siguientes plantillas de muestra y personalícelas con sus propios metadatos. A continuación, utilice la consola de CloudFormation para crear una pila de CloudFormation con el fin de agregar objetos a AWS Glue y cualquier servicio asociado. Muchos campos de un objeto de AWS Glue son opcionales. Estas plantillas ilustran los campos que son obligatorios o necesarios para un objeto de AWS Glue operativo y funcional. 

 Una plantilla de CloudFormation puede tener formato JSON o YAML. En estos ejemplos, se utiliza YAML para facilitar la legibilidad. Los ejemplos contienen comentarios (`#`) para describir los valores que están definidos en las plantillas. 

Las plantillas de CloudFormation pueden incluir una sección `Parameters`. Esta sección se puede modificar en el texto de muestra o cuando se envía el archivo YAML a la consola de CloudFormation para crear una pila. La sección `Resources` de la plantilla contiene la definición de AWS Glue y los objetos relacionados. Las definiciones de sintaxis de plantilla de CloudFormation puede contener propiedades que incluyan sintaxis de propiedad más detallada. Es posible que no todas las propiedades sean necesarias para crear un objeto de AWS Glue. Estas muestras incluyen valores de ejemplo de propiedades comunes para crear un objeto de AWS Glue.

## Plantilla de CloudFormation de muestra para una base de datos de AWS Glue
<a name="sample-cfn-template-database"></a>

Una base de datos de AWS Glue en el Catálogo de datos contiene tablas de metadatos. La base de datos se compone de muy pocas propiedades y se puede crear en el Catálogo de datos con una plantilla de CloudFormation. La siguiente plantilla de muestra se proporciona para ayudarle a comenzar y para ilustrar el uso de las pilas de CloudFormation con AWS Glue. El único recurso creado por la plantilla de muestra es una base de datos denominada `cfn-mysampledatabase`. Puede cambiarlo si edita el texto de la muestra o cambia el valor en la consola de CloudFormation al enviar el código YAML.

A continuación, se muestran valores de ejemplo de propiedades comunes para crear una base de datos de AWS Glue. Para obtener más información sobre la plantilla de base de datos de CloudFormation para AWS Glue, consulte [AWS::Glue::Database](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-database.html). 

```
---
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
```

## Plantilla de CloudFormation de muestra para una base de datos, tabla y partición de AWS Glue
<a name="sample-cfn-template-db-table-partition"></a>

Una tabla de AWS Glue contiene los metadatos que definen la estructura y la ubicación de los datos que desea procesar con los scripts de ETL. En una tabla, puede definir particiones para paralelizar el procesamiento de los datos. Una partición es un fragmento de datos que define con una clave. Por ejemplo, si se usa el mes como una clave, todos los datos de enero se encuentran en la misma partición. En AWS Glue, las bases de datos pueden contener tablas y las tablas pueden contener particiones.

En la siguiente muestra se presenta cómo rellenar una base de datos, una tabla y particiones con una plantilla de CloudFormation. El formato de los datos base es `csv` y están delimitados por una coma (,). Como debe existir una base de datos para que pueda contener una tabla, y una tabla debe existir para que se puedan crear particiones, la plantilla utiliza la instrucción `DependsOn` para definir la dependencia de estos objetos cuando se crean.

Los valores de esta muestra definen una tabla que contiene los datos de vuelos de un bucket de Amazon S3 disponible públicamente. Con fines ilustrativos, solo hay definidas algunas columnas de los datos y una clave de partición. También se definen cuatro particiones en el Catálogo de datos. En los campos `StorageDescriptor` también se muestran algunos campos para describir el almacenamiento de los datos base.

```
---
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
```

## Plantilla de CloudFormation de muestra para un clasificador de grok de AWS Glue
<a name="sample-cfn-template-classifier"></a>

Un clasificador de AWS Glue determina el esquema de sus datos. Un tipo de clasificador personalizado utiliza un patrón de grok para adaptarse a sus datos. Si el patrón coincide, el clasificador personalizado se utiliza para crear el esquema de la tabla y se establece `classification` en el valor configurado en la definición de clasificador.

Esta muestra genera un clasificador que crea un esquema con una columna denominada `message` y establece la clasificación en `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
```

## Plantilla de CloudFormation de muestra para un clasificador de JSON de AWS Glue
<a name="sample-cfn-template-classifier-json"></a>

Un clasificador de AWS Glue determina el esquema de sus datos. Un tipo de clasificador personalizado utiliza una cadena `JsonPath` que define los datos JSON que el clasificador debe clasificar. AWS Glue es compatible con un subconjunto de los operadores de `JsonPath`, tal y como se describe en [Escritura de clasificadores personalizados JSON](https://docs.aws.amazon.com/glue/latest/dg/custom-classifier.html#custom-classifier-json). 

Si el patrón coincide, el clasificador personalizado se utiliza para crear el esquema de la tabla.

En esta muestra se crea un clasificador que genera un esquema con cada registro de la matriz `Records3` en un 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[*]
```

## Plantilla de CloudFormation de muestra para un clasificador de XML de AWS Glue
<a name="sample-cfn-template-classifier-xml"></a>

Un clasificador de AWS Glue determina el esquema de sus datos. Un tipo de clasificador personalizado especifica una etiqueta XML para designar el elemento que contiene cada registro en un documento XML que se está analizando. Si el patrón coincide, el clasificador personalizado se utiliza para crear el esquema de la tabla y se establece `classification` en el valor configurado en la definición de clasificador.

En esta muestra se crea un clasificador que genera un esquema con cada registro de la etiqueta `Record` y establece la clasificación en `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>
```

## Plantilla de CloudFormation de muestra para un rastreador de AWS Glue para Amazon S3
<a name="sample-cfn-template-crawler-s3"></a>

Un rastreador de AWS Glue crea tablas de metadatos en el Catálogo de datos que se corresponden con sus datos. A continuación, puede utilizar estas definiciones de tabla como orígenes y destinos en sus trabajos de ETL.

Esta muestra crea un rastreador, el rol de IAM necesario y una base de datos de AWS Glue en el Catálogo de datos. Cuando se ejecuta este rastreador, asume el rol de IAM y crea una tabla en la base de datos correspondiente a los datos de vuelos públicos. La tabla se crea con el prefijo "`cfn_sample_1_`". El rol de IAM que crea esta plantilla otorga permisos globales; es recomendable que cree un rol personalizado. No se definen clasificadores personalizados mediante este clasificador. De forma predeterminada, se usan los clasificadores integrados de AWS Glue. 

Al enviar esta muestra a la consola de CloudFormation, debe confirmar que desea crear el rol de 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\"}}}"
```

## Plantilla de CloudFormation de muestra para una conexión de AWS Glue
<a name="sample-cfn-template-connection"></a>

Una conexión de AWS Glue en el Catálogo de datos contiene la información de JDBC y de red que es necesaria para conectarse a una base de datos JDBC. Esta información se utiliza al conectarse a una base de datos JDBC para rastrear o ejecutar trabajos de ETL.

Esta muestra crea una conexión a una base de datos de Amazon RDS MySQL denominada `devdb`. Cuando se utiliza esta conexión, también se suministran un rol de IAM, credenciales de base de datos y valores de conexión de red. Consulte los detalles de los campos necesarios en la plantilla.

```
---
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
```

## Plantilla de ejemplo de CloudFormation para una integración sin ETL de AWS Glue
<a name="sample-cfn-template-integration"></a>

AWS zero-ETL es un conjunto de integraciones totalmente administradas que minimiza la necesidad de crear canalizaciones de datos de ETL para casos de uso habituales de ingesta y replicación.

En este ejemplo, se crea una integración sin ETL de la fuente dada al destino. 

```
---
AWSTemplateFormatVersion: '2010-09-09'
# Sample CFN YAML to demonstrate creating a zero-ETL integration in AWS Glue
#
# Parameters section contains names that are substituted in the Resources section
# 
Parameters:                                                                                                       
  # The name of the zero-ETL integration to be created
  IntegrationName:  
    Type: String
  # The ARN for the source of the zero-ETL integration
  SourceArn:
    Type: String
  # The ARN for the target of the zero-ETL integration 
  TargetArn:
    Type: String
#
#
Resources:
# Create an AWS Glue zero-ETL integration
  GlueIntegration:
    Type: AWS::Glue::Integration
    Properties:
      IntegrationName: !Ref IntegrationName
      Description: "AWS Glue zero-ETL integration"
      SourceArn: !Ref SourceArn
      TargetArn: !Ref TargetArn
      DataFilter: "include:table1"
      Tags:
        - Key: Purpose
          Value: GlueZeroETLIntegration
```

## Plantilla de ejemplo de CloudFormation para una integración sin ETL de AWS Glue con propiedades de recursos de integración
<a name="sample-cfn-template-integration-resource-property"></a>

Una integración sin ETL de AWS Glue requiere que se definan propiedades de recursos tanto para el origen como para el destino. Para el origen, la única propiedad que debe definirse es el rol de IAM que la integración utilizará para acceder a la conexión de AWS Glue o a la base de datos de DynamoDB. Para el destino, las propiedades que pueden configurarse incluyen el rol de IAM que se utilizará para acceder al destino, la red de VPC en la que debe crearse la integración, el bus de eventos que se usará para configurar las notificaciones de eventos de la integración y la clave de KMS que se utilizará para el cifrado de datos.

En el siguiente ejemplo, se definen las propiedades de los recursos de origen y destino y, a continuación, se crea una integración sin ETL desde el origen hasta el destino. 

```
---
AWSTemplateFormatVersion: '2010-09-09'
# Sample CFN YAML to demonstrate defining the integration resource properties and then creating a zero-ETL integration in AWS Glue
#
# Parameters section contains names that are substituted in the Resources section
# 
Parameters:
  #The name of the zero-ETL integration to be created
  IntegrationName:
    Type: String
  # The ARN for the target of the zero-ETL integration
  TargetArn:
    Type: String
  # The ARN for the IAM role that will be used to access the target
  TargetRoleArn:
    Type: String
  # The ARN for the source of the zero-ETL integration
  SourceArn:
    Type: String
  # The ARN for the IAM role that will be used to access thesource
  SourceRoleArn:
    Type: String
#
#
Resources:
  # Integration Resource Property for zero-ETL target
  TargetIntegrationResourceProperty:
    Type: AWS::Glue::IntegrationResourceProperty
    Properties:
      ResourceArn: !Ref TargetArn
      TargetProcessingProperties:
        RoleArn: !Ref TargetRoleArn
      Tags:
        - Key: Purpose
          Value: TargetIrpTag

  # Integration Resource Property for zero-ETL source
  SourceIntegrationResourceProperty:
    Type: AWS::Glue::IntegrationResourceProperty
    Properties:
      ResourceArn: !Ref SourceArn
      SourceProcessingProperties:
        RoleArn: !Ref SourceRoleArn
      Tags:
        - Key: Purpose
          Value: SourceIRPTag

  # Create an AWS Glue zero-ETL integration
  GlueIntegration:
    Type: AWS::Glue::Integration
    Properties:
      IntegrationName: !Ref IntegrationName
      Description: "AWS Glue zero-ETL integration"
      SourceArn: !Ref SourceArn
      TargetArn: !Ref TargetArn
      DataFilter: "include:table1"
      Tags:
        - Key: Purpose
          Value: GlueZeroETLIntegration
```

## Plantilla de CloudFormation de muestra para un rastreador de AWS Glue para JDBC
<a name="sample-cfn-template-crawler-jdbc"></a>

Un rastreador de AWS Glue crea tablas de metadatos en el Catálogo de datos que se corresponden con sus datos. A continuación, puede utilizar estas definiciones de tabla como orígenes y destinos en sus trabajos de ETL.

Esta muestra crea un rastreador, el rol de IAM necesario y una base de datos de AWS Glue en el Catálogo de datos. Cuando se ejecuta este rastreador, asume el rol de IAM y crea una tabla en la base de datos correspondiente a los datos de vuelos públicos que se han almacenado en una base de datos MySQL. La tabla se crea con el prefijo "`cfn_jdbc_1_`". El rol de IAM que crea esta plantilla otorga permisos globales; es recomendable que cree un rol personalizado. No se puede definir ningún clasificador personalizado para los datos de JDBC. De forma predeterminada, se usan los clasificadores integrados de AWS Glue. 

Al enviar esta muestra a la consola de CloudFormation, debe confirmar que desea crear el rol de 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\"}}}"
```

## Plantilla de CloudFormation de muestra para un trabajo de AWS Glue para Amazon S3 a Amazon S3
<a name="sample-cfn-template-job-s3"></a>

Un trabajo de AWS Glue en el Catálogo de datos contiene los valores de parámetros que son necesarios para ejecutar un script en AWS Glue.

Esta muestra crea un trabajo que lee datos de vuelos de un bucket de Amazon S3 en formato `csv` y los escribe en un archivo Parquet de Amazon S3. El script que ejecuta este flujo de trabajo ya debe existir. Puede generar un script de ETL para su entorno con la consola de AWS Glue. Cuando este trabajo se ejecuta, también se debe proporcionar un rol de IAM con los permisos correspondientes.

Los valores de parámetro comunes se muestran en la plantilla. Por ejemplo, el valor predeterminado de `AllocatedCapacity` (DPU) es 5.

```
---
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
```

## Plantilla de CloudFormation de muestra para un trabajo de AWS Glue para JDBC a Amazon S3
<a name="sample-cfn-template-job-jdbc"></a>

Un trabajo de AWS Glue en el Catálogo de datos contiene los valores de parámetros que son necesarios para ejecutar un script en AWS Glue.

Esta muestra crea un trabajo que lee los datos de vuelos de una base de datos MySQL JDBC según lo definido por la conexión denominada `cfn-connection-mysql-flights-1` y los escribe en un archivo Parquet de Amazon S3. El script que ejecuta este flujo de trabajo ya debe existir. Puede generar un script de ETL para su entorno con la consola de AWS Glue. Cuando este trabajo se ejecuta, también se debe proporcionar un rol de IAM con los permisos correspondientes.

Los valores de parámetro comunes se muestran en la plantilla. Por ejemplo, el valor predeterminado de `AllocatedCapacity` (DPU) es 5.

```
---
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
```

## Ejemplo de plantilla de CloudFormation para un desencadenador bajo demanda de AWS Glue
<a name="sample-cfn-template-trigger-ondemand"></a>

Un desencadenador de AWS Glue en el Catálogo de datos contiene los valores de parámetros que son necesarios para iniciar una ejecución de flujo de trabajo cuando se activa el desencadenador. Un disparador bajo demanda se activa cuando lo habilita.

Esta muestra crea un disparador bajo demanda que comienza un flujo de trabajo llamado `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:
```

## Plantilla de CloudFormation de muestra para un disparador programado de AWS Glue
<a name="sample-cfn-template-trigger-scheduled"></a>

Un desencadenador de AWS Glue en el Catálogo de datos contiene los valores de parámetros que son necesarios para iniciar una ejecución de flujo de trabajo cuando se activa el desencadenador. Un disparador programado se activa cuando está habilitado y se activa el temporizador cron.

Esta muestra crea un disparador programado que comienza un flujo de trabajo llamado `cfn-job-S3-to-S3-1`. El temporizador es una expresión cron para ejecutar el flujo de trabajo cada 10 minutos los días entre 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:
```

## Plantilla de CloudFormation de muestra para un disparador condicional de AWS Glue
<a name="sample-cfn-template-trigger-conditional"></a>

Un desencadenador de AWS Glue en el Catálogo de datos contiene los valores de parámetros que son necesarios para iniciar una ejecución de flujo de trabajo cuando se activa el desencadenador. Un disparador condicional se activa cuando está habilitado y se cumplen sus condiciones, por ejemplo, que un flujo de trabajo se realice correctamente.

Esta muestra crea un disparador condicional que comienza un flujo de trabajo llamado `cfn-job-S3-to-S3-1`. Este flujo de trabajo comienza cuando el flujo de trabajo llamado `cfn-job-S3-to-S3-2 ` se completa correctamente.

```
---
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
```

## Plantilla de CloudFormation de muestra para un punto de conexión de desarrollo de AWS Glue
<a name="sample-cfn-template-machine-learning-transform"></a>

Una transformación de machine learning de AWS Glue es una transformación personalizada para limpiar los datos. En la actualidad, hay una transformación disponible denominada FindMatches. La transformación FindMatches le permite identificar registros duplicados o coincidentes en el conjunto de datos, incluso cuando los registros no tienen un identificador único común y no coinciden exactamente los campos.

Este ejemplo crea una transformación de machine learning. Para obtener más información sobre los parámetros que se necesitan para crear una transformación de machine learning, consulte [Coincidencia de registros con FindMatches de AWS Lake Formation](machine-learning.md).

```
---
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
```

## Ejemplo de plantilla de CloudFormation para un conjunto de reglas de AWS Glue Data Quality
<a name="sample-cfn-template-data-quality-ruleset"></a>

Un conjunto de reglas de calidad de datos de AWS Glue contiene reglas que se pueden evaluar en una tabla del catálogo de datos. Una vez colocado el conjunto de reglas en la tabla de destino, puede ir al catálogo de datos y realizar una evaluación para comparar los datos con las reglas del conjunto de reglas. Estas reglas pueden variar desde la evaluación del recuento de filas hasta la evaluación de la integridad referencial de los datos.

En el siguiente ejemplo, se muestra una plantilla de CloudFormation que crea un conjunto de reglas con una variedad de reglas en la tabla 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
```

## Plantilla de CloudFormation de ejemplo para un conjunto de reglas de AWS Glue Data Quality con el programador de EventBridge
<a name="sample-cfn-template-data-quality-ruleset-eventbridge"></a>

Un conjunto de reglas de calidad de datos de AWS Glue contiene reglas que se pueden evaluar en una tabla del catálogo de datos. Una vez colocado el conjunto de reglas en la tabla de destino, puede ir al catálogo de datos y realizar una evaluación para comparar los datos con las reglas del conjunto de reglas. En lugar de tener que ir manualmente al catálogo de datos para evaluar el conjunto de reglas, también puede agregar un EventBridge Scheduler a nuestra plantilla de CloudFormation para programar estas evaluaciones del conjunto de reglas en un intervalo de tiempo determinado.

El siguiente ejemplo es una plantilla de CloudFormation que crea un conjunto de reglas de calidad de datos y un programador de EventBridge para evaluar el conjunto de reglas mencionado anteriormente 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" ] }
        '
```

## Plantilla de CloudFormation de muestra para un punto de conexión de desarrollo de AWS Glue
<a name="sample-cfn-template-devendpoint"></a>

Un punto de enlace de desarrollo de AWS Glue es un entorno que puede utilizar para desarrollar y probar los scripts de AWS Glue.

Esta muestra crea un punto de enlace de desarrollo con los valores de parámetro de red mínimos necesarios para crearlo correctamente. Para obtener más información acerca de los parámetros que necesita para configurar un punto de enlace de desarrollo, consulte [Configuración de redes para el desarrollo de AWS Glue](start-development-endpoint.md).

Proporcione un ARN (nombre de recurso de Amazon) de rol de IAM existente para crear el punto de enlace de desarrollo. Proporcione una clave pública RSA válida y mantenga disponible la clave privada correspondiente si tiene previsto crear un servidor de blocs de notas en el punto de enlace de desarrollo.

**nota**  
Usted administrará los servidores de blocs de notas que cree y estén asociados con un punto de enlace de desarrollo. Por tanto, si elimina el punto de enlace de desarrollo, para eliminar el bloc de notas, será preciso que elimine la pila de CloudFormation en la consola de CloudFormation.

```
---
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
```