

Esta es la nueva *Guía de referencia de plantillas de CloudFormation*. Actualice sus marcadores y enlaces. Para obtener ayuda sobre cómo empezar a usar CloudFormation, consulte la [Guía del usuario de AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html).

# `AWS::CloudFormation::Init`
<a name="aws-resource-init"></a>

Utilice el tipo `AWS::CloudFormation::Init` para incluir metadatos en una instancia de Amazon EC2 para el script auxiliar `cfn-init`. Si la plantilla llama al script `cfn-init`, el script buscará los metadatos de los recursos con raíz en la clave de metadatos de `AWS::CloudFormation::Init`. Para obtener más información, consulte [cfn-init](cfn-init.md).

`cfn-init` admite todos los tipos de metadatos para sistemas Linux. Admite los tipos de metadatos para Windows con las condiciones que se describen en las secciones que aparecen a continuación.

## Sintaxis
<a name="aws-resource-cloudformation-init-syntax"></a>

La configuración se divide en secciones. En el siguiente fragmento de código de plantilla se muestra cómo se pueden adjuntar metadatos de `cfn-init` a un recurso de instancia de EC2 dentro de la plantilla.

Los metadatos se organizan en claves de configuración, que puede agrupar en configsets. Puede especificar un configset cuando llama a `cfn-init` en la plantilla. Si no especifica un configset, `cfn-init` buscará una clave de configuración única denominada `config`.

**nota**  
El script auxiliar `cfn-init` procesa estas secciones de configuración en el siguiente orden: paquetes, grupos, usuarios, fuentes, archivos, comandos y, a continuación, servicios. Si necesita un orden diferente, separe las secciones en diferentes claves de configuración y, a continuación, utilice un configset que especifica el orden en el que deben procesarse las claves de configuración.

### JSON
<a name="aws-resource-cloudformation-init-syntax.json"></a>

```
"Resources": {
  "MyInstance": {
    "Type": "AWS::EC2::Instance",
    "Metadata" : {
      "AWS::CloudFormation::Init" : {
        "config" : {
          "packages" : {
            :
          },
          "groups" : {
            :
          },
          "users" : {
            :
          },
          "sources" : {
            :
          },
          "files" : {
            :
          },
          "commands" : {
            :
          },
          "services" : {
            :
          }
        }
      }
    },
    "Properties": {
      :
    }
  }
}
```

### YAML
<a name="aws-resource-cloudformation-init-syntax.yaml"></a>

```
Resources: 
  MyInstance: 
    Type: AWS::EC2::Instance
    Metadata: 
      AWS::CloudFormation::Init: 
        config: 
          packages: 
            :
          groups: 
            :
          users: 
            :
          sources: 
            :
          files: 
            :
          commands: 
            :
          services: 
            :
    Properties: 
      :
```

**nota**  
En las siguientes secciones se incluyen ejemplos de scripts escritos en lenguajes de script de intérprete de comandos tipo Unix, como Bash. Para crear scripts para PowerShell en su lugar, asegúrese de estar familiarizado con el lenguaje PowerShell. La sintaxis de PowerShell es diferente a la de los intérpretes de comandos tipo Unix, por lo que tendrá que estar familiarizado con la forma de hacer las cosas de PowerShell.

## Configsets
<a name="aws-resource-init-configsets"></a>

Si desea crear más de una clave de configuración y que `cfn-init` las procese en un orden específico, cree un configset que contenga las claves de configuración en el orden deseado.

### Configset individual
<a name="w2aac19c23c19c11b5"></a>

El siguiente fragmento de código de plantilla crea configsets denominados `ascending` y `descending` que contienen cada uno dos claves de configuración.

#### JSON
<a name="aws-resource-cloudformation-init-configset-example1.json"></a>

```
"AWS::CloudFormation::Init" : {
    "configSets" : {
        "ascending" : [ "config1" , "config2" ],
        "descending" : [ "config2" , "config1" ]
    },
    "config1" : {
        "commands" : {
            "test" : {
                "command" : "echo \"$CFNTEST\" > test.txt",
                "env" : { "CFNTEST" : "I come from config1." },
                "cwd" : "~"
            }
        }
    },
    "config2" : {
        "commands" : {
            "test" : {
                "command" : "echo \"$CFNTEST\" > test.txt",
                "env" : { "CFNTEST" : "I come from config2" },
                "cwd" : "~"
            }
        }
    }
}
```

#### YAML
<a name="aws-resource-cloudformation-init-configset-example1.yaml"></a>

```
AWS::CloudFormation::Init: 
  configSets: 
    ascending: 
      - "config1"
      - "config2"
    descending: 
      - "config2"
      - "config1"
  config1: 
    commands: 
      test: 
        command: "echo \"$CFNTEST\" > test.txt"
        env: 
          CFNTEST: "I come from config1."
        cwd: "~"
  config2: 
    commands: 
      test: 
        command: "echo \"$CFNTEST\" > test.txt"
        env: 
          CFNTEST: "I come from config2"
        cwd: "~"
```

#### Llamadas a `cfn-init` relacionadas
<a name="w2aac19c23c19c11b5b9"></a>

Las siguientes llamadas a `cfn-init` de ejemplo refieren a los configsets de ejemplo anteriores. Las llamadas de ejemplo se abrevian para facilitar la lectura. Para ver la sintaxis completa, consulte [cfn-init](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/cfn-init.html).
+ Si una llamada a `cfn-init` especifica el configset `ascending`:

  ```
  cfn-init -c ascending
  ```

  El script procesa `config1` y, a continuación, procesa `config2` y el archivo `test.txt` contendrá el texto `I come from config2`.
+ Si una llamada a `cfn-init` especifica el configset `descending`:

  ```
  cfn-init -c descending
  ```

  El script procesa `config2` y, a continuación, procesa `config1` y el archivo `test.txt` contendrá el texto `I come from config1`.

### Varios configsets
<a name="w2aac19c23c19c11b7"></a>

Puede crear varios configsets y llamar a una serie de ellos con su script `cfn-init`. Cada configset puede contener una lista de claves de configuración o referencias a otros configsets. Por ejemplo, el siguiente fragmento de código de plantilla crea tres configsets. El primer configset, `test1`, contiene una clave de configuración denominada `1`. El segundo configset, `test2`, contiene una referencia al configset `test1` y una clave de configuración denominada `2`. El tercer configset, de forma predeterminada, contiene una referencia al configset `test2`.

#### JSON
<a name="aws-resource-cloudformation-init-configset-example2.json"></a>

```
"AWS::CloudFormation::Init" : {
    "configSets" : {
        "test1" : [ "1" ],
        "test2" : [ { "ConfigSet" : "test1" }, "2" ],
        "default" : [ { "ConfigSet" : "test2" } ]
    },
    "1" : {
        "commands" : {
            "test" : {
                "command" : "echo \"$MAGIC\" > test.txt",
                "env" : { "MAGIC" : "I come from the environment!" },
                "cwd" : "~"
            }
        }
    },
    "2" : {
        "commands" : {
            "test" : {
                "command" : "echo \"$MAGIC\" >> test.txt",
                "env" : { "MAGIC" : "I am test 2!" },
                "cwd" : "~"
            }
        }
    }
}
```

#### YAML
<a name="aws-resource-cloudformation-init-configset-example2.yaml"></a>

```
AWS::CloudFormation::Init:
  1:
    commands:
      test:
        command: "echo \"$MAGIC\" > test.txt"
        env:
          MAGIC: "I come from the environment!"
        cwd: "~"
  2:
    commands:
      test:
        command: "echo \"$MAGIC\" >> test.txt"
        env:
          MAGIC: "I am test 2!"
        cwd: "~"
  configSets: 
    test1:
      - "1"
    test2:
      - ConfigSet: "test1"
      - "2"
    default:
      - ConfigSet: "test2"
```

#### Llamadas a `cfn-init` relacionadas
<a name="w2aac19c23c19c11b7b9"></a>

Las siguientes llamadas a `cfn-init` hacen referencia a los `configSets` declarados en el anterior fragmento de código de plantilla. Las llamadas de ejemplo se abrevian para facilitar la lectura. Para ver la sintaxis completa, consulte [cfn-init](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/cfn-init.html).
+ Si especifica `test1` solamente:

  ```
  cfn-init -c test1
  ```

  `cfn-init` procesa la clave de configuración `1` solamente.
+ Si especifica `test2` solamente:

  ```
  cfn-init -c test2
  ```

  `cfn-init` procesa la clave de configuración `1` y, a continuación, procesa la clave de configuración `2`.
+ Si especifica el configset `default` (o ningún configset en absoluto):

  ```
  cfn-init -c default
  ```

  Obtendrá el mismo comportamiento que si especifica el configset `test2`.

## Comandos
<a name="aws-resource-init-commands"></a>

Puede utilizar la clave de comandos para ejecutar comandos en la instancia de EC2. Los comandos se procesan en orden alfabético por nombre.


| Clave | Obligatorio | Descripción | 
| --- | --- | --- | 
| `command` | Obligatorio | Una matriz o bien una cadena que especifica el comando que se va a ejecutar. Si utiliza una matriz, no es preciso que utilizar el carácter de escape para los caracteres de espacio ni incluir los parámetros de comandos entre comillas. No utilice la matriz para especificar varios comandos. | 
| `env` | Opcional | Establece las variables de entorno para el comando. Esta propiedad sobrescribe, en lugar de anexar, el entorno existente. | 
| `cwd` | Opcional | El directorio de trabajo. | 
| `test` | Opcional | Un comando de prueba que determina si `cfn-init` ejecuta comandos que se especifican en la clave del comando. Si se supera la prueba, `cfn-init` ejecuta los comandos. El script `cfn-init` ejecuta la prueba en un intérprete de comandos, como Bash o `cmd.exe`. Que la prueba se supere depende del código de salida que el intérprete devuelve.<br />En el caso de Linux, el comando de prueba debe devolver un código de salida de `0` para superar la prueba. En el caso de Windows, el comando de prueba debe devolver un %ERRORLEVEL% de `0`. | 
| `ignoreErrors` | Opcional | Un valor booleano que determina si `cfn-init` continúa poniéndose en marcha si el comando contenido en la clave de comando falla (devuelve un valor distinto de cero). Establezca en `true` si desea que `cfn-init` continúe ejecutándose incluso si el comando falla. Establezca en `false` si desea que `cfn-init` deje de ejecutarse si el comando falla. El valor predeterminado es `false`. | 
| `waitAfterCompletion` | Opcional | Para sistemas Windows solamente. Especifica el tiempo durante el que esperar (en segundos) después de que un comando ha terminado en caso de que el comando provoque un reinicio. El valor predeterminado es de 60 segundos y un valor de “forever” indica a `cfn-init` que salga y reanude la actividad solo después de que se haya completado el reinicio. Establezca este valor en `0` si no desea esperar cada comando. | 

### Ejemplo
<a name="w2aac19c23c19c13b7"></a>

El siguiente fragmento de código de ejemplo llama al comando echo si el archivo `~/test.txt` no existe.

#### JSON
<a name="aws-resource-init-commands-example.json"></a>

```
"commands" : {
    "test" : {
        "command" : "echo \"$MAGIC\" > test.txt",
        "env" : { "MAGIC" : "I come from the environment!" },
        "cwd" : "~",
        "test" : "test ! -e ~/test.txt",
        "ignoreErrors" : "false"
    },
    "test2" : {
        "command" : "echo \"$MAGIC2\" > test2.txt",
        "env" : { "MAGIC2" : "I come from the environment!" },
        "cwd" : "~",
        "test" : "test ! -e ~/test2.txt",
        "ignoreErrors" : "false"
    }
}
```

#### YAML
<a name="aws-resource-init-commands-example.yaml"></a>

```
commands:
  test:
    command: "echo \"$MAGIC\" > test.txt"
    env:
      MAGIC: "I come from the environment!"
    cwd: "~"
    test: "test ! -e ~/test.txt"
    ignoreErrors: "false"
  test2:
    command: "echo \"$MAGIC2\" > test2.txt"
    env:
      MAGIC2: "I come from the environment!"
    cwd: "~"
    test: "test ! -e ~/test2.txt"
    ignoreErrors: "false"
```

## Archivos
<a name="aws-resource-init-files"></a>

Puede utilizar la clave `files` para crear archivos en la instancia de EC2. El contenido puede ser en línea en la plantilla o el contenido puede extraerse de una URL. Los archivos se escriben en el disco en orden lexicográfico. En la tabla siguiente se muestran las claves admitidas.


| Clave | Descripción | 
| --- | --- | 
| `content` | Una cadena o un objeto JSON con formato correcto. Si utiliza un objeto JSON como su contenido, el objeto JSON se escribirá en un archivo en el disco. Cualquier función intrínseca como `Fn::GetAtt` o `Ref` se evalúa antes de que el objeto JSON se escriba en el disco. Al crear un symlink, especifique el destino de symlink como el contenido. Si crea un symlink, el script auxiliar modifica los permisos del archivo de destino. Actualmente, no puede crear un symlink sin modificar los permisos del archivo de destino.  | 
| `source` | Una URL desde la que cargar el archivo. Esta opción no se puede especificar con la clave de contenido. | 
| `encoding` | El formato de la codificación. Solo se utiliza si el contenido es una cadena. La codificación no se aplica si utiliza una fuente.<br />Valores válidos: `plain` \| `base64` | 
| `group` | El nombre del grupo propietario de este archivo. No es compatible con sistemas Windows. | 
| `owner` | El nombre del usuario propietario de este archivo. No es compatible con sistemas Windows. | 
| `mode` | Un valor octal de seis dígitos que representa el modo para este archivo. No es compatible con sistemas Windows. Utilice los tres primeros dígitos para symlinks y los últimos tres dígitos para la configuración de permisos. Para crear un symlink, especifique **120{{xxx}}**, donde `xxx` define los permisos del archivo de destino. Para especificar los permisos de un archivo, utilice los tres últimos dígitos, como **000644**. | 
| `authentication` | El nombre de un método de autenticación que se debe utilizar. Esto anula cualquier autenticación predeterminada. Puede utilizar esta propiedad para seleccionar un método de autenticación definido con el recurso [`AWS::CloudFormation::Authentication`](aws-resource-authentication.md). | 
| `context` | Especifica un contexto para los archivos que se deben procesar como [plantillas de Mustache](https://mustache.github.io/mustache.5.html). Para utilizar esta clave, debe haber instalado `aws-cfn-bootstrap` 1.3-11 o una versión posterior, además de [https://github.com/defunkt/pystache](https://github.com/defunkt/pystache). | 

### Ejemplos
<a name="w2aac19c23c19c15b7"></a>

El siguiente fragmento de código de ejemplo crea un archivo denominado `setup.mysql` como parte de una instalación de mayor tamaño.

#### JSON
<a name="aws-resource-init-setup-mysql.json"></a>

```
"files" : {
  "/tmp/setup.mysql" : {
    "content" : { "Fn::Join" : ["", [
      "CREATE DATABASE ", { "Ref" : "DBName" }, ";\n",
      "CREATE USER '", { "Ref" : "DBUsername" }, "'@'localhost' IDENTIFIED BY '",
                       { "Ref" : "DBPassword" }, "';\n",
      "GRANT ALL ON ", { "Ref" : "DBName" }, ".* TO '", { "Ref" : "DBUsername" },
                       "'@'localhost';\n",
      "FLUSH PRIVILEGES;\n"
      ]]},
    "mode"  : "000644",
    "owner" : "root",
    "group" : "root"
  }
}
```

#### YAML
<a name="aws-resource-init-setup-mysql.yaml"></a>

```
files: 
  /tmp/setup.mysql: 
    content: !Sub |
      CREATE DATABASE ${DBName};
      CREATE USER '${DBUsername}'@'localhost' IDENTIFIED BY '${DBPassword}';
      GRANT ALL ON ${DBName}.* TO '${DBUsername}'@'localhost';
      FLUSH PRIVILEGES;
    mode: "000644"
    owner: "root"
    group: "root"
```

La plantilla completa está disponible en: [https://s3.amazonaws.com/cloudformation-templates-us-east-1/Drupal\_Single\_Instance.template](https://s3.amazonaws.com/cloudformation-templates-us-east-1/Drupal_Single_Instance.template).

El siguiente fragmento de código de ejemplo crea un symlink `/tmp/myfile2.txt` que apunta a un archivo `/tmp/myfile1.txt` existente. Los permisos del archivo de destino `/tmp/myfile1.txt` se definen por el valor de modo `644`.

#### JSON
<a name="aws-resource-init-symlink.json"></a>

```
"files" : {
  "/tmp/myfile2.txt" : {
    "content" : "/tmp/myfile1.txt",
    "mode" : "120644"
  }
}
```

#### YAML
<a name="aws-resource-init-symlink.yaml"></a>

```
files:
  /tmp/myfile2.txt:
    content: "/tmp/myfile1.txt"
    mode: "120644"
```

Las plantillas Mustache se utilizan principalmente para crear archivos de configuración. Por ejemplo, puede almacenar un archivo de configuración en un bucket de S3 e interpolar Refs y GetAtts de la plantilla, en lugar de usar `Fn::Join`. El siguiente fragmento de código de ejemplo muestra `Content for test9` para `/tmp/test9.txt`.

#### JSON
<a name="aws-resource-init-test9.json"></a>

```
"files" : {
    "/tmp/test9.txt" : {
        "content" : "Content for {{name}}",
        "context" : { "name" : "test9" }
    }
}
```

#### YAML
<a name="aws-resource-init-test9.yaml"></a>

```
files:
  /tmp/test9.txt:
    content: "Content for {{name}}"
    context:
      name: "test9"
```

Cuando trabaje con plantillas Mustache, tenga en cuenta lo siguiente:
+ Para que se procesen los archivos, la clave del contexto tiene que estar presente.
+ La clave del contexto debe ser un mapa clave-valor, pero se puede anidar.
+ Puede procesar archivos con contenido en línea mediante la clave de contenido y archivos remoto mediante la clave de origen.
+ La compatibilidad de Mustache depende de la versión de pystache. La versión 0.5.2 es compatible con la [especificación Mustache 1.1.2](https://github.com/mustache/spec/tree/v1.1.2).

## Grupos
<a name="aws-resource-init-groups"></a>

Puede utilizar la clave de grupos para crear grupos de Linux/UNIX y asignar ID de grupo. La clave de grupos no es compatible con sistemas Windows.

Para crear un grupo, añada un nuevo par clave-valor que asigne un nuevo nombre de grupo a un ID de grupo opcional. La clave “groups” puede contener uno o varios nombres de grupo. En la tabla siguiente, se muestran las claves disponibles.


| Clave | Descripción | 
| --- | --- | 
|  `gid` | Número de ID de grupo.<br />Si se especifica un ID de grupo y el nombre del grupo ya existe, se producirá un error al crear el grupo. Si otro grupo tiene el ID de grupo especificado, el sistema operativo podría rechazar la creación del grupo.<br />Ejemplo:: `{ "gid" : "23" }` | 

### Fragmento de código de ejemplo
<a name="aws-resource-init-groups-snippet"></a>

El siguiente fragmento de código especifica un grupo denominado `groupOne` sin asignar un ID de grupo y un grupo denominado `groupTwo` que especifica un valor de ID de grupo de `45`.

#### JSON
<a name="aws-resource-init-groups-snippet.json"></a>

```
"groups" : {
    "groupOne" : {},
    "groupTwo" : { "gid" : "45" }
}
```

#### YAML
<a name="aws-resource-init-groups-snippet.yaml"></a>

```
groups:
  groupOne: {}
  groupTwo:
    gid: "45"
```

## Paquetes
<a name="aws-resource-init-packages"></a>

Puede utilizar la clave de paquetes para descargar e instalar aplicaciones y componentes previamente empaquetados. En los sistemas Windows, la clave de paquetes solo admite el instalador MSI.

### Formatos de paquetes admitidos
<a name="aws-resource-init-packages-formats"></a>

Actualmente, el script `cfn-init` es compatible con los siguientes formatos de paquete: apt, msi, python, rpm, rubygems, yum y Zypper. Los paquetes se procesan en el orden siguiente: rpm, yum/apt/zypper y, a continuación, rubygems y python. No existe ningún orden establecido entre rubygems y python, y los paquetes dentro de cada administrador de paquetes no tienen garantizada la instalación en ningún orden.

### Especificación de versiones
<a name="aws-resource-init-packages-versions"></a>

Dentro de cada administrador de paquetes, cada paquete se especifica con un nombre de paquete y una lista de versiones. La versión puede ser una cadena, una lista de versiones o una cadena o lista vacía. Una cadena o lista vacía indica que se debe usar la versión más reciente. Para el administrador de rpm, la versión se especifica como una ruta a un archivo en el disco o una URL.

Si especifica una versión de un paquete, `cfn-init` intentará instalar esa versión, incluso si ya hay una versión más reciente del paquete instalada en la instancia. Algunos administradores de paquetes admiten varias versiones, pero puede haber otros que no. Verifique la documentación del administrador de paquetes para obtener más información. Si no especifica una versión y ya hay una versión del paquete instalada, el script `cfn-init` no instalará una nueva versión, sino que presupondrá que desea mantener y utilizar la versión existente.

### Fragmentos de código de ejemplo
<a name="aws-resource-init-packages-snippet"></a>

#### RPM, yum, Rubygems y Zypper
<a name="w2aac19c23c19c19b9b3"></a>

El siguiente fragmento de código especifica una URL de versión para rpm, solicita las últimas versiones de yum y Zypper, y la versión 0.10.2 de chef de rubygems:

##### JSON
<a name="aws-resource-init-packages-example1.json"></a>

```
"rpm" : {
  "epel" : "http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm"
},
"yum" : {
  "httpd" : [],
  "php" : [],
  "wordpress" : []
},
"rubygems" : {
  "chef" : [ "0.10.2" ]
},
"zypper" : {
  "git" : []
}
```

##### YAML
<a name="aws-resource-init-packages-example1.yaml"></a>

```
rpm:
  epel: "http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm"
yum:
  httpd: []
  php: []
  wordpress: []
rubygems:
  chef:
    - "0.10.2"
zypper:
  git: []
```

#### Paquete MSI
<a name="w2aac19c23c19c19b9b5"></a>

El siguiente fragmento de código especifica una URL para un paquete MSI:

##### JSON
<a name="aws-resource-init-packages-example2.json"></a>

```
"msi" : {
  "awscli" : "https://s3.amazonaws.com/aws-cli/AWSCLI64.msi"
}
```

##### YAML
<a name="aws-resource-init-packages-example2.yaml"></a>

```
msi:
  awscli: "https://s3.amazonaws.com/aws-cli/AWSCLI64.msi"
```

## Servicios
<a name="aws-resource-init-services"></a>

Puede utilizar la clave de servicios para definir qué servicios deben habilitarse o deshabilitarse cuando se lanza la instancia. Los sistemas Amazon Linux 2 y superiores que ejecutan la versión 2.0-29\+ de `aws-cfn-bootstrap` admiten esta clave mediante el uso de systemd. Otros sistemas de Linux admiten esta clave mediante sysvinit (de forma predeterminada) o systemd (al agregar las configuraciones necesarias a continuación). Los sistemas Windows admiten esta clave a través del Administrador de servicios de Windows.

La clave de servicios también le permite especificar dependencias en orígenes, paquetes y archivos. De esta manera, si es necesario realizar un reinicio debido a los archivos que se están instalado, `cfn-init` se encargará de reiniciar el servicio. Por ejemplo, si descarga el paquete del servidor HTTP Apache, la instalación del paquete comenzará automáticamente el servidor HTTP Apache durante el proceso de creación de la pila. Sin embargo, si la configuración del servidor HTTP Apache se actualiza más adelante en el proceso de creación de la pila, la actualización no surtirá efecto hasta que se reinicie el servidor Apache. Puede utilizar la clave de servicios para asegurarse de que se reinicia el servicio HTTP Apache.

En la tabla siguiente se muestran las claves admitidas.


| Clave | Descripción | 
| --- | --- | 
| `ensureRunning` | Establézcalo en verdadero para garantizar que el servicio se ejecuta una vez que finaliza `cfn-init`.<br />Establézcalo en falso para garantizar que el servicio no se ejecuta una vez que finaliza `cfn-init`.<br />Omita esta clave para no realizar ningún cambio en el estado del servicio. | 
| `enabled` | Establezca en true para garantizar que el servicio comenzará automáticamente al arrancar.<br />Establezca en false para garantizar que el servicio no comenzará automáticamente al arrancar.<br />Omita esta clave para no realizar ningún cambio a esta propiedad. | 
| `files` | Una lista de archivos. Si `cfn-init` cambia uno directamente a través del bloque de archivos, este servicio se reiniciará. | 
| sources | Una lista de directorios. Si `cfn-init` amplía un archivo hacia uno de estos directorios, este servicio se reinicia. | 
| packages | Una asignación del administrador de paquetes con la lista de nombres de paquetes. Si `cfn-init` instala o actualiza uno de estos paquetes, este servicio se reinicia. | 
| comandos | Una lista de nombres de comandos. Si `cfn-init` ejecuta el comando especificado, este servicio se reinicia. | 

### Ejemplos
<a name="w2aac19c23c19c21c11"></a>

#### Linux
<a name="w2aac19c23c19c21c11b3"></a>

El siguiente fragmento de código de Linux configura los servicios de la siguiente manera:
+ El servicio nginx se reiniciará si `/etc/nginx/nginx.conf` o `/var/www/html` es modificado por `cfn-init`.
+ El servicio php-fastcgi se reiniciará si `cfn-init` instala o actualiza php o spawn-fcgi mediante yum.
+ El servicio sendmail se interrumpirá y deshabilitará mediante systemd.

##### JSON
<a name="aws-resource-init-services-example1.json"></a>

```
"services" : {
  "sysvinit" : {
    "nginx" : {
      "enabled" : "true",
      "ensureRunning" : "true",
      "files" : ["/etc/nginx/nginx.conf"],
      "sources" : ["/var/www/html"]
    },
    "php-fastcgi" : {
      "enabled" : "true",
      "ensureRunning" : "true",
      "packages" : { "yum" : ["php", "spawn-fcgi"] }
    }
  },
  "systemd": {
    "sendmail" : {
      "enabled" : "false",
      "ensureRunning" : "false"
    }
  }
}
```

##### YAML
<a name="aws-resource-init-services-example1.yaml"></a>

```
services:
  sysvinit:
    nginx:
      enabled: "true"
      ensureRunning: "true"
      files:
        - "/etc/nginx/nginx.conf"
      sources:
        - "/var/www/html"
    php-fastcgi:
      enabled: "true"
      ensureRunning: "true"
      packages:
        yum:
          - "php"
          - "spawn-fcgi"
  systemd:
    sendmail:
      enabled: "false"
      ensureRunning: "false"
```

Para usar systemd con un servicio, este debe tener configurado un archivo de unidad systemd. El siguiente archivo de unidad permite que systemd inicie y detenga el daemon `cfn-hup` en el destino del servicio multiusuario:

```
[Unit]
Description=cfn-hup daemon
[Service]
ExecStart=/usr/bin/cfn-hup -v
PIDFile=/var/run/cfn-hup.pid
[Install]
WantedBy=multi-user.target
```

Para esta configuración, se presupone que `cfn-hup` está instalado en el directorio `/usr/bin`. Sin embargo, la ubicación real donde se instala `cfn-hup` puede variar en diferentes plataformas. Para anular esta configuración, puede crear un archivo de anulación en `/etc/systemd/system/cfn-hup.service.d/override.conf` de la siguiente manera:

```
# In this example, cfn-hup executable is available under /usr/local/bin
[Service]
ExecStart=
ExecStart=/usr/local/bin/cfn-hup -v
```

#### Windows
<a name="aws-resource-init-windows-example"></a>

El siguiente fragmento de código de Windows inicia el servicio `cfn-hup`, lo establece en automático y reinicia el servicio si `cfn-init` modifica los archivos de configuración especificados:

##### JSON
<a name="aws-resource-init-services-example2.json"></a>

```
"services" : {
  "windows" : {
    "cfn-hup" : {
      "enabled" : "true",
      "ensureRunning" : "true",
      "files" : ["c:\\cfn\\cfn-hup.conf", "c:\\cfn\\hooks.d\\cfn-auto-reloader.conf"]
    }
  }
}
```

##### YAML
<a name="aws-resource-init-services-example2.yaml"></a>

```
services:
  windows:
    cfn-hup:
      enabled: "true"
      ensureRunning: "true"
      files:
        - "c:\\cfn\\cfn-hup.conf"
        - "c:\\cfn\\hooks.d\\cfn-auto-reloader.conf"
```

## Orígenes
<a name="aws-resource-init-sources"></a>

Puede utilizar la clave de origen para descargar un archivo de almacenamiento y extraerlo en un directorio de destino en la instancia de EC2. Esta clave es totalmente compatible con los sistemas Linux y Windows.

**Formatos admitidos**  
Los formatos admitidos son:
+ `tar`
+ `tar+gzip`
+ `tar+bz2`
+ `zip`

### Ejemplos
<a name="aws-resource-init-sources-examples"></a>

#### GitHub
<a name="aws-resource-init-sources-examples-github"></a>

Si usa GitHub como un sistema de control de origen, puede usar `cfn-init` y el mecanismo del paquete de origen para extraer una versión específica de su aplicación. GitHub le permite crear un zip o un tar a partir de una versión específica a través de una URL de la siguiente manera:

```
https://github.com/<your directory>/(zipball|tarball)/<version>
```

Por ejemplo, el siguiente fragmento de código extrae la versión `main` como un archivo `.tar`.

##### JSON
<a name="aws-resource-init-sources-example1.json"></a>

```
"sources" : {
  "/etc/puppet" : "https://github.com/user1/cfn-demo/tarball/main"
  }
```

##### YAML
<a name="aws-resource-init-sources-example1.yaml"></a>

```
sources:
  /etc/puppet: "https://github.com/user1/cfn-demo/tarball/main"
```

#### Bucket de S3
<a name="aws-resource-init-sources-examples-s3"></a>

En el siguiente ejemplo, se descarga un tarball de un bucket de S3 y se desempaqueta en `/etc/myapp`:

**nota**  
Puede utilizar las credenciales de autenticación para un origen. Sin embargo, no puede incluir una clave de autenticación en el bloque de fuentes. En su lugar, incluya una clave de cubos en su bloque de `S3AccessCreds`. Para obtener más información sobre las credenciales de autenticación de Amazon S3, consulte [`AWS::CloudFormation::Authentication`](aws-resource-authentication.md).  
Para ver un ejemplo, consulte [https://s3.amazonaws.com/cloudformation-templates-us-east-1/S3Bucket\_SourceAuth.template](https://s3.amazonaws.com/cloudformation-templates-us-east-1/S3Bucket_SourceAuth.template).

##### JSON
<a name="aws-resource-init-sources-example2.json"></a>

```
"sources" : {
  "/etc/myapp" : "https://s3.amazonaws.com/{{amzn-s3-demo-bucket}}/myapp.tar.gz"
  }
```

##### YAML
<a name="aws-resource-init-sources-example2.yaml"></a>

```
sources:
  /etc/myapp: "https://s3.amazonaws.com/{{amzn-s3-demo-bucket}}/myapp.tar.gz"
```

## Usuarios
<a name="aws-resource-init-users"></a>

Puede utilizar la clave de usuarios para crear usuarios de Linux/UNIX en la instancia de EC2. La clave `users` no es compatible con sistemas Windows.

En la tabla siguiente se muestran las claves admitidas.


| Clave | Descripción | 
| --- | --- | 
| `uid` | ID de usuario. El proceso de creación falla si existe un nombre de usuario con otro ID. Si el ID de usuario ya se ha asignado a un usuario existente, el sistema operativo podría rechazar la solicitud de creación. | 
| `groups` | Lista de nombres de grupos. Se añadirá al usuario a cada grupo en la lista. | 
| `homeDir` | Directorio de inicio del usuario. | 

### Ejemplo
<a name="aws-resource-init-users-example"></a>

Los usuarios se crean como usuarios de un sistema no interactivo con un shell de `/sbin/nologin`. Esto es así por diseño y no se puede modificar.

#### JSON
<a name="aws-resource-init-users-example.json"></a>

```
"users" : {
    "myUser" : {
        "groups" : ["groupOne", "groupTwo"],
        "uid" : "50",
        "homeDir" : "/tmp"
    }
}
```

#### YAML
<a name="aws-resource-init-users-example.yaml"></a>

```
users:
  myUser:
    groups:
      - "groupOne"
      - "groupTwo"
    uid: "50"
    homeDir: "/tmp"
```