Personalización de las imágenes de Docker para Flink y FluentD - Amazon EMR

Personalización de las imágenes de Docker para Flink y FluentD

Siga estos pasos para personalizar las imágenes de Docker de Amazon EMR en EKS con imágenes de Apache Flink o FluentD. Estos incluyen orientación técnica para obtener una imagen base, personalizarla, publicarla y enviar una carga de trabajo.

Antes de personalizar su imagen Docker, asegúrese de que cumple los siguientes requisitos previos:

La imagen base contiene el tiempo de ejecución de Amazon EMR y los conectores que necesita para acceder a otros Servicios de AWS. Si utiliza Amazon EMR en EKS con Flink en la versión 6.14.0 o posterior, puede obtener las imágenes base en la Galería pública de Amazon ECR. Navegue por la galería para encontrar el enlace a la imagen y llevarla a su espacio de trabajo local. Por ejemplo, para la versión 6.14.0 de Amazon EMR, el comando docker pull le devuelve la imagen base estándar más reciente. Sustituya emr-6.14.0:latest por la versión de lanzamiento que desee.

docker pull public.ecr.aws/emr-on-eks/flink/emr-6.14.0-flink:latest

Los siguientes son enlaces a la imagen de la galería Flink y a la imagen de la galería Fluentd:

Los pasos siguientes describen cómo personalizar la imagen base que ha extraído de Amazon ECR.

  1. Cree un Dockerfile nuevo en su espacio de trabajo local.

  2. Edite el Dockerfile y añada el siguiente contenido. Este Dockerfile usa la imagen del contenedor que extrajo de public.ecr.aws/emr-on-eks/flink/emr-7.3.0-flink:latest.

    FROM public.ecr.aws/emr-on-eks/flink/emr-7.3.0-flink:latest USER root ### Add customization commands here #### USER hadoop:hadoop

    Utilice la siguiente configuración si está utilizando Fluentd.

    FROM public.ecr.aws/emr-on-eks/fluentd/emr-7.3.0:latest USER root ### Add customization commands here #### USER hadoop:hadoop
  3. Agregue comandos en el Dockerfile para personalizar la imagen base. El comando siguiente muestra cómo instalar bibliotecas de Python.

    FROM public.ecr.aws/emr-on-eks/flink/emr-7.3.0-flink:latest USER root RUN pip3 install --upgrade boto3 pandas numpy // For python 3 USER hadoop:hadoop
  4. En el mismo directorio en el que se creó DockerFile, ejecute el siguiente comando para crear la imagen de Docker. El campo que proporcione después del indicador de -t es su nombre personalizado para la imagen.

    docker build -t <YOUR_ACCOUNT_ID>.dkr.ecr.<YOUR_ECR_REGION>.amazonaws.com/<ECR_REPO>:<ECR_TAG>

Ahora puede publicar la nueva imagen de Docker en su registro de Amazon ECR.

  1. Ejecute el siguiente comando para crear un repositorio de Amazon ECR para almacenar la imagen de Docker. Proporcione un nombre para su repositorio, por ejemplo emr_custom_repo. Para obtener más información, consulte Creación de un repositorio en la Guía del usuario de Amazon Elastic Container Registry.

    aws ecr create-repository \ --repository-name emr_custom_repo \ --image-scanning-configuration scanOnPush=true \ --region <AWS_REGION>
  2. Ejecute el siguiente comando para autenticarse en el registro predeterminado. Para obtener más información, consulte Autenticación de sus registros personalizados en la Guía del usuario de Amazon Elastic Container Registry.

    aws ecr get-login-password --region <AWS_REGION> | docker login --username AWS --password-stdin <AWS_ACCOUNT_ID>.dkr.ecr.<YOUR_ECR_REGION>.amazonaws.com
  3. Inserte la imagen. Para obtener más información, consulte Insertar una imagen en Amazon ECR en la Guía del usuario de Amazon Elastic Container Registry.

    docker push <YOUR_ACCOUNT_ID>.dkr.ecr.<YOUR_ECR_REGION>.amazonaws.com/<ECR_REPO>:<ECR_TAG>

Realice los siguientes cambios en sus especificaciones FlinkDeployment para usar una imagen personalizada. Para ello, introduzca su propia imagen en la línea spec.image de sus especificaciones de implementación.

apiVersion: flink.apache.org/v1beta1 kind: FlinkDeployment metadata: name: basic-example spec: flinkVersion: v1_18 image: <YOUR_ACCOUNT_ID>.dkr.ecr.<YOUR_ECR_REGION>.amazonaws.com/<ECR_REPO>:<ECR_TAG> imagePullPolicy: Always flinkConfiguration: taskmanager.numberOfTaskSlots: "1"

Para usar una imagen personalizada para su trabajo de Fluentd, introduzca su propia imagen en la línea monitoringConfiguration.image de sus especificaciones de implementación.

monitoringConfiguration: image: <YOUR_ACCOUNT_ID>.dkr.ecr.<YOUR_ECR_REGION>.amazonaws.com/<ECR_REPO>:<ECR_TAG> cloudWatchMonitoringConfiguration: logGroupName: flink-log-group logStreamNamePrefix: custom-fluentd