Creación de una regla de EventBridge para una fuente de Amazon S3 (CLI)
Para crear un registro de seguimiento de AWS CloudTrail y activar el registro
Para crear un registro de seguimiento mediante la AWS CLI, use el comando create-trail especificando:
-
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 Creación de un registro de seguimiento con la interfaz de línea de comandos de AWS.
-
Llame al comando create-trail e incluya los parámetros
--namey--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
--namey--s3-bucket-namepara crear un registro de seguimiento llamadomy-traily un bucket llamadoamzn-s3-demo-source-bucket.aws cloudtrail create-trail --name my-trail --s3-bucket-name amzn-s3-demo-source-bucket -
Use el comando start-logging e incluya el parámetro
--name.Por qué voy a hacer este cambio? Este comando inicia el registro de CloudTrail para su bucket de origen y envía eventos a EventBridge.
Ejemplo:
El siguiente comando utiliza
--namepara iniciar el registro en un registro de seguimiento llamadomy-trail.aws cloudtrail start-logging --name my-trail -
Llame al comando put-event-selectors e incluya los parámetros
--trail-namey--event-selectors. Utilice selectores de eventos para indicar que desea que el registro de seguimiento grabe los eventos de datos del bucket de origen y envíe los eventos a la regla de EventBridge.Por qué voy a hacer este cambio? Este comando filtra eventos.
Ejemplo:
El siguiente comando utiliza
--trail-namey--event-selectorspara especificar eventos de datos para un bucket de origen y un prefijo llamadosamzn-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 crear una regla de EventBridge con Amazon S3 como origen de eventos y CodePipeline como destino y aplicar la política de permisos
-
Conceda permisos para que EventBridge pueda utilizar CodePipeline para invocar la regla. Para obtener más información, consulte Uso de políticas basadas en recursos para Amazon EventBridge.
-
Utilice el siguiente ejemplo para crear la política de confianza que permite que EventBridge asuma el rol de servicio. Denomínelo
trustpolicyforEB.json. -
Utilice el comando para crear el rol
Role-for-MyRuley asocie la política de confianza.Por qué voy a hacer este cambio? Al añadir esta política de confianza al rol, se crean permisos para .
aws iam create-role --role-name Role-for-MyRule --assume-role-policy-document file://trustpolicyforEB.json -
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 permisospermissionspolicyforEB.json. -
Utilice el siguiente comando para asociar la nueva política de permisos
CodePipeline-Permissions-Policy-for-EBal rolRole-for-MyRuleque ha creado.aws iam put-role-policy --role-name Role-for-MyRule --policy-name CodePipeline-Permissions-Policy-For-EB --policy-document file://permissionspolicyforEB.json
-
-
Llame al comando put-rule e incluya los parámetros
--name,--event-patterny--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\":[\"amzn-s3-demo-source-bucket\"],\"key\":[\"my-key\"]}}} --role-arn "arn:aws:iam::ACCOUNT_ID:role/Role-for-MyRule" -
Para añadir CodePipeline como destino, ejecute el comando put-targets e incluya los parámetros
--ruley--targets.El siguiente comando especifica que, para la regla denominada
MyS3SourceRule, el destinoIdse 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 unARNde 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 -
(Opcional) Para configurar un transformador de entrada con anulaciones de origen para un ID de imagen específico, utilice el siguiente fragmento de código JSON en el comando de la CLI. En el siguiente ejemplo, se configura una anulación donde:
-
actionName(Sourceen este ejemplo) es el valor dinámico, que se define en la creación de la canalización, no se deriva del evento de origen. -
revisionType(S3_OBJECT_VERSION_IDen este ejemplo) es el valor dinámico, que se define en la creación de la canalización, no se deriva del evento de origen. -
revisionValue(<revisionValue> en este ejemplo) se deriva de la variable del evento de origen.
{ "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>" } } } } ] } -
Para editar el parámetro PollForSourceChanges de la 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 información, consulte Configuración válida para el parámetro PollForSourceChanges.
-
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 --nameMyFirstPipeline>pipeline.jsonEste comando no devuelve nada, pero el archivo creado debería aparecer en el directorio en el que se ejecutó el comando.
-
Abra el archivo JSON en cualquier editor de texto sin formato y edite la etapa de código fuente cambiando el parámetro
PollForSourceChangesdel bucket denominadoamzn-s3-demo-source-bucketafalse, 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": "amzn-s3-demo-source-bucket","PollForSourceChanges": "false","S3ObjectKey": "index.zip" }, -
Si está trabajando con la estructura de la canalización recuperada mediante el comando get-pipeline, debe eliminar las líneas
metadatadel archivo JSON. De lo contrario, el comando update-pipeline no puede utilizarlo. Elimine las líneas"metadata": { }y los campos"created","pipelineARN"y"updated".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.
-
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.jsonEste 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.