O Amazon CloudWatch Events tem suporte integrado para AWS CodeBuild. O CloudWatch Events é um fluxo de eventos do sistema que descreve alterações nos recursos da AWS. Com o CloudWatch Events, você vai redigir regras declarativas para associar eventos de interesse a ações automatizadas a serem realizadas. Este exemplo usa o Amazon CloudWatch Events e o Amazon Simple Notification Service (Amazon SNS) para enviar notificações de compilação a assinantes sempre que as compilações forem bem-sucedidas, apresentarem falha, forem de uma fase de compilação para outra ou qualquer combinação desses eventos.
Importante
Executar esta amostra pode resultar em cobranças em sua conta AWS. Isso inclui possíveis cobranças pelo CodeBuild e por recursos da AWS e ações relacionadas ao Amazon CloudWatch e ao Amazon SNS. Para obter mais informações, consulte Preços do AWS ColdBuild
Tópicos
Execute o exemplo de notificações de compilação
Use o procedimento a seguir para executar o exemplo de notificações de compilação.
Como executar este exemplo
-
Se você já tem uma configuração de tópicos e assinou o Amazon SNS que deseja usar para este exemplo, vá para a etapa 4. Caso contrário, se você estiver utilizando um usuário do IAM, em vez de uma conta raiz da AWS ou um usuário administrador para trabalhar com o Amazon SNS, adicione a declaração a seguir (entre
### BEGIN ADDING STATEMENT HERE ###
e### END ADDING STATEMENT HERE ###
) ao usuário (ou ao grupo do IAM ao qual o usuário está associado). Não é recomendável usar uma conta raiz da AWS. Essa declaração permite a visualização, a criação, a assinatura e o teste do envio de notificações a tópicos no Amazon SNS. As elipses (...
) são usadas para agilizar e para ajudá-lo a encontrar onde adicionar a declaração. Não remova nenhuma declaração e não digite essas elipses na política existente.{ "Statement": [
### BEGIN ADDING STATEMENT HERE ###
{ "Action": [ "sns:CreateTopic", "sns:GetTopicAttributes", "sns:List*", "sns:Publish", "sns:SetTopicAttributes", "sns:Subscribe" ], "Resource": "*", "Effect": "Allow" },### END ADDING STATEMENT HERE ###
... ], "Version": "2012-10-17" }nota
A entidade do IAM que modifica essa política deve ter permissão no IAM para alterar políticas.
Para obter mais informações, consulte Editing customer managed policies ou a seção “To edit or delete an inline policy for a group, user, or role” em Working with inline policies (console) no Guia do usuário do IAM.
-
Crie ou identifique um tópico no Amazon SNS. O AWS CodeBuild usa o CloudWatch Events para enviar notificações de compilação a esse tópico por meio do Amazon SNS.
Para criar um tópico:
-
Abra o console do Amazon SNS em https://console.aws.amazon.com/sns
. -
Escolha Criar tópico.
-
Em Create new topic (Criar novo tópico), em Topic name (Nome do tópico), insira um nome para o tópico (por exemplo,
CodeBuildDemoTopic
). (Se escolher um nome diferente, substitua-o ao longo desse exemplo.) -
Escolha Criar tópico.
-
Na página Detalhes do tópico: CodeBuildDemoTopic, copie o valor do ARN do tópico. Você precisa desse valor na próxima etapa.
Para obter mais informações, consulte Create a topic no Guia do desenvolvedor do SNS.
-
-
Faça a assinatura de um ou mais destinatários para o tópico para que recebam notificações por e-mail.
Para fazer a assinatura de um destinatário para um tópico:
-
Com o console do Amazon SNS aberto na etapa anterior, no painel de navegação, selecione Assinaturas e Criar assinatura.
-
Em Create subscription (Criar assinatura), em Topic ARN (Tópico ARN), cole o ARN do tópico que você copiou da etapa anterior.
-
Em Protocolo, escolha Email.
-
Em Endpoint, insira o endereço de e-mail completo do destinatário.
-
Escolha Create Subscription (Criar assinatura).
-
O Amazon SNS envia um e-mail de confirmação de assinatura ao destinatário. Para começar a receber notificações por e-mail, o destinatário deve escolher o link Confirm subscription no e-mail de confirmação da assinatura. Assim que o destinatário clicar no link, se assinado com êxito, o Amazon SNS exibirá uma mensagem de confirmação no navegador web do destinatário.
Para obter mais informações, consulte Subscribe to a topic no Guia do desenvolvedor do Amazon SNS.
-
-
Se você estiver utilizando um usuário raiz da AWS em vez de uma conta de administrador para trabalhar com o CloudWatch Events, adicione a declaração a seguir (entre
### BEGIN ADDING STATEMENT HERE ###
e### END ADDING STATEMENT HERE ###
) ao usuário (ou ao grupo do IAM ao qual o usuário está associado). Não é recomendável usar uma conta raiz da AWS. Esta declaração é usada para permitir que o usuário trabalhe com o CloudWatch Events. As elipses (...
) são usadas para agilizar e para ajudá-lo a encontrar onde adicionar a declaração. Não remova nenhuma declaração e não digite essas elipses na política existente.{ "Statement": [
### BEGIN ADDING STATEMENT HERE ###
{ "Action": [ "events:*", "iam:PassRole" ], "Resource": "*", "Effect": "Allow" },### END ADDING STATEMENT HERE ###
... ], "Version": "2012-10-17" }nota
A entidade do IAM que modifica essa política deve ter permissão no IAM para alterar políticas.
Para obter mais informações, consulte Editing customer managed policies ou a seção “To edit or delete an inline policy for a group, user, or role” em Working with inline policies (console) no Guia do usuário do IAM.
-
Crie uma regra no CloudWatch Events. Para fazer isso, abra o console do CloudWatch em https://console.aws.amazon.com/cloudwatch
. -
No painel de navegação, em Events, escolha Rules e Create rule.
-
Na Step 1: Create rule page (página Etapa 1: criar regra), Event Pattern (Padrão de evento) e Build event pattern to match events by service (Criar padrão de eventos para corresponder a eventos por serviço) já devem estar selecionados.
-
Em Nome do serviço, escolha CodeBuild. Em Event Type (Tipo de evento), All Events (Todos os eventos) já deve estar selecionado.
-
O código a seguir deve ser exibido na Event Pattern Preview (Visualização do padrão de evento):
{ "source": [ "aws.codebuild" ] }
-
Escolha Edit (Editar) e substitua o código na Event Pattern Preview (Visualização do padrão de evento) por um dos dois padrões de regra a seguir.
Esse primeiro padrão de regra aciona um evento quando uma compilação é iniciada ou concluída, para os projetos de compilação especificados no AWS CodeBuild.
{ "source": [ "aws.codebuild" ], "detail-type": [ "CodeBuild Build State Change" ], "detail": { "build-status": [ "IN_PROGRESS", "SUCCEEDED", "FAILED", "STOPPED" ], "project-name": [ "
my-demo-project-1
", "my-demo-project-2
" ] } }Na regra anterior, faça as alterações no código a seguir conforme necessário.
-
Para acionar um evento quando uma compilação é iniciada ou concluída, deixe todos os valores conforme mostrado na matriz
build-status
ou remova a matrizbuild-status
junto. -
Para acionar um evento somente quando uma compilação for concluída, remova
IN_PROGRESS
da matrizbuild-status
. -
Para acionar um evento somente quando uma compilação é iniciada, remova todos os valores, exceto
IN_PROGRESS
da matrizbuild-status
. -
Para acionar eventos para todos os projetos de compilação, remova a matriz
project-name
junto. -
Para acionar eventos apenas para projetos de compilação individuais, especifique o nome de cada projeto de compilação na matriz
project-name
.
Esse segundo padrão de regra aciona um evento sempre que uma compilação passa de uma fase de compilação para outra, para os projetos de compilação especificados no AWS CodeBuild.
{ "source": [ "aws.codebuild" ], "detail-type": [ "CodeBuild Build Phase Change" ], "detail": { "completed-phase": [ "SUBMITTED", "PROVISIONING", "DOWNLOAD_SOURCE", "INSTALL", "PRE_BUILD", "BUILD", "POST_BUILD", "UPLOAD_ARTIFACTS", "FINALIZING" ], "completed-phase-status": [ "TIMED_OUT", "STOPPED", "FAILED", "SUCCEEDED", "FAULT", "CLIENT_ERROR" ], "project-name": [ "
my-demo-project-1
", "my-demo-project-2
" ] } }Na regra anterior, faça as alterações no código a seguir conforme necessário.
-
Para acionar um evento para cada alteração na fase de compilação (que pode enviar até nove notificações para cada compilação), deixe todos os valores conforme mostrado na matriz
completed-phase
ou remova a matrizcompleted-phase
junto. -
Para acionar eventos apenas para alterações feitas na fase de compilação individuais, remova o nome de cada fase de compilação na matriz
completed-phase
para a qual você não deseja acionar um evento. -
Para acionar um evento para cada alteração feita no status da fase de compilação, deixe todos os valores conforme mostrado na matriz
completed-phase-status
ou remova a matrizcompleted-phase-status
junto. -
Para acionar eventos apenas para alterações feitas no status da fase de compilação individuais, remova o nome de cada status da fase de compilação na matriz
completed-phase-status
para a qual você não deseja acionar um evento. -
Para acionar eventos para todos os projetos de compilação, remova a matriz
project-name
. -
Para acionar eventos para projetos de compilação individuais, especifique o nome de cada projeto de compilação na matriz
project-name
.
Para obter mais informações sobre padrões de eventos, consulte Event Patterns no Guia do usuário do Amazon EventBridge.
Para obter informações sobre filtragem com padrões de eventos, consulte Content-based Filtering with Event Patterns no Guia do usuário do Amazon EventBridge.
nota
Se quiser acionar eventos para alterações feitas no estado de compilação e alterações na fase de compilação, é necessário criar duas regras à parte: uma para alterações feitas no estado da compilação e outra para alterações feitas na fase de compilação. Se você tentar integrar ambas as regras em uma única, a regra combinada poderá produzir resultados inesperados ou deixar de funcionar em conjunto.
Quando você tiver concluído a substituição do código, escolha Save.
-
-
Em Targets, escolha Add target.
-
Na lista de destinos, escolha SNS topic.
-
Em Topic, escolha o tópico que você identificou ou criou anteriormente.
-
Expanda Configure input e escolha Input Transformer.
-
Na caixa Input Path (Caminho de entrada), digite um dos caminhos de entrada a seguir.
Para uma regra com um valor
detail-type
deCodeBuild Build State Change
, insira o seguinte.{"build-id":"$.detail.build-id","project-name":"$.detail.project-name","build-status":"$.detail.build-status"}
Para uma regra com um valor
detail-type
deCodeBuild Build Phase Change
, insira o seguinte.{"build-id":"$.detail.build-id","project-name":"$.detail.project-name","completed-phase":"$.detail.completed-phase","completed-phase-status":"$.detail.completed-phase-status"}
Para obter outros tipos de informações, consulte Referência do formato de entrada das notificações de compilação.
-
Na caixa Input Template (Modelo de entrada), insira um dos modelos de entrada.
Para uma regra com um valor
detail-type
deCodeBuild Build State Change
, insira o seguinte."Build '<build-id>' for build project '<project-name>' has reached the build status of '<build-status>'."
Para uma regra com um valor
detail-type
deCodeBuild Build Phase Change
, insira o seguinte."Build '<build-id>' for build project '<project-name>' has completed the build phase of '<completed-phase>' with a status of '<completed-phase-status>'."
-
Escolha Configure details (Configurar detalhes).
-
Na página Step 2: Configure rule details (Etapa 2: configurar detalhes da regra) insira um nome e uma descrição opcional. Em State (Estado), deixe Enabled (Habilitado) selecionado.
-
Escolha Criar Regra.
-
Crie projetos de compilação, execute as compilações e exiba as informações de compilação.
-
Confirme se o CodeBuild já está enviando notificações de compilação com êxito. Por exemplo, verifique se agora os e-mails de notificação de compilação estão em sua caixa de entrada.
Para alterar o comportamento de uma regra, no console do CloudWatch, escolha a regra a ser alterada, Ações e Editar. Faça alterações na regra e escolha Configure details (Configurar detalhes) e Update rule (Atualizar regra).
Para deixar de usar uma regra a fim de enviar notificações de compilação, no console do CloudWatch, escolha a regra que você deseja parar de usar, Ações e Desabilitar.
Para excluir completamente uma regra, no console do CloudWatch, escolha a regra a ser excluída, Ações e Excluir.