Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
ECREsempio Amazon per CodeBuild
Questo esempio utilizza un'immagine Docker in un repository di immagini Amazon Elastic Container Registry (AmazonECR) per creare un progetto Go di esempio.
Importante
L'esecuzione di questo esempio potrebbe comportare addebiti sul tuo AWS account. Questi includono eventuali addebiti per AWS CodeBuild e per AWS risorse e azioni relative ad Amazon S3 AWS KMS, CloudWatch Logs e Amazon. ECR Per ulteriori informazioni, consulta CodeBuild i prezzi, i prezzi
Argomenti
Esegui l'ECResempio di Amazon
Utilizza le seguenti istruzioni per eseguire l'ECResempio di Amazon per CodeBuild.
Per eseguire questo esempio
-
Per creare e inviare l'immagine Docker al tuo repository di immagini in AmazonECR, completa i passaggi nella Esegui l'esempio «Pubblica immagine Docker su AmazonECR» sezione del. Esempio «Pubblica immagine Docker su AmazonECR»
-
Creazione di un progetto Go:
-
Crea i file come descritto nelle File di un progetto Go sezioni Struttura di un progetto Go e di questo argomento, quindi caricali in un bucket di input S3 o in un repository AWS CodeCommit GitHub, o Bitbucket.
Importante
Non caricare
, ma solo i file all'interno di(root directory name)
(root directory name)
Se utilizzi un bucket di input S3, assicurati di creare un ZIP file che contenga i file, quindi caricalo nel bucket di input. Non aggiungete
al ZIP file, ma solo i file al suo interno.(root directory name)
(root directory name)
-
Crea un progetto di compilazione, esegui la build e visualizza le relative informazioni sulla build.
Se usi il AWS CLI per creare il progetto di compilazione, l'input in JSON formato -del
create-project
comando potrebbe avere un aspetto simile a questo. (Sostituire i segnaposto con i propri valori).{ "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
" } -
Per ottenere l'artefatto di output della compilazione, aprire il bucket di output S3.
-
Scaricare il file
sul computer locale o sull'istanza, quindi estrarre il contenuto del file. Tra i contenuti estratti, selezionare il fileGoOutputArtifact
.ziphello
.
-
-
Se una delle seguenti condizioni è vera, devi aggiungere le autorizzazioni al tuo repository di immagini in Amazon in ECR modo che AWS CodeBuild possa inserire la sua immagine Docker nell'ambiente di compilazione.
-
Il tuo progetto utilizza CodeBuild le credenziali per estrarre ECR immagini Amazon. Questo è indicato dal valore
CODEBUILD
nell'attributoimagePullCredentialsType
diProjectEnvironment
. -
Il tuo progetto utilizza un'ECRimmagine Amazon per più account. In questo caso, il progetto deve utilizzare il suo ruolo di servizio per estrarre ECR immagini Amazon. Per abilitare questo comportamento, impostare l'attributo
imagePullCredentialsType
diProjectEnvironment
suSERVICE_ROLE
.
Apri la ECR console Amazon all'indirizzo https://console.aws.amazon.com/ecr/
. -
Nella lista dei nomi dei repository, selezionare il nome del repository creato o selezionato.
-
Dal riquadro di navigazione scegliere Permissions (Autorizzazioni), Edit (Modifica), quindi scegliere Add statement (Aggiungi istruzione).
-
In Nome istruzione, immettere un identificatore (ad esempio,
CodeBuildAccess
). -
Per Effect (Effetto), lasciare selezionato Allow (Abilita). Questo indica che vuoi consentire l'accesso a un altro account AWS .
-
Per Principal (Principale), eseguire una delle seguenti operazioni:
-
Se il tuo progetto utilizza CodeBuild le credenziali per estrarre un'ECRimmagine Amazon, in Service principal, inserisci
codebuild.amazonaws.com
. -
Se il tuo progetto utilizza un'ECRimmagine Amazon per più AWS accountIDs, per account inserisci IDs gli AWS account a cui desideri consentire l'accesso.
-
-
Salta l'elenco Tutte le IAM entità.
-
Per Azione, selezionate le azioni di sola estrazione: ecr:GetDownloadUrlForLayer, ecr: ed ecr:BatchGetImage. BatchCheckLayerAvailability
-
Per Condizioni, aggiungi quanto segue:
{ "StringEquals":{ "aws:SourceAccount":"
<AWS-account-ID>
", "aws:SourceArn":"arn:aws:codebuild:<region>
:<AWS-account-ID>
:project/<project-name>
" } } -
Seleziona Salva.
Questa policy viene visualizzata in Autorizzazioni. L'entità principal è ciò che è stato immesso per Principal (Entità principal) al passaggio 3 di questa procedura:
-
Se il tuo progetto utilizza CodeBuild credenziali per estrarre un'ECRimmagine Amazon,
"codebuild.amazonaws.com"
viene visualizzato in Service principals. -
Se il tuo progetto utilizza un'ECRimmagine Amazon per più account, l'ID dell' AWS account a cui desideri consentire l'accesso viene visualizzato in AWS Account IDs.
La seguente policy di esempio utilizza sia CodeBuild le credenziali che un'immagine Amazon ECR per più account.
{ "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" ] } ] }-
Se i tuoi progetti utilizzano CodeBuild credenziali e desideri che i tuoi CodeBuild progetti abbiano accesso aperto al ECR repository Amazon, puoi omettere
Condition
le chiavi e aggiungere la seguente politica di esempio.
{ "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" ] } ] } -
-
-
Crea un progetto di compilazione, esegui la build e visualizza le informazioni sulla build.
Se usi il AWS CLI per creare il progetto di compilazione, l'input JSON -formatted del
create-project
comando potrebbe avere un aspetto simile a questo. (Sostituire i segnaposto con i propri valori).{ "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
" } -
Per ottenere l'artefatto di output della compilazione, aprire il bucket di output S3.
-
Scaricare il file
sul computer locale o sull'istanza, quindi estratte il contenuto del fileGoOutputArtifact
.zip
. Tra i contenuti estratti, selezionare il fileGoOutputArtifact
.ziphello
.
Struttura di un progetto Go
Questo esempio assume la seguente struttura delle directory.
(root directory name)
├── buildspec.yml
└── hello.go
File di un progetto Go
Questo esempio utilizza i seguenti file.
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) }