

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.

# 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)
}
```