Logotipo de Zephyrnet

Invocar funciones de AWS Lambda desde Amazon Kinesis Data Streams entre cuentas | Servicios web de Amazon

Fecha:

Una arquitectura de múltiples cuentas en AWS es esencial para mejorar la seguridad, el cumplimiento y la administración de recursos al aislar cargas de trabajo, permitir la asignación granular de costos y facilitar la colaboración entre distintos entornos. También mitiga los riesgos, mejora la escalabilidad y permite configuraciones de red avanzadas.

En una arquitectura de transmisión, puede tener productores de eventos, almacenamiento de transmisión y consumidores de eventos en una sola cuenta o distribuidos en diferentes cuentas según su negocio y sus requisitos de TI. Por ejemplo, es posible que su empresa desee centralizar los datos de su flujo de clics o registrar datos de varios productores diferentes en diferentes cuentas. Los consumidores de datos de marketing, ingeniería de productos o análisis requieren acceso a los mismos datos de transmisión en todas las cuentas, lo que requiere la capacidad de ofrecer una arquitectura de transmisión de múltiples cuentas.

Para crear una arquitectura de transmisión de múltiples cuentas, puede usar Secuencias de datos de Amazon Kinesis como almacenamiento de flujo y AWS Lambda como consumidor del evento. Amazon Kinesis Data Streams permite el procesamiento en tiempo real de datos de streaming a escala. Cuando se integra con Lambda, permite el procesamiento de datos sin servidor, lo que le permite analizar y reaccionar a flujos de datos en tiempo real sin administrar la infraestructura. Esta integración admite varios casos de uso, incluidos análisis en tiempo real, procesamiento de registros, ingesta de datos de Internet de las cosas (IoT) y más, lo que la hace valiosa para las empresas que requieren información oportuna de sus datos de transmisión. En esta publicación, demostramos cómo se pueden procesar datos ingeridos en una secuencia en una cuenta con una función Lambda en otra cuenta.

El reciente lanzamiento del soporte de Kinesis Data Streams para políticas basadas en recursos permite invocar un Lambda desde otra cuenta. Con una política basada en recursos, puede especificar cuentas de AWS, Gestión de identidades y accesos de AWS (IAM) o roles de IAM y las acciones exactas de Kinesis Data Streams a las que desea otorgar acceso. Una vez concedido el acceso, puede configurar una función Lambda en otra cuenta para comenzar a procesar el flujo de datos que pertenece a su cuenta. Esto reduce el costo y simplifica el proceso de procesamiento de datos, porque ya no es necesario copiar datos de transmisión mediante funciones Lambda en ambas cuentas. Compartir el acceso a sus flujos de datos o a los consumidores registrados no genera cargos adicionales en su cuenta. El uso entre cuentas de los recursos de Kinesis Data Streams se seguirá facturando a los propietarios de los recursos.

En esta publicación, utilizamos Kinesis Data Streams con despliegue mejorado característica, que brinda a los consumidores un rendimiento de lectura dedicado adaptado a sus aplicaciones. De forma predeterminada, Kinesis Data Streams ofrece un rendimiento de lectura compartido de 2 MB/s por fragmento entre consumidores, pero con una distribución mejorada, cada consumidor puede disfrutar de un rendimiento dedicado de 2 MB/s por fragmento. Esta flexibilidad le permite adaptar perfectamente Kinesis Data Streams a sus requisitos específicos, eligiendo entre distribución mejorada para un rendimiento dedicado o rendimiento compartido según sus necesidades.

Resumen de la solución

Para nuestra solución, implementamos Kinesis Data Streams en la Cuenta 1 y Lambda como consumidor en la Cuenta 2 para recibir datos del flujo de datos. El siguiente diagrama ilustra la arquitectura de alto nivel.

Arquitectura de solución de cuentas cruzadas de Amazon KDS-Lambda

La configuración requiere los siguientes elementos clave:

  • Flujo de datos de Kinesis en la Cuenta 1 y función Lambda en la Cuenta 2
  • Políticas de recursos de Kinesis Data Streams en la cuenta 1, lo que permite que una función de ejecución de Lambda entre cuentas realice operaciones en el flujo de datos de Kinesis
  • Una función de ejecución de Lambda en la Cuenta 2 y una política mejorada de distribución de recursos del consumidor en la Cuenta 1, lo que permite que la función de ejecución de Lambda entre cuentas realice operaciones en el flujo de datos de Kinesis.

Para la configuración, utiliza tres Formación en la nube de AWS Plantillas para crear los recursos clave:

  • La plantilla 1 de CloudFormation crea los siguientes recursos clave en la Cuenta 1:
    • Flujo de datos de Kinesis
    • Consumidor de distribución mejorada del flujo de datos de Kinesis
  • La plantilla 2 de CloudFormation crea los siguientes recursos clave en la Cuenta 2:
    • Función Lambda del consumidor
    • Rol de ejecución de la función Lambda del consumidor
  • La plantilla 3 de CloudFormation crea el siguiente recurso en la Cuenta 2:
    • Mapeo de fuente de eventos de función Lambda del consumidor

La solución admite la implementación en una sola región y las plantillas de CloudFormation deben implementarse en la misma región en diferentes cuentas de AWS. En esta solución, utilizamos la distribución mejorada de Kinesis Data Streams, que es una práctica recomendada para implementar arquitecturas que requieren un gran rendimiento en múltiples consumidores. Complete los pasos de las siguientes secciones para implementar esta solución.

Requisitos previos

Debe tener dos cuentas de AWS y los permisos necesarios para ejecutar una plantilla de CloudFormation para crear los servicios mencionados en la arquitectura de la solución. También necesitas el Interfaz de línea de comandos de AWS (AWS CLI) instalado, versión 2.15 y superior.

Inicie la plantilla 1 de CloudFormation

Complete los siguientes pasos para iniciar la primera plantilla de CloudFormation:

  1. Inicia sesión en el Consola de administración de AWS como Cuenta 1 y seleccione la región de AWS adecuada.
  2. Descargar y lanzar Plantilla de formación de nube 1 donde desea implementar su flujo de datos de Kinesis.
  3. LambdaConsumerAccountId, ingrese su ID de cuenta de consumidor de Lambda y haga clic en enviar. La implementación de la plantilla de CloudFormation tardará unos minutos en completarse.
  4. Cuando la pila esté completa, en la consola de AWS CloudFormation, navegue hasta la pila. Salidas y copie los valores de los siguientes parámetros:
    • KinesisStreamArn
    • KinesisStreamEFOConsumerArn
    • KMSKeyArn

Necesitará estos valores en pasos posteriores.

Inicie la plantilla 2 de CloudFormation

Complete los siguientes pasos para iniciar la segunda plantilla de CloudFormation:

  1. Inicie sesión en la consola como Cuenta 2 y seleccione la Región adecuada.
  2. Descargar y lanzar Plantilla de formación de nube 2 donde desea alojar el consumidor Lambda.
  3. Proporcione los siguientes parámetros de entrada capturados en el paso anterior:
    • KinesisStreamArn
    • KinesisStreamEFOConsumerArn
    • KMSKeyArn

La plantilla de CloudFormation crea los siguientes recursos clave:

  • consumidor lambda
  • Rol de ejecución de Lambda

La función de ejecución de la función Lambda es una función de IAM que otorga permiso a la función para acceder a los servicios y recursos de AWS. Aquí, crea un rol de ejecución de Lambda que tiene los permisos de invocación de Lambda y Kinesis Data Streams necesarios.

La implementación de la plantilla de CloudFormation tardará unos minutos en completarse.

  1. Cuando la pila esté completa, en la consola de AWS CloudFormation, navegue hasta la pila. Salidas y copie los valores de los siguientes parámetros:
    • KinesisStreamCreateResourcePolicyCommand
    • KinesisStreamEFOConsumerCreateResourcePolicyCommand
  2. Ejecute los siguientes comandos de AWS CLI en la cuenta 1 usando AWS CloudShell. Recomendamos utilizar CloudShell porque tendrá la última versión de AWS CLI y evitará cualquier tipo de falla.
    • KinesisStreamCreateResourcePolicyCommand – Esto crea la política de recursos en la Cuenta 1 para Kinesis Data Stream. A continuación se muestra un ejemplo de política de recursos:
      {
      "Version": "2012-10-17",
      "Statement": [
      {
      "Sid": "StreamEFOReadStatementID",
      "Effect": "Allow",
      "Principal": {
      "AWS": [
      "arn:aws:iam::<AWS Lambda - Consumer account id>:role/kds-cross-account-stream-consumer-lambda-execution-role"
      ]
      },
      "Action": [
      "kinesis:DescribeStreamSummary",
      "kinesis:ListShards",
      "kinesis:DescribeStream",
      "kinesis:GetRecords",
      "kinesis:GetShardIterator"
      ],
      "Resource": "arn:aws:kinesis:<region id>:<Account 1 - Amazon KDS account id>:stream/kds-cross-account-stream"
      }
      ]
      }

    • KinesisStreamEFOConsumerCreateResourcePolicyCommand – Esto crea la política de recursos para el consumidor de distribución mejorada para el flujo de datos de Kinesis en la Cuenta 1. La siguiente es una política de recursos de ejemplo:
      {
      "Version": "2012-10-17",
      "Statement": [
      {
      "Sid": "ConsumerEFOReadStatementID",
      "Effect": "Allow",
      "Principal": {
      "AWS": [
      " arn:aws:iam::<AWS Lambda - Consumer account id>:role/kds-cross-account-stream-consumer-lambda-execution-role"
      ]
      },
      "Action": [
      "kinesis:DescribeStreamConsumer",
      "kinesis:SubscribeToShard"
      ],
      "Resource": "arn:aws:kinesis:<region id>:<Account 1 - Amazon KDS account id>:stream/kds-cross-account-stream/consumer/kds-cross-account-stream-efo-consumer:1706616477"
      }
      ]
      }

También puede acceder a esta política en la consola de Kinesis Data Streams, en Fan-out mejorado, Nombre del consumidory Política basada en recursos que comparten los consumidores.

Inicie la plantilla 3 de CloudFormation

Ahora que ha creado políticas de recursos en la Cuenta 1 para el flujo de datos de Kinesis y su consumidor de distribución mejorada, puede crear una asignación de origen de eventos Lambda para la función Lambda del consumidor en la Cuenta 2. Complete los siguientes pasos:

  1. Inicie sesión en la consola como Cuenta 2 y seleccione la Región adecuada.
  2. Descargar y lanzar Plantilla de formación de nube 3 para actualizar la pila que creó usando la plantilla 2 de CloudFormation.

La plantilla de CloudFormation crea la asignación del origen del evento Lambda.

Validar la solución

En este punto, la implementación está completa. Hay un flujo de datos de Kinesis disponible para consumir los mensajes y una función Lambda recibe estos mensajes en la cuenta de destino. Para enviar mensajes de muestra al flujo de datos en la Cuenta 1, ejecute el siguiente comando de AWS CLI mediante CloudShell:

aws kinesis put-record --stream-name kds-cross-account-stream --data sampledatarecord --partition-key samplepartitionkey3 --region <region id>

La función Lambda en la Cuenta 2 puede recibir los mensajes y usted debería poder verificar lo mismo usando Reloj en la nube de Amazon registros:

  1. En la consola de CloudWatch, elija Grupos de registros en el panel de navegación.
  2. Localice el grupo de registros /aws/lambda/kds-cross-account-stream-efo-consumer.
  3. Elige Grupo de registro de búsqueda para ver los mensajes de registro relevantes. El siguiente es un mensaje de ejemplo:
    "Records": [
    {
    "kinesis": {
    "kinesisSchemaVersion": "1.0",
    "partitionKey": "samplepartitionkey3",
    "sequenceNumber": "49648798411111169765201534322676841348246990356337393698",
    "data": "sampledatarecord",
    "approximateArrivalTimestamp": 1706623274.658
    },

Limpiar

Siempre es una buena práctica limpiar todos los recursos que creó como parte de esta publicación para evitar costos adicionales.

Para limpiar sus recursos, elimine las pilas de CloudFormation respectivas de las Cuentas 1 y 2 y evite que el productor envíe eventos al flujo de datos de Kinesis. Esto garantiza que no se le cobren innecesariamente.

Resumen

En esta publicación, demostramos cómo configurar una integración Lambda entre cuentas con Kinesis Data Streams utilizando políticas basadas en recursos de AWS. Esto permite el procesamiento de datos ingeridos en una secuencia dentro de una cuenta de AWS a través de una función Lambda ubicada en otra cuenta. Para ayudar a los clientes que usan un flujo de datos de Kinesis en su cuenta central y tienen varios consumidores leyendo datos de él, hemos utilizado la función de distribución mejorada de Kinesis Data Streams.

Para comenzar, abra la consola de Kinesis Data Streams o use la nueva API PutResourcePolicy para adjuntar una política de recursos a su flujo de datos o consumidor.


Sobre los autores

pratik patel es gerente sénior de cuentas técnicas y especialista en análisis de transmisión. Trabaja con los clientes de AWS y brinda soporte continuo y orientación técnica para ayudar a planificar y crear soluciones utilizando las mejores prácticas y mantener de manera proactiva los entornos de AWS de los clientes operativamente saludables.

Amor es arquitecto senior de soluciones en Amazon AWS en el Reino Unido. Trabaja con clientes de energía, servicios públicos, manufactura y automoción en implementaciones estratégicas, especializándose en el uso de AWS Streaming y soluciones avanzadas de análisis de datos, para impulsar resultados comerciales óptimos.

punto_img

Información más reciente

punto_img