Crear una EventBridge regla para una fuente de Amazon S3 (CLI) - AWS CodePipeline

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Crear una EventBridge regla para una fuente de Amazon S3 (CLI)

Para crear un AWS CloudTrail rastro y habilitar el registro

Para usar el AWS CLI para crear un rastro, ejecute el create-trail comando y especifique:

  • El nombre del registro de seguimiento.

  • El bucket al que ya haya aplicado la política de bucket para AWS CloudTrail.

Para obtener más información, consulte Crear una ruta con la interfaz de línea de AWS comandos.

  1. Llame al comando create-trail e incluya los parámetros --name y --s3-bucket-name.

    ¿Por qué voy a hacer este cambio? Esto crea el registro de seguimiento de CloudTrail necesario para su bucket de origen de S3.

    El comando siguiente utiliza --name y --s3-bucket-name para crear un registro de seguimiento llamado my-trail y un bucket llamado myBucket.

    aws cloudtrail create-trail --name my-trail --s3-bucket-name myBucket
  2. Use el comando start-logging e incluya el parámetro --name.

    ¿Por qué voy a hacer este cambio? Este comando inicia el CloudTrail registro del bucket de origen y envía los eventos a EventBridge.

    Ejemplo:

    El siguiente comando utiliza --name para iniciar el registro en un registro de seguimiento llamado my-trail.

    aws cloudtrail start-logging --name my-trail
  3. Llame al comando put-event-selectors e incluya los parámetros --trail-name y --event-selectors. Utilice los selectores de eventos para especificar que desea que su ruta registre los eventos de datos del bucket de origen y los envíe a la EventBridge regla.

    ¿Por qué voy a hacer este cambio? Este comando filtra eventos.

    Ejemplo:

    El siguiente comando utiliza --trail-name y --event-selectors para especificar eventos de datos para un bucket de origen y un prefijo llamados myBucket/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:::myBucket/myFolder/file.zip"] }] }]'
Para crear una EventBridge regla con Amazon S3 como origen y CodePipeline destino del evento y aplicar la política de permisos
  1. Otorgue permisos EventBridge para utilizarlos CodePipeline para invocar la regla. Para obtener más información, consulta Uso de políticas basadas en recursos para Amazon. EventBridge

    1. Utilice el siguiente ejemplo para crear la política de confianza que permita EventBridge asumir la función de servicio. Denomínelo trustpolicyforEB.json.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. Utilice el comando para crear el rol Role-for-MyRule y asocie la política de confianza.

      ¿Por qué voy a hacer este cambio? Al agregar esta política de confianza al rol, se crean permisos para EventBridge.

      aws iam create-role --role-name Role-for-MyRule --assume-role-policy-document file://trustpolicyforEB.json
    3. Cree el JSON de la política de permisos tal y como se muestra aquí para la canalización denominada MyFirstPipeline. Ponga un nombre a la política de permisos permissionspolicyforEB.json.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:StartPipelineExecution" ], "Resource": [ "arn:aws:codepipeline:us-west-2:80398EXAMPLE:MyFirstPipeline" ] } ] }
    4. Utilice el siguiente comando para asociar la nueva política de permisos CodePipeline-Permissions-Policy-for-EB al rol Role-for-MyRule que ha creado.

      aws iam put-role-policy --role-name Role-for-MyRule --policy-name CodePipeline-Permissions-Policy-For-EB --policy-document file://permissionspolicyforEB.json
  2. Llame al comando put-rule e incluya los parámetros --name, --event-pattern y --role-arn.

    El siguiente comando de ejemplo crea una regla denominada 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\":[\"my-bucket\"],\"key\":[\"my-key\"]}}} --role-arn "arn:aws:iam::ACCOUNT_ID:role/Role-for-MyRule"
  3. Para añadirlo CodePipeline como destino, ejecuta el put-targets comando e incluye los --targets parámetros --rule y.

    El siguiente comando especifica que, para la regla denominada MyS3SourceRule, el destino Id se compone del número uno, lo que indica que, en lo que puede ser una lista de destinos de la regla, se trata del destino 1. El comando también especifica un ARN de ejemplo para la canalización. La canalización se inicia cuando se produce algún cambio en el repositorio.

    aws events put-targets --rule MyS3SourceRule --targets Id=1,Arn=arn:aws:codepipeline:us-west-2:80398EXAMPLE:TestPipeline
Para editar el PollForSourceChanges parámetro de tu canalización
importante

Al crear una canalización con este método, el parámetro PollForSourceChanges se establece en true de forma predeterminada si no se establece explícitamente en false. Al añadir la detección de cambios basada en eventos, debe añadir el parámetro a la salida y establecerlo en false para deshabilitar el sondeo. De lo contrario, la canalización comienza dos veces para un único cambio en el código fuente. Para obtener más detalles, consulte Configuración predeterminada del parámetro PollForSourceChanges.

  1. Ejecute el comando get-pipeline para copiar la estructura de canalización en un archivo JSON. Por ejemplo, para una canalización denominada MyFirstPipeline, escriba el siguiente comando:

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

    Este comando no devuelve nada, pero el archivo creado debería aparecer en el directorio en el que se ejecutó el comando.

  2. Abra el archivo JSON en cualquier editor de texto sin formato y edite la etapa de código fuente cambiando el parámetro PollForSourceChanges del bucket denominado storage-bucket a false, tal y como se muestra en este ejemplo.

    ¿Por qué voy a hacer este cambio? Al establecer este parámetro en false, se desactivan las comprobaciones periódicas, por lo que únicamente puede utilizar la detección de cambios basada en eventos.

    "configuration": { "S3Bucket": "storage-bucket", "PollForSourceChanges": "false", "S3ObjectKey": "index.zip" },
  3. Si está trabajando con la estructura de la canalización recuperada mediante el comando get-pipeline, debe eliminar las líneas metadata del archivo JSON. De lo contrario, el comando update-pipeline no puede utilizarlo. Elimine las líneas "metadata": { } y los campos "updated", "created" y "pipelineARN".

    Por ejemplo, quite las siguientes líneas de la estructura:

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

    Guarde el archivo.

  4. Para aplicar los cambios, ejecute el comando update-pipeline especificando el archivo JSON:

    importante

    Asegúrese de incluir file:// antes del nombre de archivo. Es obligatorio en este comando.

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

    Este comando devuelve la estructura completa de la canalización editada.

    nota

    El comando update-pipeline detiene la canalización. Si se está ejecutando una revisión en la canalización al ejecutar el comando update-pipeline, dicha ejecución se detiene. Debe iniciar manualmente la canalización para ejecutar dicha revisión en la canalización actualizada. Utilice el comando start-pipeline-execution para iniciar manualmente la canalización.