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
En este ejemplo se utiliza una imagen de Docker en un repositorio de imágenes de Amazon Elastic Container Registry (Amazon ECR) para compilar un proyecto de Go de muestra.
La ejecución de este ejemplo puede producir cargos en su cuenta de AWS. Estos incluyen los posibles cargos porAWS CodeBuild y porAWS los recursos y acciones relacionados con Amazon S3AWS KMS, CloudWatch Logs y Amazon ECR. Para obtener más información, consulte CodeBuild precios, precios
Ejecución del ejemplo
Para ejecutar este ejemplo
-
Para crear y enviar la imagen de Docker a su repositorio de imágenes en Amazon ECR, siga los pasos de la sección «Ejecutar la muestra» delEjemplo de Docker.
-
Crear un proyecto de Go:
-
Cree los archivos tal como se describe en lasArchivos de un proyecto de Go seccionesEstructura de un proyecto de Go y de este tema y, a continuación, cárguelos en un depósito de entrada de S3 o en unAWS CodeCommit repositorio de Bitbucket. GitHub
importante No cargue
, solo los archivos incluidos en(root directory name)
.(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
al archivo ZIP, solo los archivos incluidos en(root directory name)
.(root directory name)
-
Cree un proyecto de compilación, ejecute la compilación y consulte información de la compilación relacionada siguiendo los pasos de Ejecutar AWS CodeBuild directamente.
Si usa la AWS CLI para crear el proyecto de compilación, es posible que el resultado con formato JSON del comando
create-project
tenga 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:4.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
" } -
Para obtener el artefacto de salida de la compilación, abra el bucket de salida de S3.
-
Descargue el archivo
en su equipo o instancia local y después extraiga el contenido del archivo . En el contenido extraído, obtenga el archivoGoOutputArtifact
.ziphello
.
-
-
Si se cumple una de las siguientes condiciones, debe añadir permisos a su repositorio de imágenes en Amazon ECR paraAWS CodeBuild poder incorporar su imagen de Docker al entorno de compilación.
-
Su proyecto usa CodeBuild credenciales para extraer imágenes de Amazon ECR. Esto se especifica mediante el valor
CODEBUILD
del atributoimagePullCredentialsType
deProjectEnvironment
. -
Su proyecto utiliza una imagen de Amazon ECR de varias cuentas. En este caso, el proyecto debe utilizar su función de servicio para extraer imágenes de Amazon ECR. Para habilitar este comportamiento, establezca el atributo
imagePullCredentialsType
deProjectEnvironment
enSERVICE_ROLE
.
Abra la consola de Amazon ECR en https://console.aws.amazon.com/ecr/
. -
En la lista de nombres de repositorio, elija el nombre del repositorio que ha creado o seleccionado.
-
En el panel de navegación, elija Permissions (Permisos), Edit (Editar) y Add statement (Agregar instrucción).
-
En Statement name (Nombre de instrucción), introduzca un identificador (por ejemplo,
CodeBuildAccess
). -
En Effect (Efecto), deje seleccionado Allow (Permitir). Esto indica que desea permitir el acceso a otra cuenta de AWS.
-
En Principal, realice una de las siguientes acciones:
-
Si su proyecto usa CodeBuild credenciales para extraer una imagen de Amazon ECR, en Service principal, introduzca
codebuild.amazonaws.com
. -
Si tu proyecto utiliza una imagen de Amazon ECR paraAWS varias cuentas, introduce los ID de lasAWS cuentas a las que quieres conceder acceso.
-
-
Omita la lista All IAM entities.
-
En Acción, seleccione las acciones de solo extracción: ecr:GetDownloadUrlForLayer, ecr:BatchGetImage y ecr:BatchCheckLayerAvailability.
-
Para Condiciones, añada lo siguiente:
{ "StringEquals":{ "aws:SourceAccount":"
<AWS-account-ID>
", "aws:SourceArn":"arn:aws:codebuild:<region>
:<AWS-account-ID>
:project/<project-name>
" } } -
Seleccione Guardar.
Esta política aparece en Permissions (Permisos). La entidad de seguridad es la que especificó en Principal (Entidad de seguridad) 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 del servicio. -
Si su proyecto utiliza una imagen de Amazon ECR para varias cuentas, el ID de laAWS cuenta a la que desea conceder acceso aparece en los ID deAWS cuenta.
El siguiente ejemplo de política utiliza tanto CodeBuild las credenciales como una imagen de Amazon ECR de varias cuentas.
{ "Version":"2012-10-17", "Statement":[ { "Sid":"CodeBuildAccessPrincipal", "Effect":"Allow", "Principal":{ "Service":"codebuild.amazonaws.com" }, "Action":[ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:BatchCheckLayerAvailability" ], "Condition":{ "StringEquals":{ "aws:SourceArn":"arn:aws:codebuild:
<region>
:<aws-account-id>
:project/<project-name>
", "aws:SourceAccount":"<aws-account-id>
" } } }, { "Sid":"CodeBuildAccessCrossAccount", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::<AWS-account-ID>
:root" }, "Action":[ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:BatchCheckLayerAvailability" ] } ] }-
Si sus proyectos utilizan CodeBuild credenciales y desea que sus CodeBuild proyectos tengan acceso abierto al repositorio de Amazon ECR, puede omitir las
Condition
claves y añadir la siguiente política de ejemplo.
{ "Version":"2012-10-17", "Statement":[ { "Sid":"CodeBuildAccessPrincipal", "Effect":"Allow", "Principal":{ "Service":"codebuild.amazonaws.com" }, "Action":[ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:BatchCheckLayerAvailability" ] }, { "Sid":"CodeBuildAccessCrossAccount", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::
<AWS-account-ID>
:root" }, "Action":[ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:BatchCheckLayerAvailability" ] } ] } -
-
-
Cree un proyecto de compilación, ejecute la compilación y consulte información de la compilación siguiendo los pasos de Ejecución de CodeBuild directamente.
Si usa la AWS CLI para crear el proyecto de compilación, es posible que el resultado con formato JSON del comando
create-project
tenga 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
" } -
Para obtener el artefacto de salida de la compilación, abra el bucket de salida de S3.
-
Descargue el archivo
en su equipo o instancia local y después extraiga el contenido del archivoGoOutputArtifact
.zip
. En el contenido extraído, obtenga el archivoGoOutputArtifact
.ziphello
.
Estructura de un proyecto de Go
En este ejemplo se presupone que existe esta estructura de directorios.
(root directory name)
├── buildspec.yml
└── hello.go
Archivos de un proyecto de Go
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) }
Recursos relacionados
Para obtener información acerca de cómo empezar a trabajar con AWS CodeBuild, consulte Empezar a trabajar con AWS CodeBuild utilizando la consola.
Para obtener más información acerca de la solución de problemas CodeBuild de, consulteSolución de problemas de AWS CodeBuild.
Para obtener información sobre las cuotas en CodeBuild, consulteCuotas para AWS CodeBuild.