Skip to content

¿Cómo configuro una notificación de eventos de Amazon S3 para invocar una función de Lambda que está en otra cuenta de AWS?

5 minutos de lectura
0

Quiero que mi bucket de Amazon Simple Storage Service (Amazon S3) invoque una función de AWS Lambda en otra cuenta de AWS.

Resolución

Para configurar el bucket de Amazon S3 de modo que invoque una función de Lambda en otra cuenta de AWS, sigue estos pasos:

  1. Actualiza la política de permisos basada en recursos de tu función de Lambda para conceder el permiso de invocación a Amazon S3.
  2. Crea una notificación de eventos de Amazon S3 que invoque tu función de Lambda.

Importante: La función de Lambda debe estar en la misma región de AWS que el bucket de S3.

Para obtener información sobre cómo migrar funciones, consulta ¿Cómo puedo migrar una función de Lambda a otra cuenta o región de AWS mediante la consola de Lambda?

Actualización de la política de permisos basada en recursos de la función de Lambda para conceder el permiso de invocación a Amazon S3

Consola de administración de AWS

Para actualizar la política de permisos basada en recursos de la función de Lambda para conceder el permiso de invocación a Amazon S3, sigue estos pasos:

  1. Abre la página de funciones en la consola de Lambda con la cuenta de AWS en la que se encuentra la función de Lambda.
  2. Elige el nombre de la función de Lambda que quieres que Amazon S3 invoque.
  3. En la pestaña Configuración, elige Permisos.
  4. En el panel Política basada en recursos, selecciona Agregar permisos.
  5. En el panel Instrucción de política, elige Servicio AWS. Aparece la lista desplegable de Servicio.
  6. En la lista desplegable Servicio, elige S3 para ver más campos.
  7. En ID de instrucción, introduce un ID de instrucción único para diferenciar la instrucción que creas dentro de la política.
  8. En Cuenta de origen, introduce el ID de cuenta de AWS de la cuenta que aloja tu bucket de S3.
  9. En ARN de origen, introduce el ARN del bucket de S3. Usa el siguiente formato:
    arn:aws:s3:::bucket_name
    Nota: Sustituye bucket_name por el nombre de tu bucket de S3.
  10. En Acción, selecciona lambda:InvokeFunction en la lista desplegable.
  11. Selecciona Guardar.

Para obtener más información, consulta Uso de políticas basadas en recursos en Lambda.

AWS CLI

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

Actualiza la política de permisos basada en recursos de tu función de Lambda para conceder el permiso de invocación a Amazon S3 con la API add-permission similar a la siguiente:

aws lambda add-permission \--function-name LambdaFunction_name \
--action lambda:InvokeFunction \
--principal s3.amazonaws.com \
--source-arn arn:aws:s3:::bucket_name \
--source-account account-id \
--statement-id "unique_statement_ID"

Nota: Sustituye LambdaFunction_name, bucket_name y unique_statement_ID por tus variables.

Creación de una notificación de eventos de Amazon S3 que invoque la función de Lambda

Consola de administración de AWS

Sigue las instrucciones para activar y configurar las notificaciones de eventos con la consola de Amazon S3.

AWS CLI

Para crear una notificación de eventos de Amazon S3 que invoque tu función de Lambda, utiliza el comando put-bucket-notification-configuration.

Importante: Antes de usar el comando put-bucket-notification, comprueba que no tienes ninguna otra notificación de eventos configurada en tu bucket de S3. El comando put-bucket-notification-configuration realiza una operación de reemplazo en cualquier configuración de notificación existente en lugar de anexarla.

Para comprobar si tu bucket ya tiene notificaciones de eventos, ejecuta el siguiente comando:

aws s3api get-bucket-notification-configuration --bucket bucket_name

Si el comando anterior devuelve un objeto JSON vacío o no hay respuesta, significa que no tienes ninguna configuración de notificación de eventos existente. Crea y guarda un archivo nuevo llamado notification.json con la siguiente configuración:

{
"LambdaFunctionConfigurations": [
    {
      "Id": "my-lambda-function-s3-event-configuration",
      "LambdaFunctionArn": "LambdaFunction_ARN",
      "Events": [ "s3:ObjectCreated:" ],
      "Filter": {
        "Key": {
          "FilterRules": [
            {
              "Name": "prefix"|"suffix",
              "Value": "string"
            }
          ]
        }
      }
    }
  ]
}

Nota: Sustituye LambdaFunction_ARN por el ARN de tu función de Lambda. Sustituye el prefijo y el sufijo por tus variables para la regla de filtrado.

Si la configuración get-bucket-notification-configuration devuelve un JSON de configuración de notificación de eventos existente, guarda la configuración JSON existente en un archivo denominado notification.json. Agrega la nueva configuración de notificaciones de Lambda a una clave LambdaFunctionConfigurations o crea una nueva clave con la sintaxis JSON que se muestra en el siguiente ejemplo. Agrega la clave al archivo notification.json:

{
... # Non Lambda event configurations like SNS, SQS etc. ,
"LambdaFunctionConfigurations": [
    {
      "Id": "my-lambda-function-s3-event-configuration",
      "LambdaFunctionArn": "LambdaFunction_ARN",
      "Events": [ "s3:ObjectCreated:" ],
      "Filter": {
        "Key": {
          "FilterRules": [
            {
              "Name": "prefix"|"suffix",
              "Value": "string"
            }
          ]
        }
      }
    },
    {...}, #Other pre-existing Lambda Function configurations
  ]
}

Después de crear el archivo notification.json, ejecuta el siguiente comando para actualizar la configuración de notificaciones de eventos de S3:

aws s3api put-bucket-notification-configuration \
--bucket bucket_name \
--notification-configuration file://notification.json

Nota: Sustituye bucket_name por el nombre de tu bucket de S3.

Prueba de la función de Lambda

Para probar la función de Lambda con la consola de Lambda, consulta Probar la función de Lambda con un evento ficticio. Si la notificación de eventos no invoca tu función, consulta ¿Por qué mi notificación de eventos de Amazon S3 no invoca mi función de Lambda?

Información relacionada

¿Cómo permito que mi función de Lambda acceda a mi bucket de Amazon S3?

¿Por qué aparece el error «Unable to validate the following destination configurations» al crear una notificación de eventos de Amazon S3?

OFICIAL DE AWSActualizada hace un año