

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Muestras de servicios cruzados para CodeBuild
<a name="cross-service-samples"></a>

Puede utilizar estos ejemplos de servicios cruzados para experimentar con: AWS CodeBuild

[Ejemplo de Amazon ECR](sample-ecr.md)  
Utiliza una imagen de Docker de un repositorio de Amazon ECR para usar Apache Maven para generar un único archivo JAR. Las instrucciones de ejemplo le mostrarán cómo crear y enviar una imagen de Docker a Amazon ECR, crear un proyecto de Go, compilar el proyecto, ejecutar el proyecto y configurar los permisos para permitir la conexión CodeBuild a Amazon ECR.

[Ejemplo de Amazon EFS](sample-efs.md)  
Muestra cómo configurar un archivo buildspec para que un CodeBuild proyecto se monte y se compile en un sistema de archivos Amazon EFS. Las instrucciones de ejemplo le mostrarán cómo crear una instancia de Amazon VPC, crear un sistema de archivos en la instancia de Amazon VPC, crear y compilar un proyecto que use la instancia de Amazon VPC y, después, revisar el archivo y las variables del proyecto generado. 

[AWS CodePipeline muestras](sample-codepipeline.md)  
Muestra cómo crear una compilación con compilaciones por lotes, así como con múltiples fuentes de entrada y múltiples artefactos de salida. AWS CodePipeline En esta sección se incluyen archivos JSON de ejemplo que muestran estructuras de canalización que crean compilaciones por lotes con artefactos individuales y artefactos combinados. Se incluye un ejemplo de JSON adicional que muestra la estructura de la canalización con varios orígenes de entrada y múltiples artefactos de salida.

[AWS Config muestra](how-to-integrate-config.md)  
Muestra cómo configurarlo AWS Config. Muestra CodeBuild los recursos a los que se hace un seguimiento y describe cómo buscar CodeBuild los proyectos en ellos AWS Config. Las instrucciones de ejemplo le mostrarán los requisitos previos para la integración AWS Config, los pasos para AWS Config configurarlos y los pasos para buscar CodeBuild proyectos y datos. AWS Config

[Ejemplo de notificaciones de compilación](sample-build-notifications.md)  
Utiliza Apache Maven para producir un único archivo JAR. Envía una notificación de compilación a los suscriptores de un tema de Amazon SNS Los ejemplos de instrucciones muestran cómo configurar los permisos para CodeBuild poder comunicarse con Amazon SNS y CloudWatch cómo crear e identificar CodeBuild temas en Amazon SNS, cómo suscribir a los destinatarios del tema y cómo configurar las reglas en. CloudWatch

# Ejemplo de Amazon ECR para CodeBuild
<a name="sample-ecr"></a>

En este ejemplo, se utiliza una imagen de Docker en un repositorio de imágenes Amazon Elastic Container Registry (Amazon ECR) para compilar un proyecto de Go de ejemplo.

**importante**  
Al ejecutar este ejemplo, es posible que se produzcan cargos en su AWS cuenta. Estos incluyen posibles cargos por AWS CodeBuild y por AWS los recursos y acciones relacionados con Amazon S3 AWS KMS, CloudWatch Logs y Amazon ECR. Para obtener más información, consulte [CodeBuild los precios, precios](https://aws.amazon.com/codebuild/pricing) de [Amazon S3, precios](https://aws.amazon.com/s3/pricing), [AWS Key Management Service precios](https://aws.amazon.com/kms/pricing) de [Amazon y CloudWatch precios](https://aws.amazon.com/cloudwatch/pricing) de [Amazon Elastic Container Registry](https://aws.amazon.com/ecr/pricing).

**Topics**
+ [Ejecución del ejemplo de Amazon ECR](#sample-ecr-running)

## Ejecución del ejemplo de Amazon ECR
<a name="sample-ecr-running"></a>

Utilice las siguientes instrucciones para ejecutar el ejemplo de Amazon ECR para CodeBuild.

**Para ejecutar este ejemplo**

1. Para crear e insertar la imagen de Docker en su repositorio de imágenes de Amazon ECR, siga los pasos que se indican en la sección [Ejecución del ejemplo de publicación de una imagen de Docker en Amazon ECR](sample-docker.md#sample-docker-running) de [Ejemplo de publicación de una imagen de Docker en Amazon ECR](sample-docker.md).

1. Crear un proyecto de Go: 

   1. Cree los archivos tal y como se describe en las [Archivos de un proyecto de Go](#sample-ecr-go-project-files) secciones [Estructura de un proyecto de Go](#ecr-sample-go-project-file-structure) y de este tema y, a continuación, cárguelos en un depósito de entrada de S3 o en un AWS CodeCommit GitHub repositorio de Bitbucket. 
**importante**  
No cargue `(root directory name)`, solo los archivos incluidos en `(root directory name)`.   
Si utiliza un bucket de entrada de S3, no olvide crear un archivo ZIP que contenga los archivos y cárguelo en el bucket de entrada. No añada `(root directory name)` al archivo ZIP, solo los archivos incluidos en `(root directory name)`.

   1. Cree un proyecto de compilación, ejecute la compilación y vea la información de compilación relacionada.

      Si utilizas el AWS CLI para crear el proyecto de compilación, la entrada del `create-project` comando con formato JSON podría tener un aspecto similar al siguiente. (Sustituya los marcadores de posición por sus propios valores).

      ```
      {
        "name": "sample-go-project",
        "source": {
          "type": "S3",
          "location": "codebuild-region-ID-account-ID-input-bucket/GoSample.zip"
        },
        "artifacts": {
          "type": "S3",
          "location": "codebuild-region-ID-account-ID-output-bucket",
          "packaging": "ZIP",
          "name": "GoOutputArtifact.zip"
        },
        "environment": {
          "type": "LINUX_CONTAINER",
          "image": "aws/codebuild/standard:5.0",
          "computeType": "BUILD_GENERAL1_SMALL"
        },
        "serviceRole": "arn:aws:iam::account-ID:role/role-name",
        "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
      }
      ```

   1. Para obtener el artefacto de salida de la compilación, abra el bucket de salida de S3.

   1. Descargue el archivo `GoOutputArtifact.zip` en su equipo o instancia local y después extraiga el contenido del archivo . En el contenido extraído, obtenga el archivo `hello`. 

1.  Si se cumple una de las siguientes condiciones, debe añadir permisos a su repositorio de imágenes en Amazon ECR para que AWS CodeBuild pueda incorporar su imagen de Docker al entorno de compilación. 
   +  Su proyecto utiliza CodeBuild credenciales para extraer imágenes de Amazon ECR. Esto se especifica mediante el valor `CODEBUILD` del atributo `imagePullCredentialsType` de `ProjectEnvironment`. 
   +  Su proyecto utiliza una imagen de Amazon ECR entre más de una cuenta. En este caso, el proyecto debe utilizar su rol de servicio para extraer imágenes de Amazon ECR. Para habilitar este comportamiento, establezca el atributo `imagePullCredentialsType` de `ProjectEnvironment` en `SERVICE_ROLE`. 

   1. Abra la consola Amazon ECR en [https://console.aws.amazon.com/ecr/](https://console.aws.amazon.com/ecr/).

   1. En la lista de nombres de repositorio, elija el nombre del repositorio que ha creado o seleccionado.

   1. En el panel de navegación, elija **Permissions (Permisos)**, **Edit (Editar)** y **Add statement (Agregar instrucción)**.

   1. En **Statement name (Nombre de instrucción)**, introduzca un identificador (por ejemplo, **CodeBuildAccess**).

   1. En **Effect (Efecto)**, deje seleccionado **Allow (Permitir)**. Esto indica que desea permitir el acceso a otra cuenta de AWS .

   1. En **Principal**, realice una de las siguientes acciones:
      + Si su proyecto utiliza CodeBuild credenciales para extraer una imagen de Amazon ECR, introduzca **codebuild.amazonaws.com** en **Service principal**. 
      + Si tu proyecto utiliza una imagen de Amazon ECR multicuenta, para la **AWS cuenta IDs**, introduce IDs las AWS cuentas a las que quieres dar acceso.

   1. Omita la lista **Todas las entidades de IAM**.

   1. **En **Acción**, selecciona las acciones de solo extracción: ecr:GetDownloadUrlForLayer, **ecr:** y **ecr**:. BatchGetImage BatchCheckLayerAvailability**

   1. En **Condiciones**, añada lo siguiente:

      ```
      {
         "StringEquals":{
            "aws:SourceAccount":"<AWS-account-ID>",
            "aws:SourceArn":"arn:aws:codebuild:<region>:<AWS-account-ID>:project/<project-name>"
         }
      }
      ```

   1. Seleccione **Guardar**.

      Esta política aparece en **Permisos**. La entidad principal es la especificada en **Entidad principal** en el paso 3 de este procedimiento:
      + Si su proyecto utiliza CodeBuild credenciales para extraer una imagen de Amazon ECR, `"codebuild.amazonaws.com"` aparece en **Principios de servicio**.
      + **Si tu proyecto utiliza una imagen de Amazon ECR multicuenta, el ID de la AWS cuenta a la que quieres dar acceso aparece en AWS Cuenta. IDs**

        El siguiente ejemplo de política utiliza tanto CodeBuild las credenciales como una imagen de Amazon ECR multicuenta.

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "CodeBuildAccessPrincipal",
                  "Effect": "Allow",
                  "Action": [
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:BatchGetImage",
                      "ecr:BatchCheckLayerAvailability"
                  ],
                  "Resource": "*",
                  "Condition": {
                      "StringEquals": {
                          "aws:SourceArn": "arn:aws:codebuild:us-east-1:111122223333:project/MyProject",
                          "aws:SourceAccount": "111122223333"
                      }
                  }
              },
              {
                  "Sid": "CodeBuildAccessCrossAccount",
                  "Effect": "Allow",
                  "Action": [
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:BatchGetImage",
                      "ecr:BatchCheckLayerAvailability"
                  ],
                  "Resource": "*"
              }
          ]
      }
      ```

------
      + Si sus proyectos utilizan CodeBuild credenciales y desea que tengan acceso abierto al repositorio de Amazon ECR, puede omitir `Condition` las claves y añadir la siguiente política de ejemplo. CodeBuild 

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "CodeBuildAccessPrincipal",
                  "Effect": "Allow",
                  "Resource": [
                      "arn:aws:codecommit:us-east-2:111122223333:MySharedDemoRepo"
                  ],
                  "Action": [
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:BatchGetImage",
                      "ecr:BatchCheckLayerAvailability"
                  ]
              },
              {
                  "Sid": "CodeBuildAccessCrossAccount",
                  "Effect": "Allow",
                  "Resource": [
                      "arn:aws:codecommit:us-east-2:111122223333:MySharedDemoRepo"
                  ],
                  "Action": [
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:BatchGetImage",
                      "ecr:BatchCheckLayerAvailability"
                  ]
              }
          ]
      }
      ```

------

1. Cree un proyecto de compilación, ejecute la compilación y vea la información de compilación.

   Si utiliza la AWS CLI para crear el proyecto de compilación, la entrada del `create-project` comando con formato JSON podría tener un aspecto similar al siguiente. (Sustituya los marcadores de posición por sus propios valores).

   ```
   {
     "name": "amazon-ecr-sample-project",
     "source": {
       "type": "S3",
       "location": "codebuild-region-ID-account-ID-input-bucket/GoSample.zip"
     },
     "artifacts": {
       "type": "S3",
       "location": "codebuild-region-ID-account-ID-output-bucket",
       "packaging": "ZIP",
       "name": "GoOutputArtifact.zip"
     },
     "environment": {
       "type": "LINUX_CONTAINER",
       "image": "account-ID.dkr.ecr.region-ID.amazonaws.com/your-Amazon-ECR-repo-name:tag",
       "computeType": "BUILD_GENERAL1_SMALL"
     },
     "serviceRole": "arn:aws:iam::account-ID:role/role-name",
     "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
   }
   ```

1. Para obtener el artefacto de salida de la compilación, abra el bucket de salida de S3.

1. Descargue el archivo `GoOutputArtifact.zip` en su equipo o instancia local y después extraiga el contenido del archivo `GoOutputArtifact.zip`. En el contenido extraído, obtenga el archivo `hello`.

### Estructura de un proyecto de Go
<a name="ecr-sample-go-project-file-structure"></a>

En este ejemplo se presupone que existe esta estructura de directorios.

```
(root directory name)
├── buildspec.yml
└── hello.go
```

### Archivos de un proyecto de Go
<a name="sample-ecr-go-project-files"></a>

Este ejemplo usa los siguientes archivos.

`buildspec.yml` (in `(root directory name)`)

```
version: 0.2

phases:
  install: 
   runtime-versions: 
     golang: 1.13 
  build:
    commands:
      - echo Build started on `date`
      - echo Compiling the Go code
      - go build hello.go 
  post_build:
    commands:
      - echo Build completed on `date`
artifacts:
  files:
    - hello
```

`hello.go` (in `(root directory name)`)

```
package main
import "fmt"

func main() {
  fmt.Println("hello world")
  fmt.Println("1+1 =", 1+1)
  fmt.Println("7.0/3.0 =", 7.0/3.0)
  fmt.Println(true && false)
  fmt.Println(true || false)
  fmt.Println(!true)
}
```

# Ejemplo de Amazon Elastic File System para AWS CodeBuild
<a name="sample-efs"></a>

 Es posible que desee crear sus AWS CodeBuild compilaciones en Amazon Elastic File System, un servicio de archivos compartidos y escalable para instancias de Amazon EC2. La capacidad de almacenamiento con Amazon EFS es elástica, por lo que aumenta o disminuye a medida que se añaden y eliminan archivos. Tiene una interfaz de servicios web sencilla que puede utilizar para crear y configurar sistemas de archivos. También administra automáticamente toda la infraestructura de almacenamiento de archivos, por lo que no tiene que preocuparse por la implementación, aplicación de parches o el mantenimiento de configuraciones del sistema de archivos. Para obtener más información, consulte [¿Qué es Amazon Elastic File System?](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) en la *Guía del usuario de Amazon Elastic File System*. 

 En este ejemplo se muestra cómo configurar un CodeBuild proyecto para que monte y, a continuación, cree una aplicación Java en un sistema de archivos Amazon EFS. Antes de empezar, debe tener una aplicación Java lista para ser compilada y cargada en un depósito de entrada de S3 o en un AWS CodeCommit GitHub repositorio de GitHub Enterprise Server o Bitbucket. 

Los datos en tránsito para su sistema de archivos están cifrados. Para cifrar los datos en tránsito con una imagen distinta, consulte [Cifrado de datos en tránsito](https://docs.aws.amazon.com/efs/latest/ug/encryption-in-transit.html). 

**Topics**
+ [Uso AWS CodeBuild con Amazon Elastic File System](#sample-efs-high-level-steps)
+ [Solución de problemas de integración de Amazon EFS](sample-efs-troubleshooting.md)

## Uso AWS CodeBuild con Amazon Elastic File System
<a name="sample-efs-high-level-steps"></a>

En el ejemplo se describen los cuatro pasos de alto nivel necesarios para utilizar Amazon EFS con AWS CodeBuild. Son los siguientes: 

1. Cree una nube privada virtual (VPC) en su AWS cuenta. 

1. Crear un sistema de archivos que utilice esta VPC. 

1. Cree y cree un CodeBuild proyecto que utilice la VPC. El CodeBuild proyecto utiliza lo siguiente para identificar el sistema de archivos:
   +  Un identificador único del sistema de archivos. El identificador se elige al especificar el sistema de archivos en el proyecto de compilación.
   + El ID del sistema de archivos. El ID se muestra cuando ve el sistema de archivos en la consola de Amazon EFS.
   +  Un punto de montaje. Se trata de un directorio en el contenedor Docker que monta el sistema de archivos. 
   + Opciones de montaje. Incluyen detalles sobre cómo montar el sistema de archivos.

1. Revise el proyecto de compilación para asegurarse de que se han generado las variables y los archivos del proyecto correctos.

**nota**  
 Un sistema de archivos creado en Amazon EFS solo es compatible con las plataformas Linux. 

 

**Topics**
+ [Paso 1: Crear una VPC mediante CloudFormation](#sample-efs-create-vpc)
+ [Paso 2: creación de un sistema de archivos de Amazon Elastic File System con su VPC](#sample-efs-create-efs)
+ [Paso 3: Crear un CodeBuild proyecto para usarlo con Amazon EFS](#sample-efs-create-acb)
+ [Paso 4: revisión del proyecto de compilación](#sample-efs-summary)

### Paso 1: Crear una VPC mediante CloudFormation
<a name="sample-efs-create-vpc"></a>

 Cree su VPC con una CloudFormation plantilla. 

1.  Siga las instrucciones de uso [CloudFormationPlantilla de VPC de](cloudformation-vpc-template.md) para CloudFormation crear una VPC. 
**nota**  
 La VPC creada por esta CloudFormation plantilla tiene dos subredes privadas y dos subredes públicas. Solo debe utilizar subredes privadas cuando use AWS CodeBuild para montar el sistema de archivos que ha creado en Amazon EFS. Si utiliza alguna de las subredes públicas, la compilación genera un error. 

1. Inicie sesión en la consola de Amazon VPC Consola de administración de AWS y ábrala en. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)

1.  Elija la VPC con la que creó. CloudFormation

1. En la pestaña **Description (Descripción)**, anote el nombre de la VPC y su ID. Ambos serán necesarios cuando cree su proyecto de AWS CodeBuild más adelante en este ejemplo. 

### Paso 2: creación de un sistema de archivos de Amazon Elastic File System con su VPC
<a name="sample-efs-create-efs"></a>

 Cree un sistema de archivos sencillo de Amazon EFS de ejemplo utilizando la VPC que creó anteriormente. 

1. Inicie sesión en la consola de Amazon EFS Consola de administración de AWS y ábrala en [ https://console.aws.amazon.com/efs/](https://console.aws.amazon.com/efs/).

1.  Seleccione **Crear sistema de archivos**. 

1.  Desde **VPC**, elija el nombre de VPC que anotó anteriormente en este ejemplo. 

1.  Deje las zonas de disponibilidad asociadas a las subredes seleccionadas. 

1.  Elija **Paso siguiente**. 

1.  En **Añadir etiquetas**, para la clave **Nombre** predeterminada, en **Valor**, introduzca el nombre de su sistema de archivos de Amazon EFS. 

1.  Mantenga **Transmisión por ráfagas** y **Uso general** seleccionados como sus modos de desempeño y rendimiento predeterminados, y luego elija **Paso siguiente**. 

1. En **Configurar acceso de cliente**, seleccione **Paso siguiente**.

1.  Seleccione **Crear sistema de archivos**. 

1.  (Opcional) Le recomendamos añadir una política a su sistema de archivos de Amazon EFS que imponga el cifrado de los datos en tránsito. En la consola de Amazon EFS, elija **Política del sistema de archivos**, elija **Editar**, seleccione la casilla **Aplicar el cifrado en tránsito para todos los clientes** y, a continuación, seleccione **Guardar**.

### Paso 3: Crear un CodeBuild proyecto para usarlo con Amazon EFS
<a name="sample-efs-create-acb"></a>

 Cree un AWS CodeBuild proyecto que utilice la VPC que creó anteriormente en este ejemplo. Al ejecutar la compilación, se monta el sistema de archivos de Amazon EFS que se ha creado anteriormente. A continuación, se almacena el archivo .jar que la aplicación Java ha creado en el directorio de puntos de montaje del sistema de archivos.

1. Abre la AWS CodeBuild consola en [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1.  En el panel de navegación, elija **Build projects (Proyectos de compilación)** y después **Create build project (Crear proyecto de compilación)**. 

1.  En **Nombre del proyecto**, introduzca un nombre para el proyecto. 

1.  En **Source provider (Proveedor de código fuente)**, elija el repositorio que contiene la aplicación Java que desea compilar. 

1.  Introduzca la información, como la URL del repositorio, que se CodeBuild utiliza para localizar la aplicación. Las opciones son diferentes para cada proveedor de código fuente. Para obtener más información, consulte [Choose source provider](create-project.md#create-project-source-provider). 

1.  En **Imagen de entorno**, elija **Imagen administrada**. 

1.  En **Sistema operativo**, elija **Amazon Linux 2**. 

1. En **Tiempo(s) de ejecución**, elija **Estándar**. 

1.  En **Imagen**, elija **aws/codebuild/amazonlinux-x86\$164-standard:4.0**. 

1.  En **Tipo de entorno**, elija **Linux**. 

1.  En **Rol de servicio**, elija **Nuevo rol de servicio**. En Nombre del **rol, introduzca un nombre** para el rol que cree para usted. CodeBuild 

1. Expanda **Configuración adicional**.

1.  Seleccione **Enable this flag if you want to build Docker images or want your builds to get elevated privileges (Habilite este indicador si desea compilar imágenes de Docker o que sus compilaciones tengan privilegios elevados)**.
**nota**  
De forma predeterminada, el daemon de Docker está habilitado para compilaciones sin VPC. Si quiere usar contenedores de Docker para las compilaciones de VPC, consulte [Runtime Privilege and Linux Capabilities](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) en el sitio web de Docker Docs y habilite el modo privilegiado. Además, Windows no admite el modo privilegiado.

1.  En **VPC**, elija el ID de VPC. 

1.  En **Subredes**, elija una o varias subredes privadas asociadas con su VPC. Debe utilizar subredes privadas en una compilación que monta un sistema de archivos de Amazon EFS. Si utiliza una subred pública, la compilación genera un error. 

1.  En **Security groups (Grupos de seguridad)**, elija el grupo de seguridad predeterminado.

1.  En **File systems (Sistemas de archivos)**, escriba la siguiente información:
   + En **Identifier (Identificador)**, introduzca un identificador único del sistema de archivos. Debe tener menos de 129 caracteres y contener sólo caracteres alfanuméricos y guiones bajos. CodeBuild utiliza este identificador para crear una variable de entorno que identifica el sistema de archivos elástico. El formato de la variable de entorno es `CODEBUILD_<file_system_identifier>`, en mayúsculas. Por ejemplo, si introduce `my_efs`, la variable de entorno es `CODEBUILD_MY_EFS`. 
   + En **ID**, elija el ID del sistema de archivos. 
   + (Opcional) Introduzca un directorio en el sistema de archivos. CodeBuild monta este directorio. Si deja **Directory path (Ruta del directorio)** en blanco, CodeBuild monta todo el sistema de archivos. La ruta es relativa a la raíz del sistema de archivos. 
   + En **Punto de montaje**, introduzca la ruta absoluta del directorio en el contenedor de compilación donde se monta el sistema de archivos. Si este directorio no existe, lo CodeBuild crea durante la compilación. 
   + (Opcional) Introduzca las opciones de montaje. Si deja **las opciones de montaje** en blanco, CodeBuild utiliza sus opciones de montaje predeterminadas:

     ```
     nfsvers=4.1
     rsize=1048576
     wsize=1048576
     hard
     timeo=600
     retrans=2
     ```

     Para obtener más información, consulte [Opciones recomendadas de montaje NFS](https://docs.aws.amazon.com/efs/latest/ug/mounting-fs-nfs-mount-settings.html) en la *Guía del usuario de Amazon Elastic File System*. 

1.  En **Build specification (Especificación de compilación)**, elija **Insert build commands (Insertar comandos de compilación)** y, a continuación, elija **Switch to editor (Cambiar a editor)**. 

1.  Introduzca los siguientes comandos de especificaciones de compilación en el editor. Reemplace `<file_system_identifier>` por el identificador que ha especificado en el paso 17. Use letras mayúsculas (por ejemplo, `CODEBUILD_MY_EFS`).

   ```
   version: 0.2
   phases:
     install:
       runtime-versions:
         java: corretto11    
     build:
       commands:
         - mvn compile -Dgpg.skip=true -Dmaven.repo.local=$CODEBUILD_<file_system_identifier>
   ```

1.  Utilice los valores predeterminados para el resto de opciones y, a continuación, elija **Create build project (Crear proyecto de compilación)**. Cuando la compilación se haya completado, se muestra la página de la consola para su proyecto. 

1.  Seleccione **Iniciar la compilación**. 

### Paso 4: revisión del proyecto de compilación
<a name="sample-efs-summary"></a>



 Una vez creado el AWS CodeBuild proyecto: 
+  Tiene un archivo .jar creado por su aplicación Java que se integra en el sistema de archivos de Amazon EFS, en el directorio del punto de montaje. 
+  Se crea una variable de entorno que identifica el sistema de archivos con el identificador de sistema de archivos que especificó al crear el proyecto. 

 Para obtener más información, consulte [Montaje de sistemas de archivos](https://docs.aws.amazon.com/efs/latest/ug/mounting-fs.html) en la *Guía del usuario de Amazon Elastic File System*. 

# Solución de problemas de integración de Amazon EFS
<a name="sample-efs-troubleshooting"></a>

Los siguientes son errores que puede encontrar al configurar Amazon EFS con CodeBuild.

**Topics**
+ [CLIENT\$1ERROR: no se ha podido montar '127.0.0.1: /'. Permiso denegado.](#sample-efs-troubleshooting.permission-denied)
+ [CLIENT\$1ERROR: no se ha podido montar '127.0.0.1: /'. Un homólogo ha restablecido la conexión.](#sample-efs-troubleshooting.connection-reset)
+ [VPC\$1CLIENT\$1ERROR: Error de EC2 inesperado: UnauthorizedOperation](#sample-efs-troubleshooting.unauthorized-operation)

## CLIENT\$1ERROR: no se ha podido montar '127.0.0.1: /'. Permiso denegado.
<a name="sample-efs-troubleshooting.permission-denied"></a>

No se admite la autorización de IAM para montar Amazon EFS con CodeBuild. Si utiliza una política personalizada del sistema de archivos de Amazon EFS, tendrá que conceder acceso de lectura y escritura a todas las entidades principales de IAM. Por ejemplo:

```
"Principal": {
  "AWS": "*"
}
```

## CLIENT\$1ERROR: no se ha podido montar '127.0.0.1: /'. Un homólogo ha restablecido la conexión.
<a name="sample-efs-troubleshooting.connection-reset"></a>

Existen dos causas posibles para este error:
+ La subred de CodeBuild VPC se encuentra en una zona de disponibilidad diferente a la del destino de montaje de Amazon EFS. Puede resolver este problema añadiendo una subred de VPC en la misma zona de disponibilidad que el destino de montaje de Amazon EFS.
+ El grupo de seguridad no tiene permisos para comunicarse con Amazon EFS. Puede resolver este problema añadiendo una regla de entrada que permita todo el tráfico procedente de la VPC (añada el bloque CIDR principal de la VPC) o del grupo de seguridad en sí.

## VPC\$1CLIENT\$1ERROR: Error de EC2 inesperado: UnauthorizedOperation
<a name="sample-efs-troubleshooting.unauthorized-operation"></a>

Este error se produce cuando todas las subredes de la configuración de VPC CodeBuild del proyecto son subredes públicas. Para garantizar la conectividad de la red, debe haber como mínimo una subred privada en la VPC. 

# AWS CodePipeline muestras para CodeBuild
<a name="sample-codepipeline"></a>

En esta sección se describen ejemplos de integraciones entre CodePipeline y CodeBuild.


| Muestra | Description (Descripción) | 
| --- | --- | 
|  [Ejemplos de CodePipeline/CodeBuild integraciones y compilaciones por lotes](#sample-pipeline-batch)  |  Estos ejemplos muestran cómo AWS CodePipeline crear un proyecto de compilación que utilice compilaciones por lotes.  | 
|  [Ejemplo de una CodePipeline/CodeBuild integración con múltiples fuentes de entrada y artefactos de salida](#sample-pipeline-multi-input-output)  |  En este ejemplo se muestra cómo AWS CodePipeline crear un proyecto de compilación que utilice varias fuentes de entrada para crear varios artefactos de salida.  | 

## Ejemplos de CodePipeline/CodeBuild integraciones y compilaciones por lotes
<a name="sample-pipeline-batch"></a>

AWS CodeBuild admite compilaciones por lotes. Los siguientes ejemplos muestran cómo AWS CodePipeline crear un proyecto de compilación que utilice compilaciones por lotes.

Puedes usar un archivo con formato JSON que defina la estructura de tu canalización y luego usarlo con él AWS CLI para crear la canalización. Para obtener más información, consulte [Referencia de la estructura de canalización de AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/reference-pipeline-structure.html) en la *Guía del usuario de AWS CodePipeline *.

### Compilación por lotes con artefactos individuales
<a name="sample-pipeline-batch.separate-artifacts"></a>

Utilice el archivo JSON siguiente como ejemplo de una estructura de canalización que crea una compilación por lotes con artefactos individuales. Para habilitar las compilaciones por lotes CodePipeline, defina el `BatchEnabled` parámetro del objeto en`configuration`. `true`

```
{
  "pipeline": {
    "roleArn": "arn:aws:iam::account-id:role/my-AWS-CodePipeline-service-role-name",
    "stages": [
      {
        "name": "Source",
        "actions": [
          {
            "inputArtifacts": [],
            "name": "Source1",
            "actionTypeId": {
              "category": "Source",
              "owner": "AWS",
              "version": "1",
              "provider": "S3"
            },
            "outputArtifacts": [
              {
                "name": "source1"
              }
            ],
            "configuration": {
              "S3Bucket": "<my-input-bucket-name>",
              "S3ObjectKey": "my-source-code-file-name.zip"
            },
            "runOrder": 1
          },
          {
            "inputArtifacts": [],
            "name": "Source2",
            "actionTypeId": {
              "category": "Source",
              "owner": "AWS",
              "version": "1",
              "provider": "S3"
            },
            "outputArtifacts": [
              {
                "name": "source2"
              }
            ],
            "configuration": {
              "S3Bucket": "<my-other-input-bucket-name>",
              "S3ObjectKey": "my-other-source-code-file-name.zip"
            },
            "runOrder": 1
          }
        ]
      },
      {
        "name": "Build",
        "actions": [
          {
            "inputArtifacts": [
              {
                "name": "source1"
              },
              {
                "name": "source2"
              }
            ],
            "name": "Build",
            "actionTypeId": {
              "category": "Build",
              "owner": "AWS",
              "version": "1",
              "provider": "CodeBuild"
            },
            "outputArtifacts": [
              {
                "name": "build1"
              },
              {
                "name": "build1_artifact1"
              },
              {
                "name": "build1_artifact2"
              },
              {
                "name": "build2_artifact1"
              },
              {
                "name": "build2_artifact2"
              }
            ],
            "configuration": {
              "ProjectName": "my-build-project-name",
              "PrimarySource": "source1",
              "BatchEnabled": "true"
            },
            "runOrder": 1
          }
        ]
      }
    ],
    "artifactStore": {
      "type": "S3",
      "location": "<AWS-CodePipeline-internal-bucket-name>"
    },
    "name": "my-pipeline-name",
    "version": 1
  }
}
```

El siguiente es un ejemplo de un archivo CodeBuild buildspec que funcionará con esta configuración de canalización.

```
version: 0.2
batch:
  build-list:
    - identifier: build1
      env:
        compute-type: BUILD_GENERAL1_SMALL
    - identifier: build2
      env:
        compute-type: BUILD_GENERAL1_MEDIUM

phases:
  build:
    commands:
      - echo 'file' > output_file

artifacts:
  files:
    - output_file
  secondary-artifacts:
    artifact1:
      files:
        - output_file
    artifact2:
      files:
        - output_file
```

Los nombres de los artefactos de salida especificados en el archivo JSON de la canalización deben coincidir con el identificador de las compilaciones y los artefactos definidos en el archivo de especificación de la compilación. La sintaxis es *buildIdentifier* para los artefactos principales y *buildIdentifier* \$1 *artifactIdentifier* para los artefactos secundarios.

Por ejemplo, para el nombre del artefacto de salida`build1`, CodeBuild cargará el artefacto principal de en `build1` la ubicación de. `build1` Para el nombre de salida`build1_artifact1`, CodeBuild cargará el artefacto secundario `artifact1` de `build1` a la ubicación de`build1_artifact1`, y así sucesivamente. Si solo se especifica una ubicación de salida, el nombre debe ser *buildIdentifier* solo.

Una vez creado el archivo JSON, puede crear la canalización. Utilice el AWS CLI para ejecutar el comando **create-pipeline** y pasar el archivo al `--cli-input-json` parámetro. Para obtener más información, consulte [Creación de una canalización (CLI)](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create.html#pipelines-create-cli) en la *Guía del usuario de AWS CodePipeline *. 

### Compilación por lotes con artefactos combinados
<a name="sample-pipeline-batch.combined-artifacts"></a>

Utilice el archivo JSON siguiente como ejemplo de una estructura de canalización que crea una compilación por lotes con artefactos combinados. Para habilitar las compilaciones por lotes CodePipeline, defina el `BatchEnabled` parámetro del `configuration` objeto en. `true` Para combinar los artefactos de compilación en la misma ubicación, defina el parámetro `CombineArtifacts` del objeto `configuration` como `true`.

```
{
 "pipeline": {
  "roleArn": "arn:aws:iam::account-id:role/my-AWS-CodePipeline-service-role-name",
  "stages": [
    {
      "name": "Source",
      "actions": [
        {
          "inputArtifacts": [],
          "name": "Source1",
          "actionTypeId": {
            "category": "Source",
            "owner": "AWS",
            "version": "1",
            "provider": "S3"
          },
          "outputArtifacts": [
            {
              "name": "source1"
            }
          ],
          "configuration": {
            "S3Bucket": "<my-input-bucket-name>",
            "S3ObjectKey": "my-source-code-file-name.zip"
          },
          "runOrder": 1
        },
        {
          "inputArtifacts": [],
          "name": "Source2",
          "actionTypeId": {
            "category": "Source",
            "owner": "AWS",
            "version": "1",
            "provider": "S3"
          },
          "outputArtifacts": [
            {
              "name": "source2"
            }
          ],
          "configuration": {
            "S3Bucket": "<my-other-input-bucket-name>",
            "S3ObjectKey": "my-other-source-code-file-name.zip"
          },
          "runOrder": 1
        }
      ]
    },
    {
      "name": "Build",
      "actions": [
        {
          "inputArtifacts": [
            {
              "name": "source1"
            },
            {
              "name": "source2"
            }
          ],
          "name": "Build",
          "actionTypeId": {
            "category": "Build",
            "owner": "AWS",
            "version": "1",
            "provider": "CodeBuild"
          },
          "outputArtifacts": [
            {
              "name": "output1 "
            }
          ],
          "configuration": {
            "ProjectName": "my-build-project-name",
            "PrimarySource": "source1",
             "BatchEnabled": "true",
             "CombineArtifacts": "true"
          },
          "runOrder": 1
        }
      ]
    }
  ],
  "artifactStore": {
    "type": "S3",
    "location": "<AWS-CodePipeline-internal-bucket-name>"
  },
  "name": "my-pipeline-name",
  "version": 1
 }
}
```

El siguiente es un ejemplo de un archivo CodeBuild buildspec que funcionará con esta configuración de canalización.

```
version: 0.2
batch:
  build-list:
    - identifier: build1
      env:
        compute-type: BUILD_GENERAL1_SMALL
    - identifier: build2
      env:
        compute-type: BUILD_GENERAL1_MEDIUM

phases:
  build:
    commands:
      - echo 'file' > output_file

artifacts:
  files:
    - output_file
```

Si los artefactos combinados están habilitados para la compilación por lotes, solo se permite una salida. CodeBuild combinará los artefactos principales de todas las compilaciones en un único archivo ZIP.

Una vez creado el archivo JSON, puede crear la canalización. Utilice el AWS CLI para ejecutar el comando **create-pipeline** y pasar el archivo al `--cli-input-json` parámetro. Para obtener más información, consulte [Creación de una canalización (CLI)](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create.html#pipelines-create-cli) en la *Guía del usuario de AWS CodePipeline *. 

## Ejemplo de una CodePipeline/CodeBuild integración con múltiples fuentes de entrada y artefactos de salida
<a name="sample-pipeline-multi-input-output"></a>

Un AWS CodeBuild proyecto puede tomar más de una fuente de entrada. También puede crear más de un artefacto de salida. En este ejemplo se muestra cómo AWS CodePipeline crear un proyecto de compilación que utilice varias fuentes de entrada para crear varios artefactos de salida. Para obtener más información, consulte [Ejemplo de varios orígenes de entrada y varios artefactos de salida](sample-multi-in-out.md).

Puedes usar un archivo con formato JSON que defina la estructura de tu canalización y luego usarlo con él AWS CLI para crear la canalización. Utilice el archivo JSON siguiente como ejemplo de una estructura de canalización que crea una compilación con más de un origen de entrada y más de un artefacto de salida. Más adelante en este ejemplo podrá ver cómo dicho archivo especifica las distintas entradas y salidas. *Para obtener más información, consulta la [referencia sobre la estructura de CodePipeline canalización](https://docs.aws.amazon.com/codepipeline/latest/userguide/reference-pipeline-structure.html) en la Guía del AWS CodePipeline usuario.*

```
{
 "pipeline": {
  "roleArn": "arn:aws:iam::account-id:role/my-AWS-CodePipeline-service-role-name",
  "stages": [
    {
      "name": "Source",
      "actions": [
        {
          "inputArtifacts": [],
          "name": "Source1",
          "actionTypeId": {
            "category": "Source",
            "owner": "AWS",
            "version": "1",
            "provider": "S3"
          },
          "outputArtifacts": [
            {
              "name": "source1"
            }
          ],
          "configuration": {
            "S3Bucket": "my-input-bucket-name",
            "S3ObjectKey": "my-source-code-file-name.zip"
          },
          "runOrder": 1
        },
        {
          "inputArtifacts": [],
          "name": "Source2",
          "actionTypeId": {
            "category": "Source",
            "owner": "AWS",
            "version": "1",
            "provider": "S3"
          },
          "outputArtifacts": [
            {
              "name": "source2"
            }
          ],
          "configuration": {
            "S3Bucket": "my-other-input-bucket-name",
            "S3ObjectKey": "my-other-source-code-file-name.zip"
          },
          "runOrder": 1
        }
      ]
    },
    {
      "name": "Build",
      "actions": [
        {
          "inputArtifacts": [
            {
              "name": "source1"
            },
            {
              "name": "source2"
            }
          ],
          "name": "Build",
          "actionTypeId": {
            "category": "Build",
            "owner": "AWS",
            "version": "1",
            "provider": "AWS CodeBuild"
          },
          "outputArtifacts": [
            {
              "name": "artifact1"
            },
            {
              "name": "artifact2"
            }
          ],
          "configuration": {
            "ProjectName": "my-build-project-name",
            "PrimarySource": "source1"
          },
          "runOrder": 1
        }
      ]
    }
  ],
  "artifactStore": {
    "type": "S3",
    "location": "AWS-CodePipeline-internal-bucket-name"
  },
  "name": "my-pipeline-name",
  "version": 1
 }
}
```

 En este archivo JSON: 
+ Debe designar uno de los orígenes de entrada como `PrimarySource`. Esta fuente es el directorio en el que CodeBuild busca y ejecuta el archivo buildspec. La palabra clave `PrimarySource` se usa para especificar la fuente principal en la `configuration` sección de la CodeBuild etapa del archivo JSON. 
+ Cada origen de entrada se instala en su propio directorio. Este directorio se almacena en la variable de entorno integrado `$CODEBUILD_SRC_DIR` para el origen principal y `$CODEBUILD_SRC_DIR_yourInputArtifactName` para todos los demás orígenes. Para la canalización de este ejemplo, los dos directorios de origen de entrada son `$CODEBUILD_SRC_DIR` y `$CODEBUILD_SRC_DIR_source2`. Para obtener más información, consulte [Variables de entorno en los entornos de compilación](build-env-ref-env-vars.md). 
+ Los nombres de los artefactos de salida especificados en el archivo JSON de la canalización deben coincidir con los de los artefactos secundarios definidos en el archivo buildspec. Esta canalización utiliza el archivo buildspec siguiente. Para obtener más información, consulte [Sintaxis de buildspec](build-spec-ref.md#build-spec-ref-syntax). 

  ```
  version: 0.2
  
  phases:
    build:
      commands:
        - touch source1_file
        - cd $CODEBUILD_SRC_DIR_source2
        - touch source2_file
  
  artifacts:
    files:
      - '**/*'
    secondary-artifacts:
      artifact1:
        base-directory: $CODEBUILD_SRC_DIR
        files:
          - source1_file
      artifact2:
        base-directory: $CODEBUILD_SRC_DIR_source2
        files:
          - source2_file
  ```

 Una vez creado el archivo JSON, puede crear la canalización. Utilice AWS CLI para ejecutar el comando **create-pipeline** y pasar el archivo al `--cli-input-json` parámetro. Para obtener más información, consulte [Creación de una canalización (CLI)](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create.html#pipelines-create-cli) en la *Guía del usuario de AWS CodePipeline *. 

# AWS Config muestra con CodeBuild
<a name="how-to-integrate-config"></a>

AWS Config proporciona un inventario de sus AWS recursos y un historial de los cambios de configuración de estos recursos. AWS Config ahora es compatible AWS CodeBuild como AWS recurso, lo que significa que el servicio puede realizar un seguimiento de sus CodeBuild proyectos. Para obtener más información al respecto AWS Config, consulte [¿Qué es AWS Config?](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html) en la *Guía para AWS Config desarrolladores*.

Puedes ver la siguiente información sobre CodeBuild los recursos en la página **de inventario de recursos** de la AWS Config consola:
+ Un cronograma de los cambios CodeBuild de configuración.
+ Detalles de configuración de cada CodeBuild proyecto.
+ Relaciones con otros AWS recursos.
+ Una lista de cambios en sus CodeBuild proyectos.

**Topics**
+ [Úselo CodeBuild con AWS Config](#how-to-integrate-config-run)
+ [Paso 3: Ver AWS CodeBuild los datos en la AWS Config consola](#viewing-config-details)

## Úselo CodeBuild con AWS Config
<a name="how-to-integrate-config-run"></a>

Los procedimientos de este tema muestran cómo configurar AWS Config y buscar CodeBuild proyectos.

**Topics**
+ [Requisitos previos](#how-to-create-a-build-project)
+ [Paso 1: Configurar AWS Config](#setup-config)
+ [Paso 2: Busca AWS CodeBuild proyectos](#lookup-projects)

### Requisitos previos
<a name="how-to-create-a-build-project"></a>

Cree su AWS CodeBuild proyecto. Para obtener instrucciones, consulte [Creación de un proyecto de compilación](create-project.md).

### Paso 1: Configurar AWS Config
<a name="setup-config"></a>
+ [Configuración de AWS Config (consola)](https://docs.aws.amazon.com/config/latest/developerguide/gs-console.html)
+ [Configuración de AWS Config (AWS CLI)](https://docs.aws.amazon.com/config/latest/developerguide/gs-cli.html)

**nota**  
Una vez completada la configuración, es posible que pasen hasta 10 minutos antes de que puedas ver AWS CodeBuild los proyectos en la AWS Config consola.

### Paso 2: Busca AWS CodeBuild proyectos
<a name="lookup-projects"></a>

1. Inicie sesión en la consola AWS de administración y abra la AWS Config consola en [https://console.aws.amazon.com/config.](https://console.aws.amazon.com/config) 

1. En la página **de inventario de recursos**, seleccione **AWS CodeBuild Proyecto** en **Tipo de recurso**. Desplázate hacia abajo y selecciona la casilla **CodeBuilddel proyecto**.

1. Elija **Look up (Buscar)**.

1. Después de añadir la lista de CodeBuild proyectos, elige el enlace del nombre del CodeBuild proyecto en la columna **Config timeline**.

## Paso 3: Ver AWS CodeBuild los datos en la AWS Config consola
<a name="viewing-config-details"></a>

Al buscar recursos en la página de **inventario de recursos**, puede elegir el AWS Config cronograma para ver los detalles CodeBuild del proyecto. La página de detalles de un recurso proporciona información sobre la configuración, las relaciones y el número de cambios realizados en dicho recurso. 

Los bloques de la parte superior de la página se denominan colectivamente escala de tiempo. La escala de tiempo muestra la fecha y la hora a las que se realizó el registro.

Para obtener más información, consulta la sección [Visualización de los detalles de configuración en la AWS Config consola](https://docs.aws.amazon.com/config/latest/developerguide/view-manage-resource-console.html) en la *Guía para AWS Config desarrolladores*.

# Ejemplo de creación de notificaciones para CodeBuild
<a name="sample-build-notifications"></a>

Amazon CloudWatch Events tiene soporte integrado para AWS CodeBuild. CloudWatch Los eventos son una secuencia de eventos del sistema que describen los cambios en sus AWS recursos. Con CloudWatch Events, se escriben reglas declarativas para asociar los eventos de interés con las acciones automatizadas que se van a llevar a cabo. En este ejemplo, se utilizan Amazon CloudWatch Events y Amazon Simple Notification Service (Amazon SNS) para enviar notificaciones de compilación a los suscriptores siempre que las compilaciones se realicen correctamente, fallen, pasen de una fase de creación a otra o cualquier combinación de estos eventos.

**importante**  
Si ejecuta este ejemplo, es posible que se le cobren cargos a su AWS cuenta. Estos incluyen posibles cargos por CodeBuild y por AWS los recursos y acciones relacionados con Amazon CloudWatch y Amazon SNS. Para obtener más información, consulte [CodeBuild los precios, los CloudWatch](https://aws.amazon.com/codebuild/pricing) [precios de Amazon](https://aws.amazon.com/cloudwatch/pricing) y los precios de [Amazon SNS.](https://aws.amazon.com/sns/pricing)

**Topics**
+ [Ejecución del ejemplo de notificaciones de compilación](#sample-build-notifications-running)
+ [Referencia del formato de entrada de las notificaciones de compilación](sample-build-notifications-ref.md)

## Ejecución del ejemplo de notificaciones de compilación
<a name="sample-build-notifications-running"></a>

Utilice el siguiente procedimiento para ejecutar el ejemplo de notificaciones de compilación.

**Para ejecutar este ejemplo**

1. Si ya tiene un tema configurado y suscrito a Amazon SNS que desee utilizar para este ejemplo, vaya directamente al paso 4. De lo contrario, si utiliza un usuario de IAM en lugar de una cuenta AWS raíz o un usuario administrador para trabajar con Amazon SNS, añada la siguiente declaración (*\$1\$1\$1 BEGIN ADDING STATEMENT HERE \$1\$1\$1*entre *\$1\$1\$1 END ADDING STATEMENT HERE \$1\$1\$1* y) al usuario (o grupo de IAM al que está asociado el usuario). No se recomienda utilizar una cuenta AWS raíz. Esta instrucción permite visualizar, crear, suscribir y probar el envío de notificaciones a temas de Amazon SNS. Los puntos suspensivos (`...`) se usan por motivos de brevedad y para ayudarle a encontrar el lugar donde debe añadir la instrucción. No elimine ninguna instrucción ni incluya estos puntos suspensivos en la política existente.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "sns:CreateTopic",
                   "sns:GetTopicAttributes",
                   "sns:List*",
                   "sns:Publish",
                   "sns:SetTopicAttributes",
                   "sns:Subscribe"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------
**nota**  
La entidad de IAM que modifica esta política debe tener permiso en IAM para modificar políticas.  
Para obtener más información, consulte [Edición de políticas administradas por el cliente](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#edit-managed-policy-console) o la sección "Para editar o eliminar una política insertada de un grupo, un usuario o un rol" de [Uso de políticas insertadas (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html#AddingPermissions_Console) en la *Guía del usuario de IAM*.

1. Cree o identifique un tema en Amazon SNS. AWS CodeBuild usa CloudWatch Events para enviar notificaciones de compilación sobre este tema a través de Amazon SNS. 

   Para crear un tema:

   1. [Abra la consola de Amazon SNS en /sns. https://console.aws.amazon.com](https://console.aws.amazon.com/sns)

   1. Seleccione **Crear tema**. 

   1. En el cuadro de diálogo **Create new topic (Crear un nuevo tema)**, en **Topic name (Nombre del tema)**, escriba un nombre para el tema (por ejemplo, **CodeBuildDemoTopic**). Si elige otro nombre, sustitúyalo en todo este ejemplo. 

   1. Seleccione **Crear tema**.

   1. En la CodeBuildDemoTopic página **Detalles del tema:**, copie el valor del **ARN del tema**. Necesitará este valor para el siguiente paso. 

        
![\[El valor del ARN del tema.\]](http://docs.aws.amazon.com/es_es/codebuild/latest/userguide/images/topic-arn.png)

      

   Para obtener más información, consulte [Crear un tema](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html) en la *Guía para desarrolladores de Amazon SNS*.

1. Suscriba a uno o varios destinatarios al tema para que reciban notificaciones por correo electrónico. 

   Para suscribir a un destinatario a un tema:

   1. Con la consola de Amazon SNS abierta del paso anterior, en el panel de navegación, seleccione **Suscripciones** y, a continuación, elija **Crear suscripción**.

   1. En **Create subscription (Crear suscripción)**, en **Topic ARN (ARN del tema)**, pegue el ARN del tema que copió en el paso anterior.

   1. En **Protocolo**, elige **Correo electrónico**.

   1. En **Punto de conexión**, escriba la dirección de correo electrónico completa del destinatario. 

        
![\[La configuración de la suscripción.\]](http://docs.aws.amazon.com/es_es/codebuild/latest/userguide/images/create-subscription.png)

      

   1. Elija **Create Subscription**.

   1. Amazon SNS envía un correo electrónico de confirmación de suscripción al destinatario. Para empezar a recibir notificaciones por correo electrónico, el destinatario debe elegir el enlace **Confirm subscription** en el mensaje de confirmación de la suscripción. Cuando el destinatario hace clic en el enlace, si se ha suscrito correctamente, Amazon SNS muestra un mensaje de confirmación en el navegador web.

   Para obtener más información, consulte [Suscribirse a un tema](https://docs.aws.amazon.com/sns/latest/dg/SubscribeTopic.html) en la *Guía del desarrollador de Amazon SNS*.

1. Si utiliza un usuario en lugar de una cuenta AWS raíz o un usuario administrador para trabajar con CloudWatch Events, añada la siguiente declaración (entre *\$1\$1\$1 BEGIN ADDING STATEMENT HERE \$1\$1\$1* y*\$1\$1\$1 END ADDING STATEMENT HERE \$1\$1\$1*) al usuario (o grupo de IAM al que está asociado el usuario). No se recomienda utilizar una cuenta AWS raíz. Esta declaración se utiliza para permitir al usuario trabajar con CloudWatch eventos. Los puntos suspensivos (`...`) se usan por motivos de brevedad y para ayudarle a encontrar el lugar donde debe añadir la instrucción. No elimine ninguna instrucción ni incluya estos puntos suspensivos en la política existente.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "events:*",
                   "iam:PassRole"
               ],
               "Resource": "arn:aws:iam::*:role/Service*"
           }
       ]
   }
   ```

------
**nota**  
La entidad de IAM que modifica esta política debe tener permiso en IAM para modificar políticas.  
Para obtener más información, consulte [Edición de políticas administradas por el cliente](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#edit-managed-policy-console) o la sección "Para editar o eliminar una política insertada de un grupo, un usuario o un rol" de [Uso de políticas insertadas (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html#AddingPermissions_Console) en la *Guía del usuario de IAM*.

1. Cree una regla en CloudWatch Eventos. Para ello, abre la CloudWatch consola en [https://console.aws.amazon.com/cloudwatch.](https://console.aws.amazon.com/cloudwatch)

1. En el panel de navegación, bajo **Events**, elija **Rules** y después elija **Create rule**. 

1. En la página **Step 1: Create rule (Paso 1: Crear regla)**, las opciones **Event Pattern (Patrón de eventos)** y **Build event pattern to match events by service (Crear un patrón de eventos para encontrar coincidencias de eventos por servicio)** ya deberían estar seleccionadas. 

1. En **Nombre de servicio**, elija **CodeBuild**. En **Event Type (Tipo de evento)**, la opción **All Events (Todos los eventos)** ya debería estar seleccionada.

1. El código siguiente debería aparecer en **Event Pattern Preview (Vista previa del patrón de eventos)**:

   ```
   {
     "source": [ 
       "aws.codebuild"
     ]
   }
   ```

1. Elija **Edit (Editar)** y sustituya el código de **Event Pattern Preview (Vista previa de patrón del eventos)** por uno de los dos patrones de reglas siguientes.

   Este primer patrón de reglas desencadena un evento siempre que se inicia o se completa una compilación en los proyectos de compilación especificados en AWS CodeBuild.

   ```
   {
     "source": [ 
       "aws.codebuild"
     ], 
     "detail-type": [
       "CodeBuild Build State Change"
     ],
     "detail": {
       "build-status": [
         "IN_PROGRESS",
         "SUCCEEDED", 
         "FAILED",
         "STOPPED" 
       ],
       "project-name": [
         "my-demo-project-1",
         "my-demo-project-2"
       ]
     }  
   }
   ```

   En la regla anterior, realice los siguientes cambios de código según sea necesario.
   + Para desencadenar un evento cuando se inicia o se completa una compilación, deje todos los valores tal y como se muestran en la matriz `build-status` o quite completamente la matriz `build-status`. 
   + Para activar un evento solo cuando se complete una compilación, elimine `IN_PROGRESS` de la matriz `build-status`. 
   + Para activar un evento solo cuando se inicie una compilación, elimine todos los valores a excepción de `IN_PROGRESS` de la matriz `build-status`.
   + Para activar eventos para todos los proyectos de compilación, elimine toda la matriz `project-name`.
   + Para activar eventos solo para proyectos de compilación individuales, especifique el nombre de cada proyecto de compilación en la matriz `project-name`. 

   Este segundo patrón de reglas desencadena un evento siempre que una compilación pasa de una fase a otra en los proyectos de compilación especificados en AWS CodeBuild.

   ```
   {
     "source": [ 
       "aws.codebuild"
     ], 
     "detail-type": [
       "CodeBuild Build Phase Change" 
     ],
     "detail": {
       "completed-phase": [
         "SUBMITTED",
         "PROVISIONING",
         "DOWNLOAD_SOURCE",
         "INSTALL",
         "PRE_BUILD",
         "BUILD",
         "POST_BUILD",
         "UPLOAD_ARTIFACTS",
         "FINALIZING"
       ],
       "completed-phase-status": [
         "TIMED_OUT",
         "STOPPED",
         "FAILED", 
         "SUCCEEDED",
         "FAULT",
         "CLIENT_ERROR"
       ],
       "project-name": [
         "my-demo-project-1",
         "my-demo-project-2"
       ]
     }  
   }
   ```

   En la regla anterior, realice los siguientes cambios de código según sea necesario.
   + Para desencadenar un evento con cada cambio de fase de compilación (lo que podría enviar hasta nueve notificaciones por cada compilación), deje todos los valores tal y como se muestran en la matriz `completed-phase` o elimine completamente la matriz `completed-phase`.
   + Para activar eventos solo para cambios de fase de compilación individuales, elimine el nombre de cada fase de compilación en la matriz `completed-phase` para el que no desee que se active un evento.
   + Para activar un evento para cada cambio de estado de fase de compilación, deje todos los valores tal y como se muestran en la matriz `completed-phase-status` o elimine completamente la matriz `completed-phase-status`.
   + Para activar eventos solo para cambios de estado de fase de compilación individuales, elimine el nombre de cada estado de fase de compilación en la matriz `completed-phase-status` para el que no desee que se active un evento.
   + Para activar eventos para todos los proyectos de compilación, elimine la matriz `project-name`.
   + Para activar eventos para proyectos de compilación individuales, especifique el nombre de cada proyecto de compilación en la matriz `project-name`. 

   Para obtener más información sobre los patrones de eventos, consulta [Patrones de eventos](https://docs.aws.amazon.com/eventbridge/latest/userguide/filtering-examples-structure.html) en la Guía del EventBridge usuario de Amazon.

   Para obtener más información sobre el filtrado con patrones de eventos, consulta [Filtrado basado en contenido con patrones de eventos](https://docs.aws.amazon.com/eventbridge/latest/userguide/content-filtering-with-event-patterns.html) en la Guía del EventBridge usuario de Amazon.
**nota**  
Si desea desencadenar eventos con los cambios de estado de compilación y los cambios de fase de compilación, debe crear dos reglas distintas: una para los cambios de estado y otra para los cambios de fase. Si intenta combinar las dos reglas en una sola, la regla combinada podría producir resultados inesperados o dejar de funcionar.

   Cuando haya terminado de reemplazar el código, seleccione **Save**.

1. En **Targets**, seleccione **Add target**. 

1. En la lista de destinos, elija **SNS topic**. 

1. En **Topic**, elija el tema que identificó o creó anteriormente. 

1. Expanda **Configure input**, a continuación, elija **Input Transformer**. 

1. En el cuadro **Input Path (Ruta de entrada)**, escriba una de las siguientes rutas de entrada.

   Si en una regla el valor de `detail-type` es `CodeBuild Build State Change`, escriba lo siguiente.

   ```
   {"build-id":"$.detail.build-id","project-name":"$.detail.project-name","build-status":"$.detail.build-status"}
   ```

   Si en una regla el valor de `detail-type` es `CodeBuild Build Phase Change`, escriba lo siguiente.

   ```
   {"build-id":"$.detail.build-id","project-name":"$.detail.project-name","completed-phase":"$.detail.completed-phase","completed-phase-status":"$.detail.completed-phase-status"}
   ```

   Para obtener otros tipos de información, consulte la [Referencia del formato de entrada de las notificaciones de compilación](sample-build-notifications-ref.md).

1. En el cuadro **Input Template (Plantilla de entrada)**, escriba una de las siguientes plantillas de entrada.

   Si en una regla el valor de `detail-type` es `CodeBuild Build State Change`, escriba lo siguiente.

   ```
   "Build '<build-id>' for build project '<project-name>' has reached the build status of '<build-status>'."
   ```

   Si en una regla el valor de `detail-type` es `CodeBuild Build Phase Change`, escriba lo siguiente.

   ```
   "Build '<build-id>' for build project '<project-name>' has completed the build phase of '<completed-phase>' with a status of '<completed-phase-status>'."
   ```

1. Seleccione **Configurar los detalles**.

1. En la página **Step 2: Configure rule details (Página 2: Configurar detalles de la regla)**, escriba el nombre y una descripción opcional. En **State (Estado)**, deje seleccionado el valor **Enabled (Habilitado)**.

1. Seleccione **Creación de regla**. 

1. Cree proyectos de compilación, ejecute las compilaciones y consulte información sobre la compilación.

1. Confirma que ahora CodeBuild se están enviando correctamente las notificaciones de compilación. Por ejemplo, compruebe si hay correos electrónicos de notificación de compilación en su bandeja de entrada.

Para cambiar el comportamiento de una regla, en la CloudWatch consola, elige la regla que quieres cambiar, selecciona **Acciones** y, a continuación, selecciona **Editar**. Realice los cambios que correspondan en la regla y elija **Configure details (Configurar detalles)** y **Update rule (Actualizar regla)**.

Para dejar de usar una regla para enviar notificaciones de compilación, en la CloudWatch consola, elige la regla que quieres dejar de usar, selecciona **Acciones** y, a continuación, selecciona **Inhabilitar**.

Para eliminar una regla por completo, en la CloudWatch consola, elige la regla que quieres eliminar, selecciona **Acciones** y, a continuación, selecciona **Eliminar**.

# Referencia del formato de entrada de las notificaciones de compilación
<a name="sample-build-notifications-ref"></a>

CloudWatch entrega las notificaciones en formato JSON.

Las notificaciones de cambio de estado de compilación usan el siguiente formato:

```
{
  "version": "0",
  "id": "c030038d-8c4d-6141-9545-00ff7b7153EX",
  "detail-type": "CodeBuild Build State Change",
  "source": "aws.codebuild",
  "account": "123456789012",
  "time": "2017-09-01T16:14:28Z",
  "region": "us-west-2",
  "resources":[
    "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX"
  ],
  "detail":{
    "build-status": "SUCCEEDED",
    "project-name": "my-sample-project",
    "build-id": "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX",
    "additional-information": {
      "artifact": {
        "md5sum": "da9c44c8a9a3cd4b443126e823168fEX",
        "sha256sum": "6ccc2ae1df9d155ba83c597051611c42d60e09c6329dcb14a312cecc0a8e39EX",
        "location": "arn:aws:s3:::codebuild-123456789012-output-bucket/my-output-artifact.zip"
      },
      "environment": {
        "image": "aws/codebuild/standard:5.0",
        "privileged-mode": false,
        "compute-type": "BUILD_GENERAL1_SMALL",
        "type": "LINUX_CONTAINER",
        "environment-variables": []
      },
      "timeout-in-minutes": 60,
      "build-complete": true,
      "initiator": "MyCodeBuildDemoUser",
      "build-start-time": "Sep 1, 2017 4:12:29 PM",
      "source": {
        "location": "codebuild-123456789012-input-bucket/my-input-artifact.zip",
        "type": "S3"
      },
      "logs": {
        "group-name": "/aws/codebuild/my-sample-project",
        "stream-name": "8745a7a9-c340-456a-9166-edf953571bEX",
        "deep-link": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logEvent:group=/aws/codebuild/my-sample-project;stream=8745a7a9-c340-456a-9166-edf953571bEX"
      },
      "phases": [
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:12:29 PM",
          "end-time": "Sep 1, 2017 4:12:29 PM",
          "duration-in-seconds": 0,
          "phase-type": "SUBMITTED",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:12:29 PM",
          "end-time": "Sep 1, 2017 4:13:05 PM",
          "duration-in-seconds": 36,
          "phase-type": "PROVISIONING",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:05 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 4,
          "phase-type": "DOWNLOAD_SOURCE",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 0,
          "phase-type": "INSTALL",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 0,
          "phase-type": "PRE_BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 70,
          "phase-type": "BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 0,
          "phase-type": "POST_BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 0,
          "phase-type": "UPLOAD_ARTIFACTS",
          "phase-status": "SUCCEEDED"
        },
         {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:26 PM",
          "duration-in-seconds": 4,
          "phase-type": "FINALIZING",
          "phase-status": "SUCCEEDED"
        },
        {
          "start-time": "Sep 1, 2017 4:14:26 PM",
          "phase-type": "COMPLETED"
        }
      ]
    },
    "current-phase": "COMPLETED",
    "current-phase-context": "[]",
    "version": "1"
  }
}
```

Las notificaciones de cambio de fase de compilación usan el siguiente formato:

```
{
  "version": "0",
  "id": "43ddc2bd-af76-9ca5-2dc7-b695e15adeEX",
  "detail-type": "CodeBuild Build Phase Change",
  "source": "aws.codebuild",
  "account": "123456789012",
  "time": "2017-09-01T16:14:21Z",
  "region": "us-west-2",
  "resources":[
    "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX"
  ],
  "detail":{
    "completed-phase": "COMPLETED",
    "project-name": "my-sample-project",
    "build-id": "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX",
    "completed-phase-context": "[]",
    "additional-information": {
      "artifact": {
        "md5sum": "da9c44c8a9a3cd4b443126e823168fEX",
        "sha256sum": "6ccc2ae1df9d155ba83c597051611c42d60e09c6329dcb14a312cecc0a8e39EX",
        "location": "arn:aws:s3:::codebuild-123456789012-output-bucket/my-output-artifact.zip"
      },
      "environment": {
        "image": "aws/codebuild/standard:5.0",
        "privileged-mode": false,
        "compute-type": "BUILD_GENERAL1_SMALL",
        "type": "LINUX_CONTAINER",
        "environment-variables": []
      },
      "timeout-in-minutes": 60,
      "build-complete": true,
      "initiator": "MyCodeBuildDemoUser",
      "build-start-time": "Sep 1, 2017 4:12:29 PM",
      "source": {
        "location": "codebuild-123456789012-input-bucket/my-input-artifact.zip",
        "type": "S3"
      },
      "logs": {
        "group-name": "/aws/codebuild/my-sample-project",
        "stream-name": "8745a7a9-c340-456a-9166-edf953571bEX",
        "deep-link": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logEvent:group=/aws/codebuild/my-sample-project;stream=8745a7a9-c340-456a-9166-edf953571bEX"
      },
      "phases": [
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:12:29 PM",
          "end-time": "Sep 1, 2017 4:12:29 PM",
          "duration-in-seconds": 0,
          "phase-type": "SUBMITTED",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:12:29 PM",
          "end-time": "Sep 1, 2017 4:13:05 PM",
          "duration-in-seconds": 36,
          "phase-type": "PROVISIONING",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:05 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 4,
          "phase-type": "DOWNLOAD_SOURCE",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 0,
          "phase-type": "INSTALL",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 0,
          "phase-type": "PRE_BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 70,
          "phase-type": "BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 0,
          "phase-type": "POST_BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 0,
          "phase-type": "UPLOAD_ARTIFACTS",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:26 PM",
          "duration-in-seconds": 4,
          "phase-type": "FINALIZING",
          "phase-status": "SUCCEEDED"
        },
        {
          "start-time": "Sep 1, 2017 4:14:26 PM",
          "phase-type": "COMPLETED"
        }
      ]  
    },
    "completed-phase-status": "SUCCEEDED",
    "completed-phase-duration-seconds": 4,
    "version": "1",
    "completed-phase-start": "Sep 1, 2017 4:14:21 PM",
    "completed-phase-end": "Sep 1, 2017 4:14:26 PM"
  }
}
```