Criar uma regra do EventBridge para uma origem do Amazon S3 (CLI)
Para criar uma trilha do AWS CloudTrail e habilitar o registro em log
Para usar a AWS CLI para criar uma trilha, chame o comando create-trail, 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 Criar uma trilha com a interface de linha de comando da AWS.
-
Use o comando create-trail e inclua os parâmetros
--namee--s3-bucket-name.Por que estou fazendo essa alteração? Isso cria a trilha do CloudTrail necessária ao bucket de origem do S3.
O comando a seguir usa
--namee--s3-bucket-namepara criar uma trilha denominadamy-traile um bucket chamado deamzn-s3-demo-source-bucket.aws cloudtrail create-trail --name my-trail --s3-bucket-name amzn-s3-demo-source-bucket -
Use o comando start-logging e inclua o parâmetro
--name.Por que estou fazendo essa alteração? Esse comando inicia o registro em log do CloudTrail para o bucket de origem e envia eventos ao EventBridge.
Exemplo:
O comando a seguir utiliza
--namepara iniciar o registro em log em uma trilha denominadamy-trail.aws cloudtrail start-logging --name my-trail -
Use o comando put-event-selectors e inclua os parâmetros
--trail-namee--event-selectors. Use seletores de eventos para especificar que você deseja que a trilha registre em log os eventos de dados no bucket de origem e envie os eventos para a regra do EventBridge.Por que estou fazendo essa alteração? Esse comando filtra eventos.
Exemplo:
O comando a seguir utiliza
--trail-namee--event-selectorspara especificar eventos de dados para um bucket de origem e prefixo denominadoamzn-s3-demo-source-bucket/myFolder.aws cloudtrail put-event-selectors --trail-namemy-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 regra do EventBridge com o Amazon S3 como origem do evento e o CodePipeline como destino e aplicar a política de permissões
-
Conceda ao EventBridge as permissões necessárias que o permitirão usar o CodePipeline para invocar a regra. Para obter mais informações, consulte Usar políticas baseadas em recursos para o Amazon EventBridge.
-
Use o exemplo a seguir para criar a política de confiança que permitirá ao EventBridge assumir o perfil de serviço. Chame-o de
trustpolicyforEB.json. -
Use o comando a seguir para criar a função
Role-for-MyRulee anexar a política de confiança.Por que estou fazendo essa alteração? A adição dessa política de confiança ao perfil cria permissões para o EventBridge.
aws iam create-role --role-name Role-for-MyRule --assume-role-policy-document file://trustpolicyforEB.json -
Crie o JSON da política de permissões, conforme mostrado aqui para o pipeline chamado
MyFirstPipeline. Nomeie a politica de permissõespermissionspolicyforEB.json. -
Use o comando a seguir para anexar a nova política de permissões
CodePipeline-Permissions-Policy-for-EBà funçãoRole-for-MyRulecriada.aws iam put-role-policy --role-name Role-for-MyRule --policy-name CodePipeline-Permissions-Policy-For-EB --policy-document file://permissionspolicyforEB.json
-
-
Use o comando put-rule e inclua os parâmetros
--name,--event-patterne--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" -
Para adicionar o CodePipeline como destino, chame o comando put-targets e inclua os parâmetros
--rulee--targets.O comando a seguir especifica que, para a regra denominada
MyS3SourceRule, oIddo 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 umARNde 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 -
(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,Sourceneste exemplo, é o valor dinâmico, definido na criação do pipeline, não derivado do evento de origem. -
O
revisionType,S3_OBJECT_VERSION_IDneste exemplo, é o valor dinâmico, definido na criação do pipeline, não derivado do evento de origem. -
O
revisionValue, <RevisionValue> neste exemplo, deriva da variável do 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>" } } } } ] } -
Editar o parâmetro PollForSourceChanges do pipeline
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.
-
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 --nameMyFirstPipeline>pipeline.jsonEste comando retorna nada, mas o arquivo que você criou deve aparecer no diretório onde você executou o comando.
-
Abra o arquivo JSON em qualquer editor de texto plano e, para editar o estágio de origem, altere o parâmetro
PollForSourceChangesde um bucket denominadoamzn-s3-demo-source-bucketparafalse, conforme mostrado neste exemplo.Por que estou fazendo essa alteração? A configuração deste parâmetro para
falsedesativa 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" }, -
Se você estiver trabalhando com a estrutura do pipeline recuperada por meio do comando get-pipeline, é necessário remover as linhas
metadatado 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.
-
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.jsonEste 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.