ECRExemple Amazon pour CodeBuild - AWS CodeBuild

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

ECRExemple Amazon pour CodeBuild

Cet exemple utilise une image Docker dans un référentiel d'images Amazon Elastic Container Registry (AmazonECR) pour créer un exemple de projet Go.

Important

L'exécution de cet échantillon peut entraîner des frais sur votre AWS compte. Cela inclut les éventuels frais pour AWS CodeBuild et pour les AWS ressources et les actions liées à Amazon S3 AWS KMS, CloudWatch Logs et AmazonECR. Pour plus d'informations, consultez CodeBuild les rubriques Tarification, Tarification Amazon S3, AWS Key Management Service Tarification Amazon et CloudWatch Tarification Amazon Elastic Container Registry.

Exécutez l'ECRexemple Amazon

Suivez les instructions suivantes pour exécuter l'ECRexemple Amazon pour CodeBuild.

Pour exécuter cet exemple
  1. Pour créer et transférer l'image Docker vers votre référentiel d'images sur AmazonECR, suivez les étapes décrites dans la Exécutez l'exemple « Publier une image Docker sur Amazon ECR » section duExemple « Publier une image Docker sur Amazon ECR ».

  2. Créer un projet Go :

    1. Créez les fichiers comme décrit dans les Fichiers d'un projet Go sections Structure d'un projet Go et de cette rubrique, puis chargez-les dans un compartiment d'entrée S3 ou un AWS CodeCommit référentiel Bitbucket. GitHub

      Important

      Ne chargez pas (root directory name), mais seulement les fichiers à l'intérieur de (root directory name).

      Si vous utilisez un compartiment d'entrée S3, veillez à créer un ZIP fichier contenant les fichiers, puis à le télécharger dans le compartiment d'entrée. N'ajoutez rien (root directory name) au ZIP fichier, mais uniquement les fichiers qu'il contient(root directory name).

    2. Créez un projet de build, exécutez le build et consultez les informations de build associées.

      Si vous utilisez le AWS CLI pour créer le projet de construction, l'entrée JSON formatée de la create-project commande peut ressembler à ceci. (Remplacez les espaces réservés par vos propres valeurs.)

      { "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" }
    3. Pour obtenir le résultat de l'artefact de sortie de la génération, ouvrez votre compartiment de sortie S3.

    4. Téléchargez le fichier GoOutputArtifact.zip sur votre ordinateur ou instance local, puis extrayez le contenu du fichier . Dans le contenu extrait, obtenez le fichier hello.

  3. Si l'une des conditions suivantes est vraie, vous devez ajouter des autorisations à votre référentiel d'images sur Amazon ECR afin de AWS CodeBuild pouvoir intégrer son image Docker dans l'environnement de génération.

    • Votre projet utilise des CodeBuild informations d'identification pour extraire ECR des images Amazon. Ceci est indiqué par la valeur CODEBUILD dans l'attribut imagePullCredentialsType de votre ProjectEnvironment.

    • Votre projet utilise une ECR image Amazon multi-comptes. Dans ce cas, votre projet doit utiliser son rôle de service pour extraire les ECR images Amazon. Pour activer ce comportement, définissez l'attribut imagePullCredentialsType de votre ProjectEnvironment sur SERVICE_ROLE.

    1. Ouvrez la ECR console Amazon à l'adresse https://console.aws.amazon.com/ecr/.

    2. Dans la liste des noms de référentiel, choisissez le nom du référentiel que vous avez créé ou sélectionné.

    3. Dans le volet de navigation, choisissez Permissions (Autorisations), Edit (Modifier), puis Add statement (Ajouter une instruction).

    4. Pour Statement name, saisissez un identifiant (par exemple, CodeBuildAccess).

    5. Pour Effect (Effet), conservez la sélection Allow (Autoriser). Cela indique que vous souhaitez autoriser l'accès à un autre compte AWS .

    6. Pour Principal, effectuez l'une des opérations suivantes:

      • Si votre projet utilise des CodeBuild informations d'identification pour extraire une ECR image Amazon, saisissez Service principalcodebuild.amazonaws.com.

      • Si votre projet utilise une ECR image Amazon multi-comptesIDs, saisissez dans IDs le champ « AWS compte » les AWS comptes auxquels vous souhaitez donner accès.

    7. Ignorez la liste de toutes les IAM entités.

    8. Pour Action, sélectionnez les actions à extraction uniquement : ecr :GetDownloadUrlForLayer, ecr : et ecr :BatchGetImage. BatchCheckLayerAvailability

    9. Pour Conditions, ajoutez ce qui suit :

      { "StringEquals":{ "aws:SourceAccount":"<AWS-account-ID>", "aws:SourceArn":"arn:aws:codebuild:<region>:<AWS-account-ID>:project/<project-name>" } }
    10. Choisissez Save (Enregistrer).

      Cette stratégie est affichée dans Autorisations. Le mandataire correspond à ce que vous avez saisi pour Principal (Mandataire) à l'étape 3 de cette procédure :

      • Si votre projet utilise des CodeBuild informations d'identification pour extraire une ECR image Amazon, cela "codebuild.amazonaws.com" apparaît sous Principaux du service.

      • Si votre projet utilise une ECR image Amazon multi-comptes, l'identifiant du AWS compte auquel vous souhaitez donner accès apparaît sous AWS Compte IDs.

        L'exemple de politique suivant utilise à la fois des CodeBuild informations d'identification et une ECR image Amazon multi-comptes.

      { "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 vos projets utilisent des CodeBuild informations d'identification et que vous souhaitez qu'ils aient un accès ouvert au ECR référentiel Amazon, vous pouvez omettre les Condition clés et ajouter l'exemple de politique suivant. CodeBuild

      { "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" ] } ] }
  4. Créez un projet de build, exécutez le build et consultez les informations de build.

    Si vous utilisez le AWS CLI pour créer le projet de construction, l'entrée JSON formatée de la create-project commande peut ressembler à ceci. (Remplacez les espaces réservés par vos propres valeurs.)

    { "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" }
  5. Pour obtenir le résultat de l'artefact de sortie de la génération, ouvrez votre compartiment de sortie S3.

  6. Téléchargez le fichier GoOutputArtifact.zip sur votre ordinateur ou instance local, puis extrayez le contenu du fichier GoOutputArtifact.zip. Dans le contenu extrait, obtenez le fichier hello.

Structure d'un projet Go

Cet exemple suppose que cette structure de répertoire est utilisée.

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

Fichiers d'un projet Go

Cet exemple utilise ces fichiers.

buildspec.yml (dans (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 (dans (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) }