Migrar pipelines de sondagem para usar a detecção de alterações baseada em eventos - AWS CodePipeline

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á.

Migrar pipelines de sondagem para usar a detecção de alterações baseada em eventos

AWS CodePipeline oferece suporte à entrega completa e end-to-end contínua, o que inclui iniciar seu pipeline sempre que houver uma alteração no código. Há duas maneiras de iniciar o pipeline após uma alteração no código: detecção de alterações baseada em eventos e sondagem. Recomendamos usar a detecção de alterações baseada em eventos para pipelines.

Use os procedimentos incluídos aqui para migrar (atualizar) seus pipelines de sondagem para o método de detecção de alterações baseada em eventos do seu pipeline.

O método recomendado de detecção de alterações baseado em eventos para tubulações é determinado pela fonte da tubulação, como. CodeCommit Nesse caso, por exemplo, o pipeline de pesquisa precisaria migrar para a detecção de alterações baseada em eventos com. EventBridge

Como migrar os pipelines de sondagem

Para migrar os pipelines de sondagem, determine seus pipelines de sondagem e, em seguida, determine o método recomendado de detecção de alterações baseada em eventos:

  • Use as etapas em Visualizar os pipelines de sondagem em sua conta para determinar seus canais de sondagem.

  • Na tabela, encontre o tipo de origem do pipeline e escolha o procedimento com a implementação que você deseja usar para migrar o pipeline de sondagem. Cada seção contém vários métodos de migração, como usar o CLI ou AWS CloudFormation.

Como migrar pipelines para o método de detecção de alterações recomendado
Origem do pipeline Método recomendado de detecção baseada em eventos Procedimentos de migração
AWS CodeCommit EventBridge (recomendado). Consulte Migre os pipelines de votação com uma fonte CodeCommit .
Amazon S3 EventBridge e bucket habilitado para notificações de eventos (recomendado). Consulte Migrar pipelines de sondagem com uma origem do S3 habilitada para eventos.
Amazon S3 EventBridge e uma AWS CloudTrail trilha. Consulte Migre os pipelines de votação com uma fonte e uma trilha do S3 CloudTrail .
GitHub versão 1 Conexões (recomendadas) Consulte Migre os pipelines de pesquisa para uma ação de origem da GitHub versão 1 para as conexões.
GitHub versão 1 Webhooks Consulte Migre os pipelines de pesquisa para uma ação de origem da GitHub versão 1 para webhooks.
Importante

Para atualizações de configuração de ações de pipeline aplicáveis, como pipelines com uma ação de GitHub versão 1, você deve definir explicitamente o PollForSourceChanges parâmetro como false na configuração da ação Source para impedir a pesquisa de um pipeline. Como resultado, é possível configurar erroneamente um pipeline com detecção de alterações baseada em eventos e pesquisa, por exemplo, configurando uma EventBridge regra e também omitindo o parâmetro. PollForSourceChanges Isso resulta em execuções de pipeline duplicadas, e o pipeline é contabilizado em relação ao limite no número total de pipelines de sondagem, que, por padrão é muito inferior aos pipelines com base em eventos. Para obter mais informações, consulte Cotas em AWS CodePipeline.

Visualizar os pipelines de sondagem em sua conta

Como primeira etapa, use um dos scripts a seguir para determinar quais pipelines em sua conta estão configurados para sondagem. Esses são os pipelines para migrar para a detecção de alterações baseada em eventos.

Visualizar pipelines de votação em sua conta (script)

Siga estas etapas para usar um script para determinar os pipelines em sua conta que estão usando sondagem.

  1. Abra uma janela de terminal e execute uma das seguintes ações:

    • Execute o comando a seguir para criar um novo script chamado PollingPipelinesExtractor.sh.

      vi PollingPipelinesExtractor.sh
    • Para usar um script python, execute o comando a seguir para criar um novo script python chamado PollingPipelinesExtractor .py.

      vi PollingPipelinesExtractor.py
  2. Copie e cole o código a seguir no PollingPipelinesExtractorscript. Execute um destes procedimentos:

    • Copie e cole o código a seguir no PollingPipelinesExtractorscript.sh.

      #!/bin/bash set +x POLLING_PIPELINES=() LAST_EXECUTED_DATES=() NEXT_TOKEN=null HAS_NEXT_TOKEN=true if [[ $# -eq 0 ]] ; then echo 'Please provide region name' exit 0 fi REGION=$1 while [ "$HAS_NEXT_TOKEN" != "false" ]; do if [ "$NEXT_TOKEN" != "null" ]; then LIST_PIPELINES_RESPONSE=$(aws codepipeline list-pipelines --region $REGION --next-token $NEXT_TOKEN) else LIST_PIPELINES_RESPONSE=$(aws codepipeline list-pipelines --region $REGION) fi LIST_PIPELINES=$(jq -r '.pipelines[].name' <<< "$LIST_PIPELINES_RESPONSE") NEXT_TOKEN=$(jq -r '.nextToken' <<< "$LIST_PIPELINES_RESPONSE") if [ "$NEXT_TOKEN" == "null" ]; then HAS_NEXT_TOKEN=false fi for pipline_name in $LIST_PIPELINES do PIPELINE=$(aws codepipeline get-pipeline --name $pipline_name --region $REGION) HAS_POLLABLE_ACTIONS=$(jq '.pipeline.stages[].actions[] | select(.actionTypeId.category == "Source") | select(.actionTypeId.owner == ("ThirdParty","AWS")) | select(.actionTypeId.provider == ("GitHub","S3","CodeCommit")) | select(.configuration.PollForSourceChanges == ("true",null))' <<< "$PIPELINE") if [ ! -z "$HAS_POLLABLE_ACTIONS" ]; then POLLING_PIPELINES+=("$pipline_name") PIPELINE_EXECUTIONS=$(aws codepipeline list-pipeline-executions --pipeline-name $pipline_name --region $REGION) LAST_EXECUTION=$(jq -r '.pipelineExecutionSummaries[0]' <<< "$PIPELINE_EXECUTIONS") if [ "$LAST_EXECUTION" != "null" ]; then LAST_EXECUTED_TIMESTAMP=$(jq -r '.startTime' <<< "$LAST_EXECUTION") LAST_EXECUTED_DATE="$(date -r ${LAST_EXECUTED_TIMESTAMP%.*})" else LAST_EXECUTED_DATE="Not executed in last year" fi LAST_EXECUTED_DATES+=("$LAST_EXECUTED_DATE") fi done done fileName=$REGION-$(date +%s) printf "| %-30s | %-30s |\n" "Polling Pipeline Name" "Last Executed Time" printf "| %-30s | %-30s |\n" "_____________________" "__________________" for i in "${!POLLING_PIPELINES[@]}"; do printf "| %-30s | %-30s |\n" "${POLLING_PIPELINES[i]}" "${LAST_EXECUTED_DATES[i]}" printf "${POLLING_PIPELINES[i]}," >> $fileName.csv done printf "\nSaving Polling Pipeline Names to file $fileName.csv."
    • Copie e cole o código a seguir no PollingPipelinesExtractorscript.py.

      import boto3 import sys import time import math hasNextToken = True nextToken = "" pollablePipelines = [] lastExecutedTimes = [] if len(sys.argv) == 1: raise Exception("Please provide region name.") session = boto3.Session(profile_name='default', region_name=sys.argv[1]) codepipeline = session.client('codepipeline') def is_pollable_action(action): actionTypeId = action['actionTypeId'] configuration = action['configuration'] return actionTypeId['owner'] in {"AWS", "ThirdParty"} and actionTypeId['provider'] in {"GitHub", "CodeCommit", "S3"} and ('PollForSourceChanges' not in configuration or configuration['PollForSourceChanges'] == 'true') def has_pollable_actions(pipeline): hasPollableAction = False pipelineDefinition = codepipeline.get_pipeline(name=pipeline['name'])['pipeline'] for action in pipelineDefinition['stages'][0]['actions']: hasPollableAction = is_pollable_action(action) if hasPollableAction: break return hasPollableAction def get_last_executed_time(pipelineName): pipelineExecutions=codepipeline.list_pipeline_executions(pipelineName=pipelineName)['pipelineExecutionSummaries'] if pipelineExecutions: return pipelineExecutions[0]['startTime'].strftime("%A %m/%d/%Y, %H:%M:%S") else: return "Not executed in last year" while hasNextToken: if nextToken=="": list_pipelines_response = codepipeline.list_pipelines() else: list_pipelines_response = codepipeline.list_pipelines(nextToken=nextToken) if 'nextToken' in list_pipelines_response: nextToken = list_pipelines_response['nextToken'] else: hasNextToken= False for pipeline in list_pipelines_response['pipelines']: if has_pollable_actions(pipeline): pollablePipelines.append(pipeline['name']) lastExecutedTimes.append(get_last_executed_time(pipeline['name'])) fileName="{region}-{timeNow}.csv".format(region=sys.argv[1],timeNow=math.trunc(time.time())) file = open(fileName, 'w') print ("{:<30} {:<30} {:<30}".format('Polling Pipeline Name', '|','Last Executed Time')) print ("{:<30} {:<30} {:<30}".format('_____________________', '|','__________________')) for i in range(len(pollablePipelines)): print("{:<30} {:<30} {:<30}".format(pollablePipelines[i], '|', lastExecutedTimes[i])) file.write("{pipeline},".format(pipeline=pollablePipelines[i])) file.close() print("\nSaving Polling Pipeline Names to file {fileName}".format(fileName=fileName))
  3. Para cada região em que você tem pipelines, você deve executar o script para essa região. Para executar o script, faça o seguinte:

    • Execute o comando a seguir para executar o script chamado PollingPipelinesExtractor.sh. Neste exemplo, a região é us-west-2.

      ./PollingPipelinesExtractor.sh us-west-2
    • Para o script python, execute o comando a seguir para executar o script python chamado PollingPipelinesExtractor .py. Neste exemplo, a região é us-west-2.

      python3 PollingPipelinesExtractor.py us-west-2

    No exemplo de saída do script a seguir, a Região us-west-2 retornou uma lista de pipelines de sondagem e mostra o horário da última execução de cada pipeline.

    % ./pollingPipelineExtractor.sh us-west-2 | Polling Pipeline Name | Last Executed Time | | _____________________ | __________________ | | myCodeBuildPipeline | Wed Mar 8 09:35:49 PST 2023 | | myCodeCommitPipeline | Mon Apr 24 22:32:32 PDT 2023 | | TestPipeline | Not executed in last year | Saving list of polling pipeline names to us-west-2-1682496174.csv...%

    Analise a saída do script e, para cada pipeline na lista, atualize a fonte de sondagem para o método recomendado de detecção de alterações baseada em eventos.

    nota

    Seus pipelines de sondagem são determinados pela configuração de ação do pipeline para o parâmetro PollForSourceChanges. Se a configuração da fonte do pipeline tiver o PollForSourceChanges parâmetro omitido, o CodePipeline padrão será pesquisar seu repositório em busca de alterações na fonte. Esse comportamento será o equivalente a ter PollForSourceChanges incluído e definido como true. Para obter mais informações, consulte os parâmetros de configuração da ação de origem do seu pipeline, como os parâmetros de configuração da ação de origem do Amazon S3 em Referência de ação de origem do Amazon S3.

    Observe que esse script também gera um arquivo.csv contendo a lista de pipelines de sondagem em sua conta e salva o arquivo.csv na pasta de trabalho atual.

Migre os pipelines de votação com uma fonte CodeCommit

Você pode migrar seu pipeline de votação EventBridge para usá-lo na detecção de alterações em seu repositório de CodeCommit origem ou em seu bucket de origem do Amazon S3.

CodeCommit-- Para um pipeline com uma CodeCommit fonte, modifique o pipeline para que a detecção de alterações seja automatizada EventBridge. Escolha um dos seguintes métodos para implementar a migração:

Migre canais de votação (ou fonte do Amazon CodeCommit S3) (console)

Você pode usar o CodePipeline console para atualizar seu pipeline e usá-lo EventBridge para detectar alterações em seu repositório de CodeCommit origem ou em seu bucket de origem do Amazon S3.

nota

Quando você usa o console para editar um pipeline que tem um repositório de CodeCommit origem ou um bucket de origem do Amazon S3, a regra IAM e a função são criadas para você. Se você usar o AWS CLI para editar o pipeline, você mesmo deverá criar a EventBridge regra e a IAM função. Para obter mais informações, consulte CodeCommit ações de origem e EventBridge.

Siga essas etapas para editar um pipeline que conduz verificações periódicas. Se você deseja criar um pipeline, consulte Crie um pipeline, estágios e ações.

Para editar o estágio de origem do pipeline
  1. Faça login no AWS Management Console e abra o CodePipeline console em http://console.aws.amazon.com/codesuite/codepipeline/home.

    Os nomes de todos os pipelines associados à sua AWS conta são exibidos.

  2. Em Nome, selecione o nome do pipeline que você deseja editar. Isso abrirá um visão detalhada do pipeline, incluindo o estado de cada uma das ações em cada estágio do pipeline.

  3. Na página de detalhes do pipeline, selecione Editar.

  4. Em Edit stage (Editar estágio), selecione o ícone de edição na ação de origem.

  5. Expanda as Opções de detecção de alterações e escolha Usar CloudWatch eventos para iniciar automaticamente meu pipeline quando ocorrer uma alteração (recomendado).

    É exibida uma mensagem mostrando a EventBridge regra a ser criada para esse pipeline. Selecione Atualizar.

    Se estiver atualizando um pipeline que tem uma origem do Amazon S3, você verá a mensagem a seguir. Selecione Atualizar.

  6. Quando terminar de editar seu pipeline, selecione Salvar alterações do pipeline para voltar à página de resumo.

    Uma mensagem exibe o nome da EventBridge regra a ser criada para seu funil. Escolha Save and continue.

  7. Para testar sua ação, libere uma alteração usando o AWS CLI para confirmar uma alteração na fonte especificada no estágio de origem do pipeline.

Migrar canais de pesquisa (CodeCommit fonte) () CLI

Siga estas etapas para editar um pipeline que está usando sondagens (verificações periódicas) para usar uma EventBridge regra para iniciar o pipeline. Se você deseja criar um pipeline, consulte Crie um pipeline, estágios e ações.

Para criar um pipeline orientado por eventos com CodeCommit, você edita o PollForSourceChanges parâmetro do seu pipeline e, em seguida, cria os seguintes recursos:

  • EventBridge evento

  • IAMfunção para permitir que esse evento inicie seu funil

Para editar o PollForSourceChanges parâmetro do seu funil
Importante

Ao criar um pipeline com esse método, o parâmetro PollForSourceChanges é padronizado como verdadeiro se não for explicitamente definido como falso. Ao adicionar a detecção de alterações baseada em eventos, é necessário adicionar o parâmetro a sua saída e defini-lo como falso para desativar a sondagem. Caso contrário, o pipeline inicia duas vezes para uma única alteração de origem. Para obter detalhes, consulte Configurações válidas para o PollForSourceChanges parâmetro.

  1. Execute o get-pipeline comando para copiar a estrutura do pipeline em um JSON arquivo. Por exemplo, para um pipeline nomeado MyFirstPipeline, execute o seguinte comando:

    aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json

    Este comando retorna nada, mas o arquivo que você criou deve aparecer no diretório onde você executou o comando.

  2. Abra o JSON arquivo em qualquer editor de texto simples e edite o estágio de origem alterando o PollForSourceChanges parâmetro parafalse, conforme mostrado neste exemplo.

    Por que estou fazendo essa alteração? A alteração deste parâmetro para false desativa as verificações periódicas para que você possa utilizar apenas a detecção de alterações baseada em eventos.

    "configuration": { "PollForSourceChanges": "false", "BranchName": "main", "RepositoryName": "MyTestRepo" },
  3. Se você estiver trabalhando com a estrutura do pipeline recuperada usando o get-pipeline comando, remova as metadata linhas do JSON arquivo. Caso contrário, o comando update-pipeline não é capaz de utilizá-la. Remova as linhas "metadata": { }, "created", "pipelineARN" e os campos "updated".

    Por exemplo, remova as seguintes linhas da estrutura:

    "metadata": { "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name", "created": "date", "updated": "date" },

    Salve o arquivo.

  4. Para aplicar suas alterações, execute o update-pipeline comando, especificando o JSON arquivo do pipeline:

    Importante

    Não se esqueça de incluir file:// antes do nome de arquivo. Ele é obrigatório nesse comando.

    aws codepipeline update-pipeline --cli-input-json file://pipeline.json

    Este comando retorna toda a estrutura do pipeline editado.

    nota

    O comando update-pipeline interrompe o pipeline. Se uma revisão estiver sendo executada pelo pipeline quando você executar o comando update-pipeline, essa execução será interrompida. Você deve iniciar manualmente o pipeline para executar a revisão através do pipeline atualizado. Use o comando start-pipeline-execution para iniciar manualmente o pipeline.

Para criar uma EventBridge regra com CodeCommit como origem do evento e CodePipeline como destino
  1. Adicione permissões para usar EventBridge CodePipeline para invocar a regra. Para obter mais informações, consulte Uso de políticas baseadas em recursos para a Amazon. EventBridge

    1. Use o exemplo a seguir para criar a política de confiança que permite assumir EventBridge a função de serviço. Nomeie a política de confiança trustpolicyforEB.json.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. Use o comando a seguir para criar a função Role-for-MyRule e anexar a política de confiança.

      aws iam create-role --role-name Role-for-MyRule --assume-role-policy-document file://trustpolicyforEB.json
    3. Crie a política de permissõesJSON, conforme mostrado neste exemplo, para o pipeline chamadoMyFirstPipeline. Nomeie a politica de permissões permissionspolicyforEB.json.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:StartPipelineExecution" ], "Resource": [ "arn:aws:codepipeline:us-west-2:80398EXAMPLE:MyFirstPipeline" ] } ] }
    4. Use o comando a seguir para anexar a política de permissões CodePipeline-Permissions-Policy-for-EB à função Role-for-MyRule.

      Por que estou fazendo essa alteração? Adicionar essa política à função cria permissões para EventBridge.

      aws iam put-role-policy --role-name Role-for-MyRule --policy-name CodePipeline-Permissions-Policy-For-EB --policy-document file://permissionspolicyforEB.json
  2. Use o comando put-rule e inclua os parâmetros --name, --event-pattern e --role-arn.

    Por que estou fazendo essa alteração? Esse comando permite que o AWS CloudFormation crie o evento.

    O comando de exemplo a seguir cria uma regra chamada MyCodeCommitRepoRule.

    aws events put-rule --name "MyCodeCommitRepoRule" --event-pattern "{\"source\":[\"aws.codecommit\"],\"detail-type\":[\"CodeCommit Repository State Change\"],\"resources\":[\"repository-ARN\"],\"detail\":{\"referenceType\":[\"branch\"],\"referenceName\":[\"main\"]}}" --role-arn "arn:aws:iam::ACCOUNT_ID:role/Role-for-MyRule"
  3. Para adicionar CodePipeline como destino, chame o put-targets comando e inclua os seguintes parâmetros:

    • O parâmetro --rule é usado com rule_name criado por meio de put-rule.

    • O parâmetro --targets é usado com o Id da lista do destino na lista de destinos e o ARN do pipeline de destino.

    O exemplo de comando a seguir especifica que, para a regra chamada MyCodeCommitRepoRule, o Id do destino é composto do número um, indicando que, em uma lista de destinos para a regra, esse é o destino 1. O exemplo de comando também especifica um exemplo ARN para o pipeline. O pipeline é iniciado quando uma alteração é feita no repositório.

    aws events put-targets --rule MyCodeCommitRepoRule --targets Id=1,Arn=arn:aws:codepipeline:us-west-2:80398EXAMPLE:TestPipeline

Migrar canais de votação (CodeCommit fonte) (modelo)AWS CloudFormation

Para criar um pipeline orientado por eventos com AWS CodeCommit, você edita o PollForSourceChanges parâmetro do seu pipeline e, em seguida, adiciona os seguintes recursos ao seu modelo:

  • Uma EventBridge regra

  • Um IAM papel para sua EventBridge regra

Se você usa AWS CloudFormation para criar e gerenciar seus pipelines, seu modelo inclui conteúdo como o seguinte.

nota

A propriedade Configuration no estágio de origem denominado PollForSourceChanges. Se essa propriedade não estiver incluída em seu modelo, PollForSourceChanges será definido como true por padrão.

YAML
Resources: AppPipeline: Type: AWS::CodePipeline::Pipeline Properties: Name: codecommit-polling-pipeline RoleArn: !GetAtt CodePipelineServiceRole.Arn Stages: - Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: AWS Version: 1 Provider: CodeCommit OutputArtifacts: - Name: SourceOutput Configuration: BranchName: !Ref BranchName RepositoryName: !Ref RepositoryName PollForSourceChanges: true RunOrder: 1
JSON
"Stages": [ { "Name": "Source", "Actions": [{ "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "AWS", "Version": 1, "Provider": "CodeCommit" }, "OutputArtifacts": [{ "Name": "SourceOutput" }], "Configuration": { "BranchName": { "Ref": "BranchName" }, "RepositoryName": { "Ref": "RepositoryName" }, "PollForSourceChanges": true }, "RunOrder": 1 }] },
Para atualizar seu AWS CloudFormation modelo de funil e criar uma EventBridge regra
  1. No modelo, emResources, use o AWS::IAM::Role AWS CloudFormation recurso para configurar a IAM função que permite que seu evento inicie seu pipeline. Essa entrada cria uma função que utiliza duas políticas:

    • A primeira política permite que a função seja assumida.

    • A segunda política fornece permissões para iniciar o pipeline.

    Por que estou fazendo essa alteração? Adicionar o AWS::IAM::Role recurso permite AWS CloudFormation criar permissões para EventBridge. Esse recurso é adicionado à sua AWS CloudFormation pilha.

    YAML
    EventRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - events.amazonaws.com Action: sts:AssumeRole Path: / Policies: - PolicyName: eb-pipeline-execution PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: codepipeline:StartPipelineExecution Resource: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ]
    JSON
    "EventRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }, "Path": "/", "Policies": [ { "PolicyName": "eb-pipeline-execution", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "codepipeline:StartPipelineExecution", "Resource": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ...
  2. No modelo, emResources, use o AWS::Events::Rule AWS CloudFormation recurso para adicionar uma EventBridge regra. Esse padrão de evento cria um evento que monitora as alterações por push no seu repositório. Quando EventBridge detecta uma alteração no estado do repositório, a regra é invocada StartPipelineExecution em seu pipeline de destino.

    Por que estou fazendo essa alteração? Adicionar o AWS::Events::Rule recurso permite AWS CloudFormation criar o evento. Esse recurso é adicionado à sua AWS CloudFormation pilha.

    YAML
    EventRule: Type: AWS::Events::Rule Properties: EventPattern: source: - aws.codecommit detail-type: - 'CodeCommit Repository State Change' resources: - !Join [ '', [ 'arn:aws:codecommit:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref RepositoryName ] ] detail: event: - referenceCreated - referenceUpdated referenceType: - branch referenceName: - main Targets: - Arn: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] RoleArn: !GetAtt EventRole.Arn Id: codepipeline-AppPipeline
    JSON
    "EventRule": { "Type": "AWS::Events::Rule", "Properties": { "EventPattern": { "source": [ "aws.codecommit" ], "detail-type": [ "CodeCommit Repository State Change" ], "resources": [ { "Fn::Join": [ "", [ "arn:aws:codecommit:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "RepositoryName" } ] ] } ], "detail": { "event": [ "referenceCreated", "referenceUpdated" ], "referenceType": [ "branch" ], "referenceName": [ "main" ] } }, "Targets": [ { "Arn": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] }, "RoleArn": { "Fn::GetAtt": [ "EventRole", "Arn" ] }, "Id": "codepipeline-AppPipeline" } ] } },
  3. Salve o modelo atualizado em seu computador local e abra o console do AWS CloudFormation .

  4. Selecione sua pilha e clique em Create Change Set for Current Stack (Criar conjunto de alterações para a pilha atual).

  5. Carregue o modelo e visualize as alterações listadas no AWS CloudFormation. Essas são as alterações a serem feitas na pilha. Seus novos recursos devem ser exibidos na lista.

  6. Clique em Executar.

Para editar o PollForSourceChanges parâmetro do seu funil
Importante

Em muitos casos, o parâmetro PollForSourceChanges é padronizado como verdadeiro ao criar um pipeline. Ao adicionar a detecção de alterações baseada em eventos, é necessário adicionar o parâmetro a sua saída e defini-lo como falso para desativar a sondagem. Caso contrário, o pipeline inicia duas vezes para uma única alteração de origem. Para obter detalhes, consulte Configurações válidas para o PollForSourceChanges parâmetro.

  • No modelo, altere PollForSourceChanges para false. Se você não incluir PollForSourceChanges na sua definição de pipeline, adicione-o e configure para false.

    Por que estou fazendo essa alteração? A alteração deste parâmetro para false desativa as verificações periódicas para que você possa utilizar apenas a detecção de alterações baseada em eventos.

    YAML
    Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: AWS Version: 1 Provider: CodeCommit OutputArtifacts: - Name: SourceOutput Configuration: BranchName: !Ref BranchName RepositoryName: !Ref RepositoryName PollForSourceChanges: false RunOrder: 1
    JSON
    { "Name": "Source", "Actions": [ { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "AWS", "Version": 1, "Provider": "CodeCommit" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "BranchName": { "Ref": "BranchName" }, "RepositoryName": { "Ref": "RepositoryName" }, "PollForSourceChanges": false }, "RunOrder": 1 } ] },

Quando você cria esses recursos com AWS CloudFormation, seu pipeline é acionado quando os arquivos no seu repositório são criados ou atualizados. Aqui está o trecho do modelo final:

YAML
Resources: EventRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - events.amazonaws.com Action: sts:AssumeRole Path: / Policies: - PolicyName: eb-pipeline-execution PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: codepipeline:StartPipelineExecution Resource: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] EventRule: Type: AWS::Events::Rule Properties: EventPattern: source: - aws.codecommit detail-type: - 'CodeCommit Repository State Change' resources: - !Join [ '', [ 'arn:aws:codecommit:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref RepositoryName ] ] detail: event: - referenceCreated - referenceUpdated referenceType: - branch referenceName: - main Targets: - Arn: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] RoleArn: !GetAtt EventRole.Arn Id: codepipeline-AppPipeline AppPipeline: Type: AWS::CodePipeline::Pipeline Properties: Name: codecommit-events-pipeline RoleArn: !GetAtt CodePipelineServiceRole.Arn Stages: - Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: AWS Version: 1 Provider: CodeCommit OutputArtifacts: - Name: SourceOutput Configuration: BranchName: !Ref BranchName RepositoryName: !Ref RepositoryName PollForSourceChanges: false RunOrder: 1 ...
JSON
"Resources": { ... "EventRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }, "Path": "/", "Policies": [ { "PolicyName": "eb-pipeline-execution", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "codepipeline:StartPipelineExecution", "Resource": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] } } ] } } ] } }, "EventRule": { "Type": "AWS::Events::Rule", "Properties": { "EventPattern": { "source": [ "aws.codecommit" ], "detail-type": [ "CodeCommit Repository State Change" ], "resources": [ { "Fn::Join": [ "", [ "arn:aws:codecommit:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "RepositoryName" } ] ] } ], "detail": { "event": [ "referenceCreated", "referenceUpdated" ], "referenceType": [ "branch" ], "referenceName": [ "main" ] } }, "Targets": [ { "Arn": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] }, "RoleArn": { "Fn::GetAtt": [ "EventRole", "Arn" ] }, "Id": "codepipeline-AppPipeline" } ] } }, "AppPipeline": { "Type": "AWS::CodePipeline::Pipeline", "Properties": { "Name": "codecommit-events-pipeline", "RoleArn": { "Fn::GetAtt": [ "CodePipelineServiceRole", "Arn" ] }, "Stages": [ { "Name": "Source", "Actions": [ { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "AWS", "Version": 1, "Provider": "CodeCommit" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "BranchName": { "Ref": "BranchName" }, "RepositoryName": { "Ref": "RepositoryName" }, "PollForSourceChanges": false }, "RunOrder": 1 } ] }, ...

Migrar pipelines de sondagem com uma origem do S3 habilitada para eventos

Para um pipeline com uma fonte do Amazon S3, modifique o pipeline para que a detecção de alterações seja automatizada por meio de EventBridge e com um bucket de origem habilitado para notificações de eventos. Esse é o método recomendado se você estiver usando o CLI ou AWS CloudFormation para migrar seu pipeline.

nota

Isso inclui o uso de um bucket habilitado para notificações de eventos, onde você não precisa criar uma CloudTrail trilha separada. Se você estiver usando o console, uma regra de evento e uma CloudTrail trilha serão configuradas para você. Para obter essas etapas, consulte Migre os pipelines de votação com uma fonte e uma trilha do S3 CloudTrail .

Migre pipelines de votação com uma fonte S3 habilitada para eventos () CLI

Siga estas etapas para editar um pipeline que está usando enquetes (verificações periódicas) para usar um evento em EventBridge vez disso. Se você deseja criar um pipeline, consulte Crie um pipeline, estágios e ações.

Para criar um pipeline baseado em eventos com o Amazon S3, edite o parâmetro PollForSourceChanges de seu pipeline e crie os seguintes recursos:

  • EventBridge regra do evento

  • IAMfunção para permitir que o EventBridge evento inicie seu funil

Para criar uma EventBridge regra com o Amazon S3 como fonte e destino do evento e CodePipeline aplicar a política de permissões
  1. Conceda permissões EventBridge para usar CodePipeline para invocar a regra. Para obter mais informações, consulte Uso de políticas baseadas em recursos para a Amazon. EventBridge

    1. Use o exemplo a seguir para criar a política de confiança que permita assumir EventBridge a função de serviço. Chame-o de trustpolicyforEB.json.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. Use o comando a seguir para criar a função Role-for-MyRule e anexar a política de confiança.

      Por que estou fazendo essa alteração? Adicionar essa política de confiança à função cria permissões para EventBridge.

      aws iam create-role --role-name Role-for-MyRule --assume-role-policy-document file://trustpolicyforEB.json
    3. Crie a política de permissõesJSON, conforme mostrado aqui para o pipeline chamadoMyFirstPipeline. Nomeie a politica de permissões permissionspolicyforEB.json.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:StartPipelineExecution" ], "Resource": [ "arn:aws:codepipeline:us-west-2:80398EXAMPLE:MyFirstPipeline" ] } ] }
    4. Use o comando a seguir para anexar a nova política de permissões CodePipeline-Permissions-Policy-for-EB à função Role-for-MyRule criada.

      aws iam put-role-policy --role-name Role-for-MyRule --policy-name CodePipeline-Permissions-Policy-For-EB --policy-document file://permissionspolicyforEB.json
  2. Use o comando put-rule e inclua os parâmetros --name, --event-pattern e --role-arn.

    O exemplo de comando a seguir cria uma regra chamada EnabledS3SourceRule.

    aws events put-rule --name "EnabledS3SourceRule" --event-pattern "{\"source\":[\"aws.s3\"],\"detail-type\":[\"Object Created\"],\"detail\":{\"bucket\":{\"name\":[\"amzn-s3-demo-source-bucket\"]}}}" --role-arn "arn:aws:iam::ACCOUNT_ID:role/Role-for-MyRule"
  3. Para adicionar CodePipeline como destino, chame o put-targets comando e inclua --rule --targets os parâmetros e.

    O comando a seguir especifica que, para a regra denominada EnabledS3SourceRule, o Id do destino é composto do número um, indicando que, em uma lista de destinos para a regra, esse é o destino 1. O comando também especifica um ARN de exemplo para o pipeline. O pipeline é iniciado quando uma alteração é feita no repositório.

    aws events put-targets --rule EnabledS3SourceRule --targets Id=codepipeline-AppPipeline,Arn=arn:aws:codepipeline:us-west-2:80398EXAMPLE:TestPipeline
Para editar o PollForSourceChanges parâmetro do seu funil
Importante

Ao criar um pipeline com esse método, o parâmetro PollForSourceChanges é padronizado como verdadeiro se não for explicitamente definido como falso. Ao adicionar a detecção de alterações baseada em eventos, é necessário adicionar o parâmetro a sua saída e defini-lo como falso para desativar a sondagem. Caso contrário, o pipeline inicia duas vezes para uma única alteração de origem. Para obter detalhes, consulte Configurações válidas para o PollForSourceChanges parâmetro.

  1. Execute o get-pipeline comando para copiar a estrutura do pipeline em um JSON arquivo. Por exemplo, para um pipeline nomeado MyFirstPipeline, execute o seguinte comando:

    aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json

    Este comando retorna nada, mas o arquivo que você criou deve aparecer no diretório onde você executou o comando.

  2. Abra o JSON arquivo em qualquer editor de texto sem formatação e edite o estágio de origem alterando o PollForSourceChanges parâmetro de um bucket chamado amzn-s3-demo-source-bucket parafalse, conforme mostrado neste exemplo.

    Por que estou fazendo essa alteração? A configuração deste parâmetro para false desativa as verificações periódicas para que você possa utilizar apenas a detecção de alterações baseada em eventos.

    "configuration": { "S3Bucket": "amzn-s3-demo-source-bucket", "PollForSourceChanges": "false", "S3ObjectKey": "index.zip" },
  3. Se você estiver trabalhando com a estrutura do pipeline recuperada usando o get-pipeline comando, deverá remover as metadata linhas do JSON arquivo. Caso contrário, o comando update-pipeline não é capaz de utilizá-la. Remova as linhas "metadata": { }, "created", "pipelineARN" e os campos "updated".

    Por exemplo, remova as seguintes linhas da estrutura:

    "metadata": { "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name", "created": "date", "updated": "date" },

    Salve o arquivo.

  4. Para aplicar suas alterações, execute o update-pipeline comando, especificando o JSON arquivo do pipeline:

    Importante

    Não se esqueça de incluir file:// antes do nome de arquivo. Ele é obrigatório nesse comando.

    aws codepipeline update-pipeline --cli-input-json file://pipeline.json

    Este comando retorna toda a estrutura do pipeline editado.

    nota

    O comando update-pipeline interrompe o pipeline. Se uma revisão estiver sendo executada pelo pipeline quando você executar o comando update-pipeline, essa execução será interrompida. Você deve iniciar manualmente o pipeline para executar a revisão através do pipeline atualizado. Use o comando start-pipeline-execution para iniciar manualmente o pipeline.

Migre pipelines de votação com uma fonte S3 habilitada para eventos (modelo)AWS CloudFormation

Esse procedimento refere-se a um pipeline em que o bucket de origem tem eventos habilitados.

Use estas etapas para alterar o pipeline com uma origem do Amazon S3 da sondagem para a detecção de alterações baseada em eventos.

Para criar um pipeline baseado em eventos com o Amazon S3, edite o parâmetro PollForSourceChanges de seu pipeline e adicione os seguintes recursos ao modelo:

  • EventBridge regra e IAM função para permitir que esse evento inicie seu funil.

Se você usa AWS CloudFormation para criar e gerenciar seus pipelines, seu modelo inclui conteúdo como o seguinte.

nota

A propriedade Configuration no estágio de origem denominado PollForSourceChanges. Se o seu modelo não inclui essa propriedade, PollForSourceChanges é definido como true por padrão.

YAML
AppPipeline: Type: AWS::CodePipeline::Pipeline Properties: RoleArn: !GetAtt CodePipelineServiceRole.Arn Stages: - Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: AWS Version: 1 Provider: S3 OutputArtifacts: - Name: SourceOutput Configuration: S3Bucket: !Ref SourceBucket S3ObjectKey: !Ref S3SourceObjectKey PollForSourceChanges: true RunOrder: 1 ...
JSON
"AppPipeline": { "Type": "AWS::CodePipeline::Pipeline", "Properties": { "RoleArn": { "Fn::GetAtt": ["CodePipelineServiceRole", "Arn"] }, "Stages": [ { "Name": "Source", "Actions": [ { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "AWS", "Version": 1, "Provider": "S3" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "S3Bucket": { "Ref": "SourceBucket" }, "S3ObjectKey": { "Ref": "SourceObjectKey" }, "PollForSourceChanges": true }, "RunOrder": 1 } ] }, ...
Para criar uma EventBridge regra com o Amazon S3 como fonte e destino do evento e CodePipeline aplicar a política de permissões
  1. No modelo, emResources, use o AWS::IAM::Role AWS CloudFormation recurso para configurar a IAM função que permite que seu evento inicie seu pipeline. Essa entrada cria uma função que utiliza duas políticas:

    • A primeira política permite que a função seja assumida.

    • A segunda política fornece permissões para iniciar o pipeline.

    Por que estou fazendo essa alteração? Adicionar AWS::IAM::Role recursos permite AWS CloudFormation criar permissões para EventBridge. Esse recurso é adicionado à sua AWS CloudFormation pilha.

    YAML
    EventRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - events.amazonaws.com Action: sts:AssumeRole Path: / Policies: - PolicyName: eb-pipeline-execution PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: codepipeline:StartPipelineExecution Resource: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] ...
    JSON
    "EventRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }, "Path": "/", "Policies": [ { "PolicyName": "eb-pipeline-execution", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "codepipeline:StartPipelineExecution", "Resource": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] ...
  2. Use o AWS::Events::Rule AWS CloudFormation recurso para adicionar uma EventBridge regra. Esse padrão de evento cria um evento que monitora a criação ou exclusão de objetos no bucket de origem do Amazon S3. Além disso, inclua um destino de seu pipeline. Quando um objeto é criado, essa regra é invoca StartPipelineExecution em seu pipeline de destino.

    Por que estou fazendo essa alteração? Adicionar o AWS::Events::Rule recurso permite AWS CloudFormation criar o evento. Esse recurso é adicionado à sua AWS CloudFormation pilha.

    YAML
    EventRule: Type: AWS::Events::Rule Properties: EventBusName: default EventPattern: source: - aws.s3 detail-type: - Object Created detail: bucket: name: - !Ref SourceBucket Name: EnabledS3SourceRule State: ENABLED Targets: - Arn: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] RoleArn: !GetAtt EventRole.Arn Id: codepipeline-AppPipeline ...
    JSON
    "EventRule": { "Type": "AWS::Events::Rule", "Properties": { "EventBusName": "default", "EventPattern": { "source": [ "aws.s3" ], "detail-type": [ "Object Created" ], "detail": { "bucket": { "name": [ "s3-pipeline-source-fra-bucket" ] } } }, "Name": "EnabledS3SourceRule", "State": "ENABLED", "Targets": [ { "Arn": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] }, "RoleArn": { "Fn::GetAtt": [ "EventRole", "Arn" ] }, "Id": "codepipeline-AppPipeline" } ] } } }, ...
  3. Salve o modelo atualizado no computador local e abra o console do AWS CloudFormation .

  4. Selecione sua pilha e clique em Create Change Set for Current Stack (Criar conjunto de alterações para a pilha atual).

  5. Carregue o modelo atualizado e, em seguida, visualize as alterações listadas no AWS CloudFormation. Essas são as alterações que serão feitas na pilha. Seus novos recursos devem ser exibidos na lista.

  6. Clique em Executar.

Para editar o PollForSourceChanges parâmetro do seu funil
Importante

Ao criar um pipeline com esse método, o parâmetro PollForSourceChanges é padronizado como verdadeiro se não for explicitamente definido como falso. Ao adicionar a detecção de alterações baseada em eventos, é necessário adicionar o parâmetro a sua saída e defini-lo como falso para desativar a sondagem. Caso contrário, o pipeline inicia duas vezes para uma única alteração de origem. Para obter detalhes, consulte Configurações válidas para o PollForSourceChanges parâmetro.

  • No modelo, altere PollForSourceChanges para false. Se você não incluir PollForSourceChanges na sua definição de pipeline, adicione-o e configure para false.

    Por que estou fazendo essa alteração? A alteração de PollForSourceChanges para false desativa as verificações periódicas para que você possa utilizar apenas a detecção de alterações baseada em eventos.

    YAML
    Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: AWS Version: 1 Provider: S3 OutputArtifacts: - Name: SourceOutput Configuration: S3Bucket: !Ref SourceBucket S3ObjectKey: !Ref SourceObjectKey PollForSourceChanges: false RunOrder: 1
    JSON
    { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "AWS", "Version": 1, "Provider": "S3" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "S3Bucket": { "Ref": "SourceBucket" }, "S3ObjectKey": { "Ref": "SourceObjectKey" }, "PollForSourceChanges": false }, "RunOrder": 1 }

Quando você usa AWS CloudFormation para criar esses recursos, seu pipeline é acionado quando os arquivos no seu repositório são criados ou atualizados.

nota

Não pare por aqui. Embora seu pipeline tenha sido criado, você deve criar um segundo AWS CloudFormation modelo para seu pipeline do Amazon S3. Se você não criar o segundo modelo, o pipeline não apresentará funcionalidades de detecção de alterações.

YAML
Parameters: SourceObjectKey: Description: 'S3 source artifact' Type: String Default: SampleApp_Linux.zip ApplicationName: Description: 'CodeDeploy application name' Type: String Default: DemoApplication BetaFleet: Description: 'Fleet configured in CodeDeploy' Type: String Default: DemoFleet Resources: SourceBucket: Type: AWS::S3::Bucket Properties: NotificationConfiguration: EventBridgeConfiguration: EventBridgeEnabled: true VersioningConfiguration: Status: Enabled CodePipelineArtifactStoreBucket: Type: AWS::S3::Bucket CodePipelineArtifactStoreBucketPolicy: Type: AWS::S3::BucketPolicy Properties: Bucket: !Ref CodePipelineArtifactStoreBucket PolicyDocument: Version: 2012-10-17 Statement: - Sid: DenyUnEncryptedObjectUploads Effect: Deny Principal: '*' Action: s3:PutObject Resource: !Join [ '', [ !GetAtt CodePipelineArtifactStoreBucket.Arn, '/*' ] ] Condition: StringNotEquals: s3:x-amz-server-side-encryption: aws:kms - Sid: DenyInsecureConnections Effect: Deny Principal: '*' Action: s3:* Resource: !Sub ${CodePipelineArtifactStoreBucket.Arn}/* Condition: Bool: aws:SecureTransport: false CodePipelineServiceRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - codepipeline.amazonaws.com Action: sts:AssumeRole Path: / Policies: - PolicyName: AWS-CodePipeline-Service-3 PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - codecommit:CancelUploadArchive - codecommit:GetBranch - codecommit:GetCommit - codecommit:GetUploadArchiveStatus - codecommit:UploadArchive Resource: 'resource_ARN' - Effect: Allow Action: - codedeploy:CreateDeployment - codedeploy:GetApplicationRevision - codedeploy:GetDeployment - codedeploy:GetDeploymentConfig - codedeploy:RegisterApplicationRevision Resource: 'resource_ARN' - Effect: Allow Action: - codebuild:BatchGetBuilds - codebuild:StartBuild Resource: 'resource_ARN' - Effect: Allow Action: - devicefarm:ListProjects - devicefarm:ListDevicePools - devicefarm:GetRun - devicefarm:GetUpload - devicefarm:CreateUpload - devicefarm:ScheduleRun Resource: 'resource_ARN' - Effect: Allow Action: - lambda:InvokeFunction - lambda:ListFunctions Resource: 'resource_ARN' - Effect: Allow Action: - iam:PassRole Resource: 'resource_ARN' - Effect: Allow Action: - elasticbeanstalk:* - ec2:* - elasticloadbalancing:* - autoscaling:* - cloudwatch:* - s3:* - sns:* - cloudformation:* - rds:* - sqs:* - ecs:* Resource: 'resource_ARN' AppPipeline: Type: AWS::CodePipeline::Pipeline Properties: Name: s3-events-pipeline RoleArn: !GetAtt CodePipelineServiceRole.Arn Stages: - Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: AWS Version: 1 Provider: S3 OutputArtifacts: - Name: SourceOutput Configuration: S3Bucket: !Ref SourceBucket S3ObjectKey: !Ref SourceObjectKey PollForSourceChanges: false RunOrder: 1 - Name: Beta Actions: - Name: BetaAction InputArtifacts: - Name: SourceOutput ActionTypeId: Category: Deploy Owner: AWS Version: 1 Provider: CodeDeploy Configuration: ApplicationName: !Ref ApplicationName DeploymentGroupName: !Ref BetaFleet RunOrder: 1 ArtifactStore: Type: S3 Location: !Ref CodePipelineArtifactStoreBucket EventRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - events.amazonaws.com Action: sts:AssumeRole Path: / Policies: - PolicyName: eb-pipeline-execution PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: codepipeline:StartPipelineExecution Resource: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] EventRule: Type: AWS::Events::Rule Properties: EventBusName: default EventPattern: source: - aws.s3 detail-type: - Object Created detail: bucket: name: - !Ref SourceBucket Name: EnabledS3SourceRule State: ENABLED Targets: - Arn: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] RoleArn: !GetAtt EventRole.Arn Id: codepipeline-AppPipeline
JSON
{ "Parameters": { "SourceObjectKey": { "Description": "S3 source artifact", "Type": "String", "Default": "SampleApp_Linux.zip" }, "ApplicationName": { "Description": "CodeDeploy application name", "Type": "String", "Default": "DemoApplication" }, "BetaFleet": { "Description": "Fleet configured in CodeDeploy", "Type": "String", "Default": "DemoFleet" } }, "Resources": { "SourceBucket": { "Type": "AWS::S3::Bucket", "Properties": { "NotificationConfiguration": { "EventBridgeConfiguration": { "EventBridgeEnabled": true } }, "VersioningConfiguration": { "Status": "Enabled" } } }, "CodePipelineArtifactStoreBucket": { "Type": "AWS::S3::Bucket" }, "CodePipelineArtifactStoreBucketPolicy": { "Type": "AWS::S3::BucketPolicy", "Properties": { "Bucket": { "Ref": "CodePipelineArtifactStoreBucket" }, "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Sid": "DenyUnEncryptedObjectUploads", "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "CodePipelineArtifactStoreBucket", "Arn" ] }, "/*" ] ] }, "Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "aws:kms" } } }, { "Sid": "DenyInsecureConnections", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "CodePipelineArtifactStoreBucket", "Arn" ] }, "/*" ] ] }, "Condition": { "Bool": { "aws:SecureTransport": false } } } ] } } }, "CodePipelineServiceRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "codepipeline.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }, "Path": "/", "Policies": [ { "PolicyName": "AWS-CodePipeline-Service-3", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codecommit:CancelUploadArchive", "codecommit:GetBranch", "codecommit:GetCommit", "codecommit:GetUploadArchiveStatus", "codecommit:UploadArchive" ], "Resource": "resource_ARN" }, { "Effect": "Allow", "Action": [ "codedeploy:CreateDeployment", "codedeploy:GetApplicationRevision", "codedeploy:GetDeployment", "codedeploy:GetDeploymentConfig", "codedeploy:RegisterApplicationRevision" ], "Resource": "resource_ARN" }, { "Effect": "Allow", "Action": [ "codebuild:BatchGetBuilds", "codebuild:StartBuild" ], "Resource": "resource_ARN" }, { "Effect": "Allow", "Action": [ "devicefarm:ListProjects", "devicefarm:ListDevicePools", "devicefarm:GetRun", "devicefarm:GetUpload", "devicefarm:CreateUpload", "devicefarm:ScheduleRun" ], "Resource": "resource_ARN" }, { "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:ListFunctions" ], "Resource": "resource_ARN" }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "resource_ARN" }, { "Effect": "Allow", "Action": [ "elasticbeanstalk:*", "ec2:*", "elasticloadbalancing:*", "autoscaling:*", "cloudwatch:*", "s3:*", "sns:*", "cloudformation:*", "rds:*", "sqs:*", "ecs:*" ], "Resource": "resource_ARN" } ] } } ] } }, "AppPipeline": { "Type": "AWS::CodePipeline::Pipeline", "Properties": { "Name": "s3-events-pipeline", "RoleArn": { "Fn::GetAtt": [ "CodePipelineServiceRole", "Arn" ] }, "Stages": [ { "Name": "Source", "Actions": [ { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "AWS", "Version": 1, "Provider": "S3" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "S3Bucket": { "Ref": "SourceBucket" }, "S3ObjectKey": { "Ref": "SourceObjectKey" }, "PollForSourceChanges": false }, "RunOrder": 1 } ] }, { "Name": "Beta", "Actions": [ { "Name": "BetaAction", "InputArtifacts": [ { "Name": "SourceOutput" } ], "ActionTypeId": { "Category": "Deploy", "Owner": "AWS", "Version": 1, "Provider": "CodeDeploy" }, "Configuration": { "ApplicationName": { "Ref": "ApplicationName" }, "DeploymentGroupName": { "Ref": "BetaFleet" } }, "RunOrder": 1 } ] } ], "ArtifactStore": { "Type": "S3", "Location": { "Ref": "CodePipelineArtifactStoreBucket" } } } }, "EventRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }, "Path": "/", "Policies": [ { "PolicyName": "eb-pipeline-execution", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "codepipeline:StartPipelineExecution", "Resource": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] } } ] } } ] } }, "EventRule": { "Type": "AWS::Events::Rule", "Properties": { "EventBusName": "default", "EventPattern": { "source": [ "aws.s3" ], "detail-type": [ "Object Created" ], "detail": { "bucket": { "name": [ { "Ref": "SourceBucket" } ] } } }, "Name": "EnabledS3SourceRule", "State": "ENABLED", "Targets": [ { "Arn": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] }, "RoleArn": { "Fn::GetAtt": [ "EventRole", "Arn" ] }, "Id": "codepipeline-AppPipeline" } ] } } } } }

Migre os pipelines de votação com uma fonte e uma trilha do S3 CloudTrail

Para um pipeline com uma fonte do Amazon S3, modifique o pipeline para que a detecção de alterações seja automatizada. EventBridge Escolha um dos seguintes métodos para implementar a migração:

Migre os pipelines de votação com uma fonte e uma trilha do S3 () CloudTrail CLI

Siga estas etapas para editar um pipeline que está usando enquetes (verificações periódicas) para usar um evento em EventBridge vez disso. Se você deseja criar um pipeline, consulte Crie um pipeline, estágios e ações.

Para criar um pipeline baseado em eventos com o Amazon S3, edite o parâmetro PollForSourceChanges de seu pipeline e crie os seguintes recursos:

  • AWS CloudTrail política de trilha, bucket e bucket que o Amazon S3 pode usar para registrar os eventos.

  • EventBridge evento

  • IAMfunção para permitir que o EventBridge evento inicie seu funil

Para criar uma AWS CloudTrail trilha e ativar o registro

Para usar o AWS CLI para criar uma trilha, chame o create-trail comando, especificando:

  • O nome da trilha.

  • O bucket ao qual você já aplicou a política de bucket do AWS CloudTrail.

Para obter mais informações, consulte Criação de uma trilha com a interface da linha de AWS comando.

  1. Use o comando create-trail e inclua os parâmetros --name e --s3-bucket-name.

    Por que estou fazendo essa alteração? Isso cria a CloudTrail trilha necessária para seu bucket de origem do S3.

    O comando a seguir usa --name e --s3-bucket-name para criar uma trilha denominada my-trail e um bucket chamado de amzn-s3-demo-source-bucket.

    aws cloudtrail create-trail --name my-trail --s3-bucket-name amzn-s3-demo-source-bucket
  2. Use o comando start-logging e inclua o parâmetro --name.

    Por que estou fazendo essa alteração? Esse comando inicia o CloudTrail registro do seu bucket de origem e envia eventos para EventBridge.

    Exemplo:

    O comando a seguir utiliza --name para iniciar o registro em log em uma trilha denominada my-trail.

    aws cloudtrail start-logging --name my-trail
  3. Use o comando put-event-selectors e inclua os parâmetros --trail-name e --event-selectors. Use seletores de eventos para especificar que você deseja que sua trilha registre eventos de dados para seu bucket de origem e envie os eventos para a EventBridge regra.

    Por que estou fazendo essa alteração? Esse comando filtra eventos.

    Exemplo:

    O comando a seguir utiliza --trail-name e --event-selectors para especificar eventos de dados para um bucket de origem e prefixo denominado amzn-s3-demo-source-bucket/myFolder.

    aws cloudtrail put-event-selectors --trail-name my-trail --event-selectors '[{ "ReadWriteType": "WriteOnly", "IncludeManagementEvents":false, "DataResources": [{ "Type": "AWS::S3::Object", "Values": ["arn:aws:s3:::amzn-s3-demo-source-bucket/myFolder/file.zip"] }] }]'
Para criar uma EventBridge regra com o Amazon S3 como fonte e destino do evento e CodePipeline aplicar a política de permissões
  1. Conceda permissões EventBridge para usar CodePipeline para invocar a regra. Para obter mais informações, consulte Uso de políticas baseadas em recursos para a Amazon. EventBridge

    1. Use o exemplo a seguir para criar a política de confiança que permita assumir EventBridge a função de serviço. Chame-o de trustpolicyforEB.json.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. Use o comando a seguir para criar a função Role-for-MyRule e anexar a política de confiança.

      Por que estou fazendo essa alteração? Adicionar essa política de confiança à função cria permissões para EventBridge.

      aws iam create-role --role-name Role-for-MyRule --assume-role-policy-document file://trustpolicyforEB.json
    3. Crie a política de permissõesJSON, conforme mostrado aqui para o pipeline chamadoMyFirstPipeline. Nomeie a politica de permissões permissionspolicyforEB.json.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:StartPipelineExecution" ], "Resource": [ "arn:aws:codepipeline:us-west-2:80398EXAMPLE:MyFirstPipeline" ] } ] }
    4. Use o comando a seguir para anexar a nova política de permissões CodePipeline-Permissions-Policy-for-EB à função Role-for-MyRule criada.

      aws iam put-role-policy --role-name Role-for-MyRule --policy-name CodePipeline-Permissions-Policy-For-EB --policy-document file://permissionspolicyforEB.json
  2. Use o comando put-rule e inclua os parâmetros --name, --event-pattern e --role-arn.

    O exemplo de comando a seguir cria uma regra chamada MyS3SourceRule.

    aws events put-rule --name "MyS3SourceRule" --event-pattern "{\"source\":[\"aws.s3\"],\"detail-type\":[\"AWS API Call via CloudTrail\"],\"detail\":{\"eventSource\":[\"s3.amazonaws.com\"],\"eventName\":[\"CopyObject\",\"PutObject\",\"CompleteMultipartUpload\"],\"requestParameters\":{\"bucketName\":[\"amzn-s3-demo-source-bucket\"],\"key\":[\"my-key\"]}}} --role-arn "arn:aws:iam::ACCOUNT_ID:role/Role-for-MyRule"
  3. Para adicionar CodePipeline como destino, chame o put-targets comando e inclua --rule --targets os parâmetros e.

    O comando a seguir especifica que, para a regra denominada MyS3SourceRule, o Id do destino é composto do número um, indicando que, em uma lista de destinos para a regra, esse é o destino 1. O comando também especifica um ARN de exemplo para o pipeline. O pipeline é iniciado quando uma alteração é feita no repositório.

    aws events put-targets --rule MyS3SourceRule --targets Id=1,Arn=arn:aws:codepipeline:us-west-2:80398EXAMPLE:TestPipeline
Para editar o PollForSourceChanges parâmetro do seu funil
Importante

Ao criar um pipeline com esse método, o parâmetro PollForSourceChanges é padronizado como verdadeiro se não for explicitamente definido como falso. Ao adicionar a detecção de alterações baseada em eventos, é necessário adicionar o parâmetro a sua saída e defini-lo como falso para desativar a sondagem. Caso contrário, o pipeline inicia duas vezes para uma única alteração de origem. Para obter detalhes, consulte Configurações válidas para o PollForSourceChanges parâmetro.

  1. Execute o get-pipeline comando para copiar a estrutura do pipeline em um JSON arquivo. Por exemplo, para um pipeline nomeado MyFirstPipeline, execute o seguinte comando:

    aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json

    Este comando retorna nada, mas o arquivo que você criou deve aparecer no diretório onde você executou o comando.

  2. Abra o JSON arquivo em qualquer editor de texto sem formatação e edite o estágio de origem alterando o PollForSourceChanges parâmetro de um bucket chamado amzn-s3-demo-source-bucket parafalse, conforme mostrado neste exemplo.

    Por que estou fazendo essa alteração? A configuração deste parâmetro para false desativa as verificações periódicas para que você possa utilizar apenas a detecção de alterações baseada em eventos.

    "configuration": { "S3Bucket": "amzn-s3-demo-source-bucket", "PollForSourceChanges": "false", "S3ObjectKey": "index.zip" },
  3. Se você estiver trabalhando com a estrutura do pipeline recuperada usando o get-pipeline comando, deverá remover as metadata linhas do JSON arquivo. Caso contrário, o comando update-pipeline não é capaz de utilizá-la. Remova as linhas "metadata": { }, "created", "pipelineARN" e os campos "updated".

    Por exemplo, remova as seguintes linhas da estrutura:

    "metadata": { "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name", "created": "date", "updated": "date" },

    Salve o arquivo.

  4. Para aplicar suas alterações, execute o update-pipeline comando, especificando o JSON arquivo do pipeline:

    Importante

    Não se esqueça de incluir file:// antes do nome de arquivo. Ele é obrigatório nesse comando.

    aws codepipeline update-pipeline --cli-input-json file://pipeline.json

    Este comando retorna toda a estrutura do pipeline editado.

    nota

    O comando update-pipeline interrompe o pipeline. Se uma revisão estiver sendo executada pelo pipeline quando você executar o comando update-pipeline, essa execução será interrompida. Você deve iniciar manualmente o pipeline para executar a revisão através do pipeline atualizado. Use o comando start-pipeline-execution para iniciar manualmente o pipeline.

Migre os pipelines de votação com uma fonte e CloudTrail uma trilha do S3 (modelo)AWS CloudFormation

Use estas etapas para alterar o pipeline com uma origem do Amazon S3 da sondagem para a detecção de alterações baseada em eventos.

Para criar um pipeline baseado em eventos com o Amazon S3, edite o parâmetro PollForSourceChanges de seu pipeline e adicione os seguintes recursos ao modelo:

Se você usa AWS CloudFormation para criar e gerenciar seus pipelines, seu modelo inclui conteúdo como o seguinte.

nota

A propriedade Configuration no estágio de origem denominado PollForSourceChanges. Se o seu modelo não inclui essa propriedade, PollForSourceChanges é definido como true por padrão.

YAML
AppPipeline: Type: AWS::CodePipeline::Pipeline Properties: RoleArn: !GetAtt CodePipelineServiceRole.Arn Stages: - Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: AWS Version: 1 Provider: S3 OutputArtifacts: - Name: SourceOutput Configuration: S3Bucket: !Ref SourceBucket S3ObjectKey: !Ref S3SourceObjectKey PollForSourceChanges: true RunOrder: 1 ...
JSON
"AppPipeline": { "Type": "AWS::CodePipeline::Pipeline", "Properties": { "RoleArn": { "Fn::GetAtt": ["CodePipelineServiceRole", "Arn"] }, "Stages": [ { "Name": "Source", "Actions": [ { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "AWS", "Version": 1, "Provider": "S3" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "S3Bucket": { "Ref": "SourceBucket" }, "S3ObjectKey": { "Ref": "SourceObjectKey" }, "PollForSourceChanges": true }, "RunOrder": 1 } ] }, ...
Para criar uma EventBridge regra com o Amazon S3 como fonte e destino do evento e CodePipeline aplicar a política de permissões
  1. No modelo, emResources, use o AWS::IAM::Role AWS CloudFormation recurso para configurar a IAM função que permite que seu evento inicie seu pipeline. Essa entrada cria uma função que utiliza duas políticas:

    • A primeira política permite que a função seja assumida.

    • A segunda política fornece permissões para iniciar o pipeline.

    Por que estou fazendo essa alteração? Adicionar AWS::IAM::Role recursos permite AWS CloudFormation criar permissões para EventBridge. Esse recurso é adicionado à sua AWS CloudFormation pilha.

    YAML
    EventRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - events.amazonaws.com Action: sts:AssumeRole Path: / Policies: - PolicyName: eb-pipeline-execution PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: codepipeline:StartPipelineExecution Resource: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] ...
    JSON
    "EventRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }, "Path": "/", "Policies": [ { "PolicyName": "eb-pipeline-execution", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "codepipeline:StartPipelineExecution", "Resource": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] ...
  2. Use o AWS::Events::Rule AWS CloudFormation recurso para adicionar uma EventBridge regra. Esse padrão de evento cria um evento que monitora CopyObject, PutObject e CompleteMultipartUpload no bucket de origem do Amazon S3. Além disso, inclua um destino de seu pipeline. Quando CopyObject, PutObject ou CompleteMultipartUpload ocorrer, essa regra invoca StartPipelineExecution em seu pipeline de destino.

    Por que estou fazendo essa alteração? Adicionar o AWS::Events::Rule recurso permite AWS CloudFormation criar o evento. Esse recurso é adicionado à sua AWS CloudFormation pilha.

    YAML
    EventRule: Type: AWS::Events::Rule Properties: EventPattern: source: - aws.s3 detail-type: - 'AWS API Call via CloudTrail' detail: eventSource: - s3.amazonaws.com eventName: - CopyObject - PutObject - CompleteMultipartUpload requestParameters: bucketName: - !Ref SourceBucket key: - !Ref SourceObjectKey Targets: - Arn: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] RoleArn: !GetAtt EventRole.Arn Id: codepipeline-AppPipeline ...
    JSON
    "EventRule": { "Type": "AWS::Events::Rule", "Properties": { "EventPattern": { "source": [ "aws.s3" ], "detail-type": [ "AWS API Call via CloudTrail" ], "detail": { "eventSource": [ "s3.amazonaws.com" ], "eventName": [ "CopyObject", "PutObject", "CompleteMultipartUpload" ], "requestParameters": { "bucketName": [ { "Ref": "SourceBucket" } ], "key": [ { "Ref": "SourceObjectKey" } ] } } }, "Targets": [ { "Arn": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] }, "RoleArn": { "Fn::GetAtt": [ "EventRole", "Arn" ] }, "Id": "codepipeline-AppPipeline" } ] } } }, ...
  3. Adicione este trecho ao primeiro modelo para permitir a funcionalidade de pilha cruzada:

    YAML
    Outputs: SourceBucketARN: Description: "S3 bucket ARN that Cloudtrail will use" Value: !GetAtt SourceBucket.Arn Export: Name: SourceBucketARN
    JSON
    "Outputs" : { "SourceBucketARN" : { "Description" : "S3 bucket ARN that Cloudtrail will use", "Value" : { "Fn::GetAtt": ["SourceBucket", "Arn"] }, "Export" : { "Name" : "SourceBucketARN" } } ...
  4. Salve o modelo atualizado no computador local e abra o AWS CloudFormation console.

  5. Selecione sua pilha e clique em Create Change Set for Current Stack (Criar conjunto de alterações para a pilha atual).

  6. Carregue o modelo atualizado e, em seguida, visualize as alterações listadas no AWS CloudFormation. Essas são as alterações que serão feitas na pilha. Seus novos recursos devem ser exibidos na lista.

  7. Clique em Executar.

Para editar o PollForSourceChanges parâmetro do seu funil
Importante

Ao criar um pipeline com esse método, o parâmetro PollForSourceChanges é padronizado como verdadeiro se não for explicitamente definido como falso. Ao adicionar a detecção de alterações baseada em eventos, é necessário adicionar o parâmetro a sua saída e defini-lo como falso para desativar a sondagem. Caso contrário, o pipeline inicia duas vezes para uma única alteração de origem. Para obter detalhes, consulte Configurações válidas para o PollForSourceChanges parâmetro.

  • No modelo, altere PollForSourceChanges para false. Se você não incluir PollForSourceChanges na sua definição de pipeline, adicione-o e configure para false.

    Por que estou fazendo essa alteração? A alteração de PollForSourceChanges para false desativa as verificações periódicas para que você possa utilizar apenas a detecção de alterações baseada em eventos.

    YAML
    Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: AWS Version: 1 Provider: S3 OutputArtifacts: - Name: SourceOutput Configuration: S3Bucket: !Ref SourceBucket S3ObjectKey: !Ref SourceObjectKey PollForSourceChanges: false RunOrder: 1
    JSON
    { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "AWS", "Version": 1, "Provider": "S3" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "S3Bucket": { "Ref": "SourceBucket" }, "S3ObjectKey": { "Ref": "SourceObjectKey" }, "PollForSourceChanges": false }, "RunOrder": 1 }
Para criar um segundo modelo para os recursos do seu pipeline do Amazon S3 CloudTrail
  • Em um modelo separado, emResources, use oAWS::S3::Bucket,AWS::S3::BucketPolicy, e AWS::CloudTrail::Trail AWS CloudFormation recursos para fornecer uma definição simples de bucket e uma trilha para CloudTrail.

    Por que estou fazendo essa alteração? Dado o limite atual de cinco trilhas por conta, a CloudTrail trilha deve ser criada e gerenciada separadamente. (Consulte Limites em AWS CloudTrail.) No entanto, você pode incluir vários buckets do Amazon S3 em uma única trilha, para que possa criar a trilha uma vez e adicionar buckets do Amazon S3 para outros pipelines, conforme for necessário. Cole o seguinte no arquivo do segundo modelo de exemplo.

    YAML
    ################################################################################### # Prerequisites: # - S3 SourceBucket and SourceObjectKey must exist ################################################################################### Parameters: SourceObjectKey: Description: 'S3 source artifact' Type: String Default: SampleApp_Linux.zip Resources: AWSCloudTrailBucketPolicy: Type: AWS::S3::BucketPolicy Properties: Bucket: !Ref AWSCloudTrailBucket PolicyDocument: Version: 2012-10-17 Statement: - Sid: AWSCloudTrailAclCheck Effect: Allow Principal: Service: - cloudtrail.amazonaws.com Action: s3:GetBucketAcl Resource: !GetAtt AWSCloudTrailBucket.Arn - Sid: AWSCloudTrailWrite Effect: Allow Principal: Service: - cloudtrail.amazonaws.com Action: s3:PutObject Resource: !Join [ '', [ !GetAtt AWSCloudTrailBucket.Arn, '/AWSLogs/', !Ref 'AWS::AccountId', '/*' ] ] Condition: StringEquals: s3:x-amz-acl: bucket-owner-full-control AWSCloudTrailBucket: Type: AWS::S3::Bucket DeletionPolicy: Retain AwsCloudTrail: DependsOn: - AWSCloudTrailBucketPolicy Type: AWS::CloudTrail::Trail Properties: S3BucketName: !Ref AWSCloudTrailBucket EventSelectors: - DataResources: - Type: AWS::S3::Object Values: - !Join [ '', [ !ImportValue SourceBucketARN, '/', !Ref SourceObjectKey ] ] ReadWriteType: WriteOnly IncludeManagementEvents: false IncludeGlobalServiceEvents: true IsLogging: true IsMultiRegionTrail: true ...
    JSON
    { "Parameters": { "SourceObjectKey": { "Description": "S3 source artifact", "Type": "String", "Default": "SampleApp_Linux.zip" } }, "Resources": { "AWSCloudTrailBucket": { "Type": "AWS::S3::Bucket", "DeletionPolicy": "Retain" }, "AWSCloudTrailBucketPolicy": { "Type": "AWS::S3::BucketPolicy", "Properties": { "Bucket": { "Ref": "AWSCloudTrailBucket" }, "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Sid": "AWSCloudTrailAclCheck", "Effect": "Allow", "Principal": { "Service": [ "cloudtrail.amazonaws.com" ] }, "Action": "s3:GetBucketAcl", "Resource": { "Fn::GetAtt": [ "AWSCloudTrailBucket", "Arn" ] } }, { "Sid": "AWSCloudTrailWrite", "Effect": "Allow", "Principal": { "Service": [ "cloudtrail.amazonaws.com" ] }, "Action": "s3:PutObject", "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "AWSCloudTrailBucket", "Arn" ] }, "/AWSLogs/", { "Ref": "AWS::AccountId" }, "/*" ] ] }, "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } } ] } } }, "AwsCloudTrail": { "DependsOn": [ "AWSCloudTrailBucketPolicy" ], "Type": "AWS::CloudTrail::Trail", "Properties": { "S3BucketName": { "Ref": "AWSCloudTrailBucket" }, "EventSelectors": [ { "DataResources": [ { "Type": "AWS::S3::Object", "Values": [ { "Fn::Join": [ "", [ { "Fn::ImportValue": "SourceBucketARN" }, "/", { "Ref": "SourceObjectKey" } ] ] } ] } ], "ReadWriteType": "WriteOnly", "IncludeManagementEvents": false } ], "IncludeGlobalServiceEvents": true, "IsLogging": true, "IsMultiRegionTrail": true } } } } ...

Quando você usa AWS CloudFormation para criar esses recursos, seu pipeline é acionado quando os arquivos no seu repositório são criados ou atualizados.

nota

Não pare por aqui. Embora seu pipeline tenha sido criado, você deve criar um segundo AWS CloudFormation modelo para seu pipeline do Amazon S3. Se você não criar o segundo modelo, o pipeline não apresentará funcionalidades de detecção de alterações.

YAML
Resources: SourceBucket: Type: AWS::S3::Bucket Properties: VersioningConfiguration: Status: Enabled CodePipelineArtifactStoreBucket: Type: AWS::S3::Bucket CodePipelineArtifactStoreBucketPolicy: Type: AWS::S3::BucketPolicy Properties: Bucket: !Ref CodePipelineArtifactStoreBucket PolicyDocument: Version: 2012-10-17 Statement: - Sid: DenyUnEncryptedObjectUploads Effect: Deny Principal: '*' Action: s3:PutObject Resource: !Join [ '', [ !GetAtt CodePipelineArtifactStoreBucket.Arn, '/*' ] ] Condition: StringNotEquals: s3:x-amz-server-side-encryption: aws:kms - Sid: DenyInsecureConnections Effect: Deny Principal: '*' Action: s3:* Resource: !Join [ '', [ !GetAtt CodePipelineArtifactStoreBucket.Arn, '/*' ] ] Condition: Bool: aws:SecureTransport: false CodePipelineServiceRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - codepipeline.amazonaws.com Action: sts:AssumeRole Path: / Policies: - PolicyName: AWS-CodePipeline-Service-3 PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - codecommit:CancelUploadArchive - codecommit:GetBranch - codecommit:GetCommit - codecommit:GetUploadArchiveStatus - codecommit:UploadArchive Resource: 'resource_ARN' - Effect: Allow Action: - codedeploy:CreateDeployment - codedeploy:GetApplicationRevision - codedeploy:GetDeployment - codedeploy:GetDeploymentConfig - codedeploy:RegisterApplicationRevision Resource: 'resource_ARN' - Effect: Allow Action: - codebuild:BatchGetBuilds - codebuild:StartBuild Resource: 'resource_ARN' - Effect: Allow Action: - devicefarm:ListProjects - devicefarm:ListDevicePools - devicefarm:GetRun - devicefarm:GetUpload - devicefarm:CreateUpload - devicefarm:ScheduleRun Resource: 'resource_ARN' - Effect: Allow Action: - lambda:InvokeFunction - lambda:ListFunctions Resource: 'resource_ARN' - Effect: Allow Action: - iam:PassRole Resource: 'resource_ARN' - Effect: Allow Action: - elasticbeanstalk:* - ec2:* - elasticloadbalancing:* - autoscaling:* - cloudwatch:* - s3:* - sns:* - cloudformation:* - rds:* - sqs:* - ecs:* Resource: 'resource_ARN' AppPipeline: Type: AWS::CodePipeline::Pipeline Properties: Name: s3-events-pipeline RoleArn: !GetAtt CodePipelineServiceRole.Arn Stages: - Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: AWS Version: 1 Provider: S3 OutputArtifacts: - Name: SourceOutput Configuration: S3Bucket: !Ref SourceBucket S3ObjectKey: !Ref SourceObjectKey PollForSourceChanges: false RunOrder: 1 - Name: Beta Actions: - Name: BetaAction InputArtifacts: - Name: SourceOutput ActionTypeId: Category: Deploy Owner: AWS Version: 1 Provider: CodeDeploy Configuration: ApplicationName: !Ref ApplicationName DeploymentGroupName: !Ref BetaFleet RunOrder: 1 ArtifactStore: Type: S3 Location: !Ref CodePipelineArtifactStoreBucket EventRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - events.amazonaws.com Action: sts:AssumeRole Path: / Policies: - PolicyName: eb-pipeline-execution PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: codepipeline:StartPipelineExecution Resource: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] EventRule: Type: AWS::Events::Rule Properties: EventPattern: source: - aws.s3 detail-type: - 'AWS API Call via CloudTrail' detail: eventSource: - s3.amazonaws.com eventName: - PutObject - CompleteMultipartUpload resources: ARN: - !Join [ '', [ !GetAtt SourceBucket.Arn, '/', !Ref SourceObjectKey ] ] Targets: - Arn: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] RoleArn: !GetAtt EventRole.Arn Id: codepipeline-AppPipeline Outputs: SourceBucketARN: Description: "S3 bucket ARN that Cloudtrail will use" Value: !GetAtt SourceBucket.Arn Export: Name: SourceBucketARN
JSON
"Resources": { "SourceBucket": { "Type": "AWS::S3::Bucket", "Properties": { "VersioningConfiguration": { "Status": "Enabled" } } }, "CodePipelineArtifactStoreBucket": { "Type": "AWS::S3::Bucket" }, "CodePipelineArtifactStoreBucketPolicy": { "Type": "AWS::S3::BucketPolicy", "Properties": { "Bucket": { "Ref": "CodePipelineArtifactStoreBucket" }, "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Sid": "DenyUnEncryptedObjectUploads", "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "CodePipelineArtifactStoreBucket", "Arn" ] }, "/*" ] ] }, "Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "aws:kms" } } }, { "Sid": "DenyInsecureConnections", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "CodePipelineArtifactStoreBucket", "Arn" ] }, "/*" ] ] }, "Condition": { "Bool": { "aws:SecureTransport": false } } } ] } } }, "CodePipelineServiceRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "codepipeline.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }, "Path": "/", "Policies": [ { "PolicyName": "AWS-CodePipeline-Service-3", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codecommit:CancelUploadArchive", "codecommit:GetBranch", "codecommit:GetCommit", "codecommit:GetUploadArchiveStatus", "codecommit:UploadArchive" ], "Resource": "resource_ARN" }, { "Effect": "Allow", "Action": [ "codedeploy:CreateDeployment", "codedeploy:GetApplicationRevision", "codedeploy:GetDeployment", "codedeploy:GetDeploymentConfig", "codedeploy:RegisterApplicationRevision" ], "Resource": "resource_ARN" }, { "Effect": "Allow", "Action": [ "codebuild:BatchGetBuilds", "codebuild:StartBuild" ], "Resource": "resource_ARN" }, { "Effect": "Allow", "Action": [ "devicefarm:ListProjects", "devicefarm:ListDevicePools", "devicefarm:GetRun", "devicefarm:GetUpload", "devicefarm:CreateUpload", "devicefarm:ScheduleRun" ], "Resource": "resource_ARN" }, { "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:ListFunctions" ], "Resource": "resource_ARN" }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "resource_ARN" }, { "Effect": "Allow", "Action": [ "elasticbeanstalk:*", "ec2:*", "elasticloadbalancing:*", "autoscaling:*", "cloudwatch:*", "s3:*", "sns:*", "cloudformation:*", "rds:*", "sqs:*", "ecs:*" ], "Resource": "resource_ARN" } ] } } ] } }, "AppPipeline": { "Type": "AWS::CodePipeline::Pipeline", "Properties": { "Name": "s3-events-pipeline", "RoleArn": { "Fn::GetAtt": [ "CodePipelineServiceRole", "Arn" ] }, "Stages": [ { "Name": "Source", "Actions": [ { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "AWS", "Version": 1, "Provider": "S3" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "S3Bucket": { "Ref": "SourceBucket" }, "S3ObjectKey": { "Ref": "SourceObjectKey" }, "PollForSourceChanges": false }, "RunOrder": 1 } ] }, { "Name": "Beta", "Actions": [ { "Name": "BetaAction", "InputArtifacts": [ { "Name": "SourceOutput" } ], "ActionTypeId": { "Category": "Deploy", "Owner": "AWS", "Version": 1, "Provider": "CodeDeploy" }, "Configuration": { "ApplicationName": { "Ref": "ApplicationName" }, "DeploymentGroupName": { "Ref": "BetaFleet" } }, "RunOrder": 1 } ] } ], "ArtifactStore": { "Type": "S3", "Location": { "Ref": "CodePipelineArtifactStoreBucket" } } } }, "EventRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }, "Path": "/", "Policies": [ { "PolicyName": "eb-pipeline-execution", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "codepipeline:StartPipelineExecution", "Resource": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] } } ] } } ] } }, "EventRule": { "Type": "AWS::Events::Rule", "Properties": { "EventPattern": { "source": [ "aws.s3" ], "detail-type": [ "AWS API Call via CloudTrail" ], "detail": { "eventSource": [ "s3.amazonaws.com" ], "eventName": [ "PutObject", "CompleteMultipartUpload" ], "resources": { "ARN": [ { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "SourceBucket", "Arn" ] }, "/", { "Ref": "SourceObjectKey" } ] ] } ] } } }, "Targets": [ { "Arn": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] }, "RoleArn": { "Fn::GetAtt": [ "EventRole", "Arn" ] }, "Id": "codepipeline-AppPipeline" } ] } } }, "Outputs" : { "SourceBucketARN" : { "Description" : "S3 bucket ARN that Cloudtrail will use", "Value" : { "Fn::GetAtt": ["SourceBucket", "Arn"] }, "Export" : { "Name" : "SourceBucketARN" } } } } ...

Migre os pipelines de pesquisa para uma ação de origem da GitHub versão 1 para as conexões

Você pode migrar uma ação de origem da GitHub versão 1 para usar conexões para seu repositório externo. Esse é o método de detecção de alterações recomendado para pipelines com uma ação de origem da GitHub versão 1.

Para um pipeline com uma ação de origem da GitHub versão 1, recomendamos modificar o pipeline para usar uma ação da GitHub versão 2 para que a detecção de alterações seja automatizada Conexões de código da AWS. Para obter mais informações sobre como trabalhar com as conexões, consulte GitHub conexões.

Crie uma conexão com GitHub (console)

Você pode usar o console para criar uma conexão com GitHub o.

Etapa 1: Substituir sua GitHub ação da versão 1

Use a página de edição do pipeline para substituir sua GitHub ação da versão 1 por uma GitHub ação da versão 2.

Para substituir sua GitHub ação de versão 1
  1. Faça login no CodePipeline console.

  2. Selecione o pipeline e escolha Editar. Selecione Editar estágio no estágio de origem. É exibida uma mensagem recomendando que você atualize a ação.

  3. Em Provedor de ação, escolha GitHub (Versão 2).

  4. Execute um destes procedimentos:

    • Em Conexão, se você ainda não tiver criado uma conexão com seu provedor, escolha Conectar GitHub a. Prossiga para a Etapa 2: Crie uma conexão com GitHub.

    • Em Conexão, se você já tiver criado uma conexão com seu provedor, escolha a conexão. Vá para a Etapa 3: Salvar a ação de origem para sua conexão.

Etapa 2: criar uma conexão com GitHub

Depois de escolher criar a conexão, a GitHub página Connect to é exibida.

Para criar uma conexão com GitHub
  1. Nas configurações de GitHub conexão, o nome da conexão é mostrado em Nome da conexão.

    Em GitHub Aplicativos, escolha uma instalação de aplicativo ou escolha Instalar um novo aplicativo para criar um.

    nota

    Você instala uma aplicação para todas as suas conexões com um provedor específico. Se você já instalou o GitHub aplicativo, escolha-o e pule esta etapa.

  2. Se a página de autorização for GitHub exibida, faça login com suas credenciais e escolha continuar.

  3. Na página de instalação do aplicativo, uma mensagem mostra que o AWS CodeStar aplicativo está tentando se conectar à sua GitHub conta.

    nota

    Você só instala o aplicativo uma vez para cada GitHub conta. Se você instalou a aplicação anteriormente, poderá escolher Configure (Configurar) para prosseguir para uma página de modificação para a instalação da aplicação ou usar o botão Back (Voltar) para retornar ao console.

  4. Na página Instalar AWS CodeStar, escolha Instalar.

  5. Na GitHub página Connect to, a ID de conexão da sua nova instalação é exibida. Selecione Conectar.

Etapa 3: Salve sua ação GitHub de origem

Conclua as atualizações na página Editar ação para salvar a nova ação de origem.

Para salvar sua ação GitHub de origem
  1. Em Nome do repositório, escolha o nome do repositório de terceiros. Em Ramificação, insira a ramificação onde deseja que o pipeline detecte alterações de origem.

    nota

    No Repositório, digite owner-name/repository-name conforme mostrado neste exemplo:

    my-account/my-repository
  2. Em Formato de artefato de saída, escolha o formato dos seus artefatos.

  3. Em Artefatos de saída, é necessário manter o nome do artefato de saída para essa ação, como SourceArtifact. Escolha Concluído para fechar a página Editar ação.

  4. Escolha Concluído para fechar a página de edição do estágio. Escolha Salvar para fechar a página de edição do pipeline.

Crie uma conexão com GitHub (CLI)

Você pode usar o AWS Command Line Interface (AWS CLI) para criar uma conexão com GitHub.

Para fazer isso, use o comando create-connection.

Importante

Uma conexão criada por meio do AWS CLI ou AWS CloudFormation está no PENDING status por padrão. Depois de criar uma conexão com o CLI ou AWS CloudFormation, use o console para editar a conexão e definir seu statusAVAILABLE.

Para criar uma conexão com GitHub
  1. Abra um terminal (Linux, macOS ou Unix) ou um prompt de comando (Windows). Use o AWS CLI para executar o create-connection comando, especificando --provider-type e --connection-name para sua conexão. Neste exemplo, o nome do provedor de terceiros é GitHub e o nome da conexão especificada é MyConnection.

    aws codeconnections create-connection --provider-type GitHub --connection-name MyConnection

    Se for bem-sucedido, esse comando retornará as ARN informações de conexão semelhantes às seguintes.

    { "ConnectionArn": "arn:aws:codeconnections:us-west-2:account_id:connection/aEXAMPLE-8aad-4d5d-8878-dfcab0bc441f" }
  2. Use o console para concluir a conexão.

Migre os pipelines de pesquisa para uma ação de origem da GitHub versão 1 para webhooks

Você pode migrar seu pipeline para usar webhooks para detectar alterações no seu GitHub repositório de origem. Essa migração para webhooks é somente para a ação da GitHub versão 1.

Importante

Ao criar CodePipeline webhooks, não use suas próprias credenciais nem reutilize o mesmo token secreto em vários webhooks. Para uma segurança ideal, gere um token secreto exclusivo para cada webhook que você criar. O token secreto é uma string arbitrária que você fornece, GitHub usada para computar e assinar as cargas do webhook enviadas para CodePipeline, a fim de proteger a integridade e a autenticidade das cargas do webhook. Usar suas próprias credenciais ou reutilizar o mesmo token em vários webhooks pode levar a vulnerabilidades de segurança.

Migrar pipelines de pesquisa para webhooks (ações de origem da GitHub versão 1) (console)

Para a ação de origem da GitHub versão 1, você pode usar o CodePipeline console para atualizar seu pipeline e usar webhooks para detectar alterações no seu repositório de GitHub origem.

Siga estas etapas para editar um pipeline que está usando enquetes (verificações periódicas) como alternativa. EventBridge Se você deseja criar um pipeline, consulte Crie um pipeline, estágios e ações.

Ao utilizar o console, o parâmetro PollForSourceChanges para o seu pipeline é alterado. O GitHub webhook foi criado e registrado para você.

Para editar o estágio de origem do pipeline
  1. Faça login no AWS Management Console e abra o CodePipeline console em http://console.aws.amazon.com/codesuite/codepipeline/home.

    Os nomes de todos os pipelines associados à sua AWS conta são exibidos.

  2. Em Nome, selecione o nome do pipeline que você deseja editar. Isso abrirá um visão detalhada do pipeline, incluindo o estado de cada uma das ações em cada estágio do pipeline.

  3. Na página de detalhes do pipeline, selecione Editar.

  4. Em Edit stage (Editar estágio), selecione o ícone de edição na ação de origem.

  5. Expanda as opções de detecção de alterações e escolha Usar Amazon CloudWatch Events para iniciar automaticamente meu pipeline quando ocorrer uma alteração (recomendado).

    Uma mensagem é exibida informando que CodePipeline cria um webhook GitHub para detectar alterações na fonte: AWS CodePipeline criará um webhook para você. Você pode recusar as opções abaixo. Selecione Atualizar. Além do webhook, CodePipeline cria o seguinte:

    • Um segredo, gerado aleatoriamente e usado para autorizar a conexão com o. GitHub

    • O webhookURL, gerado usando o endpoint público da região.

    CodePipeline registra o webhook com. GitHub Isso se inscreve no URL para receber eventos do repositório.

  6. Quando terminar de editar seu pipeline, selecione Salvar alterações do pipeline para voltar à página de resumo.

    Uma mensagem exibe o nome do webhook a ser criado para o pipeline. Escolha Save and continue.

  7. Para testar sua ação, libere uma alteração usando o AWS CLI para confirmar uma alteração na fonte especificada no estágio de origem do pipeline.

Migre pipelines de pesquisa para webhooks (ações de origem da GitHub versão 1) () CLI

Siga essas etapas para fazer com que um pipeline que conduz sondagem (verificações periódicas) passe a utilizar um webhook. Se você deseja criar um pipeline, consulte Crie um pipeline, estágios e ações.

Para criar um pipeline baseado em eventos, edite o parâmetro PollForSourceChanges de seu pipeline e crie os seguintes recursos manualmente:

  • GitHub parâmetros de webhook e autorização

Para criar e registrar seu webhook
nota

Ao usar o CLI or AWS CloudFormation para criar um pipeline e adicionar um webhook, você deve desativar as verificações periódicas. Para desativar as verificações periódicas, é necessário adicionar explicitamente o parâmetro PollForSourceChanges e defini-lo como falso, conforme descrito no procedimento final abaixo. Caso contrário, o padrão para um AWS CloudFormation pipeline CLI or é que o PollForSourceChanges padrão seja true e não seja exibido na saída da estrutura do pipeline. Para obter mais informações sobre PollForSourceChanges padrões, consulte. Configurações válidas para o PollForSourceChanges parâmetro

  1. Em um editor de texto, crie e salve um JSON arquivo para o webhook que você deseja criar. Use esse exemplo de arquivo para um webhook denominado my-webhook:

    { "webhook": { "name": "my-webhook", "targetPipeline": "pipeline_name", "targetAction": "source_action_name", "filters": [{ "jsonPath": "$.ref", "matchEquals": "refs/heads/{Branch}" }], "authentication": "GITHUB_HMAC", "authenticationConfiguration": { "SecretToken": "secret" } } }
  2. Use o comando put-webhook e inclua os parâmetros --cli-input e --region.

    O exemplo de comando a seguir cria um webhook com o webhook_json JSON arquivo.

    aws codepipeline put-webhook --cli-input-json file://webhook_json.json --region "eu-central-1"
  3. Na saída mostrada neste exemplo, os URL e ARN são retornados para um webhook chamadomy-webhook.

    { "webhook": { "url": "https://webhooks.domain.com/trigger111111111EXAMPLE11111111111111111", "definition": { "authenticationConfiguration": { "SecretToken": "secret" }, "name": "my-webhook", "authentication": "GITHUB_HMAC", "targetPipeline": "pipeline_name", "targetAction": "Source", "filters": [ { "jsonPath": "$.ref", "matchEquals": "refs/heads/{Branch}" } ] }, "arn": "arn:aws:codepipeline:eu-central-1:ACCOUNT_ID:webhook:my-webhook" }, "tags": [{ "key": "Project", "value": "ProjectA" }] }

    Este exemplo adiciona tags ao webhook incluindo a chave de tag Project e o valor ProjectA no webhook. Para obter mais informações sobre a marcação de recursos em CodePipeline, consulteMarcando atributos .

  4. Use o comando register-webhook-with-third-party e inclua o parâmetro --webhook-name.

    O exemplo de comando a seguir registra um webhook denominado my-webhook.

    aws codepipeline register-webhook-with-third-party --webhook-name my-webhook
Para editar o PollForSourceChanges parâmetro do seu funil
Importante

Ao criar um pipeline com esse método, o parâmetro PollForSourceChanges é padronizado como verdadeiro se não for explicitamente definido como falso. Ao adicionar a detecção de alterações baseada em eventos, é necessário adicionar o parâmetro a sua saída e defini-lo como falso para desativar a sondagem. Caso contrário, o pipeline inicia duas vezes para uma única alteração de origem. Para obter detalhes, consulte Configurações válidas para o PollForSourceChanges parâmetro.

  1. Execute o get-pipeline comando para copiar a estrutura do pipeline em um JSON arquivo. Por exemplo, para um pipeline chamado MyFirstPipeline, você deve digitar o seguinte comando:

    aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json

    Este comando retorna nada, mas o arquivo que você criou deve aparecer no diretório onde você executou o comando.

  2. Abra o JSON arquivo em qualquer editor de texto simples e edite o estágio de origem alterando ou adicionando o parâmetro. PollForSourceChanges Neste exemplo, para um repositório denominado UserGitHubRepo, o parâmetro é definido como false.

    Por que estou fazendo essa alteração? A alteração deste parâmetro para desativa as verificações periódicas para que você possa utilizar apenas a detecção de alterações baseada em eventos.

    "configuration": { "Owner": "name", "Repo": "UserGitHubRepo", "PollForSourceChanges": "false", "Branch": "main", "OAuthToken": "****" },
  3. Se você estiver trabalhando com a estrutura do pipeline recuperada usando o get-pipeline comando, deverá editar a estrutura no JSON arquivo removendo as metadata linhas do arquivo. Caso contrário, o comando update-pipeline não é capaz de utilizá-la. Remova a "metadata" seção da estrutura do pipeline no JSON arquivo, incluindo os "updated" campos: { } e o "created""pipelineARN", e.

    Por exemplo, remova as seguintes linhas da estrutura:

    "metadata": { "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name", "created": "date", "updated": "date" },

    Salve o arquivo.

  4. Para aplicar suas alterações, execute o update-pipeline comando, especificando o JSON arquivo do pipeline, semelhante ao seguinte:

    Importante

    Não se esqueça de incluir file:// antes do nome de arquivo. Ele é obrigatório nesse comando.

    aws codepipeline update-pipeline --cli-input-json file://pipeline.json

    Este comando retorna toda a estrutura do pipeline editado.

    nota

    O comando update-pipeline interrompe o pipeline. Se uma revisão estiver sendo executada pelo pipeline quando você executar o comando update-pipeline, essa execução será interrompida. Você deve iniciar manualmente o pipeline para executar a revisão através do pipeline atualizado. Use o comando start-pipeline-execution para iniciar manualmente o pipeline.

Atualize pipelines para eventos push (ações de origem da GitHub versão 1) (AWS CloudFormation modelo)

Siga estas etapas para atualizar seu pipeline (com uma GitHub fonte), desde verificações periódicas (enquetes) até a detecção de alterações baseada em eventos usando webhooks.

Para criar um pipeline orientado por eventos com AWS CodeCommit, você edita o PollForSourceChanges parâmetro do seu pipeline e depois adiciona um recurso de GitHub webhook ao seu modelo.

Se você usa AWS CloudFormation para criar e gerenciar seus pipelines, seu modelo tem conteúdo como o seguinte.

nota

Observe a propriedade de configuração PollForSourceChanges no estágio de origem. Se o seu modelo não inclui essa propriedade, PollForSourceChanges é definido como true por padrão.

YAML
Resources: AppPipeline: Type: AWS::CodePipeline::Pipeline Properties: Name: github-polling-pipeline RoleArn: !GetAtt CodePipelineServiceRole.Arn Stages: - Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: ThirdParty Version: 1 Provider: GitHub OutputArtifacts: - Name: SourceOutput Configuration: Owner: !Ref GitHubOwner Repo: !Ref RepositoryName Branch: !Ref BranchName OAuthToken: {{resolve:secretsmanager:MyGitHubSecret:SecretString:token}} PollForSourceChanges: true RunOrder: 1 ...
JSON
"AppPipeline": { "Type": "AWS::CodePipeline::Pipeline", "Properties": { "Name": "github-polling-pipeline", "RoleArn": { "Fn::GetAtt": [ "CodePipelineServiceRole", "Arn" ] }, "Stages": [ { "Name": "Source", "Actions": [ { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "ThirdParty", "Version": 1, "Provider": "GitHub" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "Owner": { "Ref": "GitHubOwner" }, "Repo": { "Ref": "RepositoryName" }, "Branch": { "Ref": "BranchName" }, "OAuthToken": "{{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}", "PollForSourceChanges": true }, "RunOrder": 1 } ] }, ...
Como adicionar parâmetros e criar um webhook em seu modelo

É altamente recomendável que você use AWS Secrets Manager para armazenar suas credenciais. Se você usar o Secrets Manager, já terá configurado e armazenado seus parâmetros secretos no Secrets Manager. Este exemplo usa referências dinâmicas ao Secrets Manager para as GitHub credenciais do seu webhook. Para obter mais informações, consulte Usar referências dinâmicas para especificar valores de modelo.

Importante

Ao transmitir parâmetros secretos, não insira o valor diretamente no modelo. O valor é renderizado como texto sem formatação e, portanto, é legível. Por motivos de segurança, não use texto simples em seu AWS CloudFormation modelo para armazenar suas credenciais.

Ao usar o CLI or AWS CloudFormation para criar um pipeline e adicionar um webhook, você deve desativar as verificações periódicas.

nota

Para desativar as verificações periódicas, é necessário adicionar explicitamente o parâmetro PollForSourceChanges e defini-lo como falso, conforme descrito no procedimento final abaixo. Caso contrário, o padrão para um AWS CloudFormation pipeline CLI or é que o PollForSourceChanges padrão seja true e não seja exibido na saída da estrutura do pipeline. Para obter mais informações sobre PollForSourceChanges padrões, consulte. Configurações válidas para o PollForSourceChanges parâmetro

  1. No modelo, em Resources, adicione os parâmetros:

    YAML
    Parameters: GitHubOwner: Type: String ...
    JSON
    { "Parameters": { "BranchName": { "Description": "GitHub branch name", "Type": "String", "Default": "main" }, "GitHubOwner": { "Type": "String" }, ...
  2. Use o AWS::CodePipeline::Webhook AWS CloudFormation recurso para adicionar um webhook.

    nota

    O TargetAction especificado deve corresponder à propriedade de Name da ação de origem definida no pipeline.

    Se RegisterWithThirdParty estiver definido comotrue, certifique-se de que o usuário associado ao OAuthToken possa definir os escopos necessários em GitHub. O token e o webhook exigem os seguintes GitHub escopos:

    • repo – usado para se obter o controle total para ler e efetuar pull de artefatos de repositórios públicos e privados para um pipeline.

    • admin:repo_hook – usado para se obter o controle total dos ganchos do repositório.

    Caso contrário, GitHub retorna um 404. Para obter mais informações sobre o 404 retornado, consulte https://help.github.com/articles/about-webhooks.

    YAML
    AppPipelineWebhook: Type: AWS::CodePipeline::Webhook Properties: Authentication: GITHUB_HMAC AuthenticationConfiguration: SecretToken: {{resolve:secretsmanager:MyGitHubSecret:SecretString:token}} Filters: - JsonPath: "$.ref" MatchEquals: refs/heads/{Branch} TargetPipeline: !Ref AppPipeline TargetAction: SourceAction Name: AppPipelineWebhook TargetPipelineVersion: !GetAtt AppPipeline.Version RegisterWithThirdParty: true ...
    JSON
    "AppPipelineWebhook": { "Type": "AWS::CodePipeline::Webhook", "Properties": { "Authentication": "GITHUB_HMAC", "AuthenticationConfiguration": { "SecretToken": "{{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}" }, "Filters": [{ "JsonPath": "$.ref", "MatchEquals": "refs/heads/{Branch}" }], "TargetPipeline": { "Ref": "AppPipeline" }, "TargetAction": "SourceAction", "Name": "AppPipelineWebhook", "TargetPipelineVersion": { "Fn::GetAtt": [ "AppPipeline", "Version" ] }, "RegisterWithThirdParty": true } }, ...
  3. Salve o modelo atualizado em seu computador local e abra o AWS CloudFormation console.

  4. Selecione sua pilha e clique em Create Change Set for Current Stack (Criar conjunto de alterações para a pilha atual).

  5. Carregue o modelo e visualize as alterações listadas no AWS CloudFormation. Essas são as alterações a serem feitas na pilha. Seus novos recursos devem ser exibidos na lista.

  6. Clique em Executar.

Para editar o PollForSourceChanges parâmetro do seu funil
Importante

Ao criar um pipeline com esse método, o parâmetro PollForSourceChanges é padronizado como verdadeiro se não for explicitamente definido como falso. Ao adicionar a detecção de alterações baseada em eventos, é necessário adicionar o parâmetro a sua saída e defini-lo como falso para desativar a sondagem. Caso contrário, o pipeline inicia duas vezes para uma única alteração de origem. Para obter detalhes, consulte Configurações válidas para o PollForSourceChanges parâmetro.

  • No modelo, altere PollForSourceChanges para false. Se você não incluir PollForSourceChanges na sua definição de pipeline, adicione-o e configure para falso.

    Por que estou fazendo essa alteração? A alteração deste parâmetro para false desativa as verificações periódicas para que você possa utilizar apenas a detecção de alterações baseada em eventos.

    YAML
    Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: ThirdParty Version: 1 Provider: GitHub OutputArtifacts: - Name: SourceOutput Configuration: Owner: !Ref GitHubOwner Repo: !Ref RepositoryName Branch: !Ref BranchName OAuthToken: {{resolve:secretsmanager:MyGitHubSecret:SecretString:token}} PollForSourceChanges: false RunOrder: 1
    JSON
    { "Name": "Source", "Actions": [{ "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "ThirdParty", "Version": 1, "Provider": "GitHub" }, "OutputArtifacts": [{ "Name": "SourceOutput" }], "Configuration": { "Owner": { "Ref": "GitHubOwner" }, "Repo": { "Ref": "RepositoryName" }, "Branch": { "Ref": "BranchName" }, "OAuthToken": "{{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}", PollForSourceChanges: false }, "RunOrder": 1 }]

Quando você cria esses recursos com AWS CloudFormation, o webhook definido é criado no GitHub repositório especificado. Seu pipeline é acionado durante a confirmação.

YAML
Parameters: GitHubOwner: Type: String Resources: AppPipelineWebhook: Type: AWS::CodePipeline::Webhook Properties: Authentication: GITHUB_HMAC AuthenticationConfiguration: SecretToken: {{resolve:secretsmanager:MyGitHubSecret:SecretString:token}} Filters: - JsonPath: "$.ref" MatchEquals: refs/heads/{Branch} TargetPipeline: !Ref AppPipeline TargetAction: SourceAction Name: AppPipelineWebhook TargetPipelineVersion: !GetAtt AppPipeline.Version RegisterWithThirdParty: true AppPipeline: Type: AWS::CodePipeline::Pipeline Properties: Name: github-events-pipeline RoleArn: !GetAtt CodePipelineServiceRole.Arn Stages: - Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: ThirdParty Version: 1 Provider: GitHub OutputArtifacts: - Name: SourceOutput Configuration: Owner: !Ref GitHubOwner Repo: !Ref RepositoryName Branch: !Ref BranchName OAuthToken: {{resolve:secretsmanager:MyGitHubSecret:SecretString:token}} PollForSourceChanges: false RunOrder: 1 ...
JSON
{ "Parameters": { "BranchName": { "Description": "GitHub branch name", "Type": "String", "Default": "main" }, "RepositoryName": { "Description": "GitHub repository name", "Type": "String", "Default": "test" }, "GitHubOwner": { "Type": "String" }, "ApplicationName": { "Description": "CodeDeploy application name", "Type": "String", "Default": "DemoApplication" }, "BetaFleet": { "Description": "Fleet configured in CodeDeploy", "Type": "String", "Default": "DemoFleet" } }, "Resources": { ... }, "AppPipelineWebhook": { "Type": "AWS::CodePipeline::Webhook", "Properties": { "Authentication": "GITHUB_HMAC", "AuthenticationConfiguration": { "SecretToken": { "{{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}" } }, "Filters": [ { "JsonPath": "$.ref", "MatchEquals": "refs/heads/{Branch}" } ], "TargetPipeline": { "Ref": "AppPipeline" }, "TargetAction": "SourceAction", "Name": "AppPipelineWebhook", "TargetPipelineVersion": { "Fn::GetAtt": [ "AppPipeline", "Version" ] }, "RegisterWithThirdParty": true } }, "AppPipeline": { "Type": "AWS::CodePipeline::Pipeline", "Properties": { "Name": "github-events-pipeline", "RoleArn": { "Fn::GetAtt": [ "CodePipelineServiceRole", "Arn" ] }, "Stages": [ { "Name": "Source", "Actions": [ { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "ThirdParty", "Version": 1, "Provider": "GitHub" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "Owner": { "Ref": "GitHubOwner" }, "Repo": { "Ref": "RepositoryName" }, "Branch": { "Ref": "BranchName" }, "OAuthToken": "{{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}", "PollForSourceChanges": false }, "RunOrder": 1 ...