Logotipo de Zephyrnet

Ejecute Kinesis Agent en Amazon ECS | Servicios web de Amazon

Fecha:

Agente de Kinesis es una aplicación de software Java independiente que ofrece una forma sencilla de recopilar y enviar datos a Secuencias de datos de Amazon Kinesis y Manguera de bomberos de datos de Amazon Kinesis. El agente monitorea continuamente un conjunto de archivos y envía nuevos datos al destino deseado. El agente maneja la rotación de archivos, los puntos de control y los reintentos en caso de falla. Entrega todos sus datos de una manera confiable, oportuna y sencilla. También emite Reloj en la nube de Amazon métricas para ayudarle a monitorear y solucionar mejor el proceso de transmisión.

Esta publicación describe los pasos para enviar datos desde una aplicación en contenedores a Kinesis Data Firehose mediante Kinesis Agent. Más específicamente, mostramos cómo ejecutar Kinesis Agent como un contenedor complementario para una aplicación que se ejecuta en Servicio de contenedor elástico de Amazon (Amazon ECS). Una vez que los datos estén en Kinesis Data Firehose, se pueden enviar a cualquier proveedor compatible. destino, Tales como Servicio de almacenamiento simple de Amazon (Amazon S3).

Para presentar los puntos clave necesarios para esta configuración, asumimos que está familiarizado con Amazon ECS y que trabaja con contenedores. También evitamos los detalles de implementación y el proceso de empaquetado de nuestra aplicación de generación de datos de prueba, denominada productor.

Resumen de la solución

Como se muestra en la siguiente figura, configuramos un contenedor de Kinesis Agent como un complemento que puede leer archivos creados por el contenedor productor. En este caso, los contenedores del productor y del Kinesis Agent comparten datos a través de un enlace de montaje en Amazon ECS.

Diagrama de diseño de solución.

Requisitos previos

Debe cumplir los siguientes requisitos previos para completar con éxito esta tarea:

Con estos requisitos previos implementados, puede comenzar el siguiente paso para empaquetar un Kinesis Agent y la configuración de agente deseada como un contenedor en su máquina de desarrollo local.

Crear un archivo de configuración del Agente Kinesis

Usamos la Archivo de configuración del agente Kinesis para configurar el origen y el destino, entre otras configuraciones de transferencia de datos. El siguiente código utiliza la configuración mínima requerida para leer el contenido de los archivos que coinciden /var/log/producer/*.log y publicarlos en un flujo de entrega de Kinesis Data Firehose llamado kinesis-agent-demo:

{
    "firehose.endpoint": "firehose.ap-southeast-2.amazonaws.com",
    "flows": [
        {
            "deliveryStream": "kinesis-agent-demo",
            "filePattern": "/var/log/producer/*.log"
        }
    ]
}

Crear una imagen de contenedor para Kinesis Agent

Para implementar Kinesis Agent como complemento en Amazon ECS, primero debe empaquetarlo como una imagen de contenedor. El contenedor debe tener Kinesis Agent, which y find binarios y el archivo de configuración de Kinesis Agent que preparó anteriormente. Su punto de entrada debe configurarse utilizando el start-aws-kinesis-agent guion. Este comando se instala cuando ejecuta el yum install aws-kinesis-agent paso. El Dockerfile resultante debería tener el siguiente aspecto:

FROM amazonlinux

RUN yum install -y aws-kinesis-agent which findutils
COPY agent.json /etc/aws-kinesis/agent.json

CMD ["start-aws-kinesis-agent"]

Ejecute el docker build comando para construir este contenedor:

docker build -t kinesis-agent .

Una vez creada la imagen, se debe enviar a un registro de contenedor como Amazon ECR para que pueda hacer referencia a ella en la siguiente sección.

Cree una definición de tarea de ECS con Kinesis Agent y el contenedor de la aplicación

Ahora que tiene Kinesis Agent empaquetado como una imagen de contenedor, puede usarlo en las definiciones de tareas de ECS para ejecutarlo como sidecar. Para hacer eso, crea una definición de tarea ECS con el contenedor de su aplicación (llamado producer) y el contenedor del agente Kinesis. Todos los contenedores en una definición de tarea están programados en el mismo host de contenedor y, por lo tanto, pueden compartir recursos como montajes de enlace.

En la siguiente definición de contenedor de ejemplo, utilizamos un montaje de enlace llamado logs_dir para compartir un directorio entre producer contenedor y kinesis-agent recipiente.

Puede utilizar la siguiente plantilla como punto de partida, pero asegúrese de cambiarla taskRoleArn y executionRoleArn a roles de IAM válidos en su cuenta de AWS. En este caso, el rol de IAM utilizado para taskRoleArn debe tener permisos de escritura en Kinesis Data Firehose que especificó anteriormente en el agent.json archivo. Además, asegúrese de que las rutas de la imagen ECR y awslogs-region se modifican según su cuenta de AWS.

{
    "family": "kinesis-agent-demo",
    "taskRoleArn": "arn:aws:iam::111111111:role/kinesis-agent-demo-task-role",
    "executionRoleArn": "arn:aws:iam::111111111:role/kinesis-agent-test",
    "networkMode": "awsvpc",
    "containerDefinitions": [
        {
            "name": "producer",
            "image": "111111111.dkr.ecr.ap-southeast-2.amazonaws.com/producer:latest",
            "cpu": 1024,
            "memory": 2048,
            "essential": true,
            "command": [
                "-output",
                "/var/log/producer/test.log"
            ],
            "mountPoints": [
                {
                    "sourceVolume": "logs_dir",
                    "containerPath": "/var/log/producer",
                    "readOnly": false
                }
            ],
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-create-group": "true",
                    "awslogs-group": "producer",
                    "awslogs-stream-prefix": "producer",
                    "awslogs-region": "ap-southeast-2"
                }
            }
        },
        {
            "name": "kinesis-agent",
            "image": "111111111.dkr.ecr.ap-southeast-2.amazonaws.com/kinesis-agent:latest",
            "cpu": 1024,
            "memory": 2048,
            "essential": true,
            "mountPoints": [
                {
                    "sourceVolume": "logs_dir",
                    "containerPath": "/var/log/producer",
                    "readOnly": true
                }
            ],
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-create-group": "true",
                    "awslogs-group": "kinesis-agent",
                    "awslogs-stream-prefix": "kinesis-agent",
                    "awslogs-region": "ap-southeast-2"
                }
            }
        }
    ],
    "volumes": [
        {
            "name": "logs_dir"
        }
    ],
    "requiresCompatibilities": [
        "FARGATE"
    ],
    "cpu": "2048",
    "memory": "4096"
}

Registre la definición de tarea con el siguiente comando:

aws ecs register-task-definition --cli-input-json file://./task-definition.json

Ejecute una nueva tarea de ECS

Finalmente, puede ejecutar una nueva tarea de ECS usando la definición de tarea que acaba de crear usando el aws ecs run-task dominio. Cuando se inicia la tarea, debería poder ver dos contenedores ejecutándose bajo esa tarea en la consola de Amazon ECS.

Captura de pantalla de la consola de Amazon ECS

Conclusión

Esta publicación mostró lo sencillo que es ejecutar Kinesis Agent en un entorno en contenedores. Aunque utilizamos Amazon ECS como nuestro servicio de orquestación de contenedores en esta publicación, puede utilizar un contenedor de Kinesis Agent en otros entornos, como Servicio Amazon Elastic Kubernetes (Amazon EKS).

Para obtener más información sobre el uso de Kinesis Agent, consulte Escritura en Amazon Kinesis Data Streams mediante Kinesis Agent. Para obtener más información sobre Amazon ECS, consulte la Guía para desarrolladores de Amazon ECS.


Sobre la autora

Budhike de Silva es arquitecto senior de soluciones especializado en Amazon Web Services. Buddhike ayuda a los clientes a ejecutar cargas de trabajo de análisis de streaming a gran escala en AWS y aprovechar al máximo su viaje a la nube.

punto_img

Información más reciente

punto_img