As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
ECRAmostra da Amazon para CodeBuild
Esse exemplo usa uma imagem do Docker em um repositório de imagens do Amazon Elastic Container Registry (AmazonECR) para criar um projeto Go de amostra.
Importante
A execução dessa amostra pode resultar em cobranças em sua AWS conta. Isso inclui possíveis cobranças por AWS CodeBuild e por AWS recursos e ações relacionados ao Amazon S3 AWS KMS, CloudWatch Logs e Amazon. ECR Para obter mais informações, consulte CodeBuild preços, preços
Execute a ECR amostra da Amazon
Use as instruções a seguir para executar a ECR amostra da Amazon para CodeBuild.
Como executar este exemplo
-
Para criar e enviar a imagem do Docker para seu repositório de imagens na AmazonECR, conclua as etapas na Execute a amostra “Publicar imagem do Docker na AmazonECR” seção do. Exemplo de “Publicar imagem do Docker na AmazonECR”
-
Criar um projeto Go
-
Crie os arquivos conforme descrito nas Arquivos do projeto Go seções Estrutura do projeto Go e deste tópico e, em seguida, carregue-os em um bucket de entrada do S3 ou em um AWS CodeCommit repositório do Bitbucket. GitHub
Importante
Não faça upload de
, apenas dos arquivos dentro de(root directory name)
.(root directory name)
Se você estiver usando um bucket de entrada do S3, certifique-se de criar um ZIP arquivo que contenha os arquivos e, em seguida, carregue-o no bucket de entrada. Não adicione
ao ZIP arquivo, apenas os arquivos dentro dele(root directory name)
.(root directory name)
-
Crie um projeto de compilação, execute a compilação e visualize as informações relacionadas à compilação.
Se você usar o AWS CLI para criar o projeto de construção, a entrada JSON formatada para o
create-project
comando poderá ser semelhante a essa. (Substitua os espaços reservados com seus próprios 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
" } -
Para obter o artefato de saída de compilação, abra seu bucket de saída do S3.
-
Faça o download do arquivo
para seu computador ou instância local. Extraia o conteúdo do arquivo . Nesse conteúdo, procure o arquivoGoOutputArtifact
.ziphello
.
-
-
Se uma das afirmações a seguir for verdadeira, você deverá adicionar permissões ao seu repositório de imagens na Amazon para que ele ECR AWS CodeBuild possa inserir sua imagem do Docker no ambiente de criação.
-
Seu projeto usa CodeBuild credenciais para extrair ECR imagens da Amazon. Isso é indicado por um valor de
CODEBUILD
no atributoimagePullCredentialsType
de seuProjectEnvironment
. -
Seu projeto usa uma ECR imagem da Amazon com várias contas. Nesse caso, seu projeto deve usar sua função de serviço para extrair ECR imagens da Amazon. Para habilitar esse comportamento, defina o atributo
imagePullCredentialsType
de seuProjectEnvironment
comoSERVICE_ROLE
.
Abra o ECR console da Amazon em https://console.aws.amazon.com/ecr/
. -
Na lista de nomes de repositório, escolha o nome do repositório que você criou ou selecionou.
-
No painel de navegação, selecione Permissions (Permissões), Edit (Editar) e Add statement (Adicionar instrução).
-
Em Statement name (Nome da instrução), digite um identificador (por exemplo,
CodeBuildAccess
). -
Em Effect (Efeito), deixe a opção Allow (Permitir) selecionada. Isso indica que você deseja permitir o acesso a outra conta da AWS .
-
Em Principal, siga um dos seguintes procedimentos:
-
Se seu projeto usa CodeBuild credenciais para extrair uma ECR imagem da Amazon, em Service principal, insira
codebuild.amazonaws.com
. -
Se o seu projeto usa uma ECR imagem da Amazon com várias AWS contas IDs, insira IDs as AWS contas às quais você deseja conceder acesso.
-
-
Ignore a lista Todas as IAM entidades.
-
Em Ação, selecione as ações somente de extração: ecr:GetDownloadUrlForLayer, ecr: e ecr:BatchGetImage. BatchCheckLayerAvailability
-
Em Condições, adicione o seguinte:
{ "StringEquals":{ "aws:SourceAccount":"
<AWS-account-ID>
", "aws:SourceArn":"arn:aws:codebuild:<region>
:<AWS-account-ID>
:project/<project-name>
" } } -
Escolha Salvar.
Essa política é exibida em Permissions (Permissões). O principal é a informação inserida em Principal na etapa 3 deste procedimento:
-
Se seu projeto usa CodeBuild credenciais para extrair uma ECR imagem da Amazon,
"codebuild.amazonaws.com"
aparece em Princípios de serviço. -
Se o seu projeto usa uma ECR imagem da Amazon com várias contas, o ID da AWS conta à qual você deseja conceder acesso aparecerá em AWS Conta IDs.
O exemplo de política a seguir usa CodeBuild credenciais e uma imagem da Amazon ECR entre contas.
{ "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 seus projetos usam CodeBuild credenciais e você gostaria que eles tivessem acesso aberto ao ECR repositório da Amazon, você pode omitir
Condition
as chaves e adicionar o seguinte exemplo de política. 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" ] } ] } -
-
-
Crie um projeto de compilação, execute a compilação e visualize as informações da compilação.
Se você usar o AWS CLI para criar o projeto de construção, a entrada JSON formatada para o
create-project
comando poderá ser semelhante a essa. (Substitua os espaços reservados com seus próprios 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 obter o artefato de saída de compilação, abra seu bucket de saída do S3.
-
Faça o download do arquivo
para seu computador ou instância local. Extraia o conteúdo do arquivoGoOutputArtifact
.zip
. Nesse conteúdo, procure o arquivoGoOutputArtifact
.ziphello
.
Estrutura do projeto Go
Essa amostra pressupõe esta estrutura de diretório.
(root directory name)
├── buildspec.yml
└── hello.go
Arquivos do projeto Go
Esta amostra usa estes arquivos.
buildspec.yml
(em
)(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
(em
)(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) }