

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

# Crie uma EventBridge regra para uma fonte do Amazon S3 (CLI)
<a name="create-cloudtrail-S3-source-cli"></a><a name="proc-cli-event-s3-createtrail"></a>

**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](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail-by-using-the-aws-cli.html).

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 trilha do CloudTrail necessária para o 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
   ```

1. 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
   ```

1. 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"] }] }]'
   ```<a name="proc-cli-event-s3-createrule"></a>

**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](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-use-resource-based.html). 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`.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "events.amazonaws.com"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

   1. 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
      ```

   1. Crie o JSON da política de permissões, conforme mostrado aqui para o pipeline chamado `MyFirstPipeline`. Nomeie a politica de permissões `permissionspolicyforEB.json`.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "codepipeline:StartPipelineExecution"
                  ],
                  "Resource": [
                      "arn:aws:codepipeline:us-west-2:111122223333:MyFirstPipeline"
                  ]
              }
          ]
      }
      ```

------

   1. 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
      ```

1. 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"
   ```

1. 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
   ```

1. (Opcional) Para configurar um transformador de entrada com substituições de origem para um ID de imagem específico, use o JSON a seguir no comando da CLI. O exemplo a seguir configura uma substituição na qual:
   + O `actionName`, `Source` neste exemplo, é o valor dinâmico, definido na criação do pipeline, não derivado do evento de origem.
   + O `revisionType`, `S3_OBJECT_VERSION_ID` neste exemplo, é o valor dinâmico, definido na criação do pipeline, não derivado do evento de origem.
   + O`revisionValue`, < *revisionValue* > neste exemplo, é derivado da variável de evento de origem.

   ```
   {
       "Rule": "my-rule",
       "Targets": [
           {
               "Id": "MyTargetId",
               "Arn": "ARN",
               "InputTransformer": {
                   "InputPathsMap": {
                       "revisionValue": "$.detail.object.version-id"
                   },
                   "InputTemplate": {
                       "sourceRevisions": {
                           "actionName": "Source",
                           "revisionType": "S3_OBJECT_VERSION_ID",
                           "revisionValue": "<revisionValue>"
                       }
                   }
               }
           }
       ]
   }
   ```<a name="proc-cli-flag-s3"></a>

**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 parâmetro `PollForSourceChanges`](PollForSourceChanges-defaults.md).

1. Execute o **get-pipeline** comando para copiar a estrutura do pipeline em um arquivo JSON. 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.

1. Abra o arquivo JSON em qualquer editor de texto plano e, para editar o estágio de origem, altere o parâmetro `PollForSourceChanges` de um bucket denominado `amzn-s3-demo-source-bucket` para `false`, 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"
   },
   ```

1. Se você estiver trabalhando com a estrutura do pipeline recuperada por meio do comando **get-pipeline**, é necessário remover as linhas `metadata` do arquivo JSON. 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.

1. Para aplicar suas alterações, execute o comando **update-pipeline** especificando o arquivo JSON 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.