¿Cómo puedo configurar una suscripción a AWS Lambda entre cuentas con un tema de SNS?
Quiero suscribir mi función de AWS Lambda a un tema de Amazon Simple Notification Service (Amazon SNS) en otra cuenta.
Breve descripción
Mediante la consola de Amazon SNS, añada una suscripción de AWS Lambda entre cuentas a un tema de Amazon SNS.
Resolución
Requisito previo
Antes de empezar, asegúrese de que:
- la política de recursos de la función de Lambda permite a SNS invocar la función.
- la política de acceso al tema de SNS permite a Lambda suscribirse al tema.
Nota: El tema SNS reside en la cuenta A y la función de Lambda reside en la cuenta B.
Suscribir una función de Lambda entre cuentas
Hay dos formas posibles de suscribir una función de Lambda entre cuentas a un tema de SNS:
- Agregar un desencadenador de SNS desde la consola de Lambda en la cuenta B
- Agregar la suscripción de Lambda desde la consola de SNS en la cuenta B (la cuenta con la función de Lambda)
Crear los recursos
Cree un tema de SNS en la cuenta A:
- Abra la consola de Amazon SNS y seleccione Temas en el panel izquierdo.
- Elija Crear tema, seleccione Tipo de tema e introduzca el Nombre del tema.
- Desplácese hacia abajo y seleccione Crear tema.
Permite que la cuenta B realice una acción de suscripción sobre el tema.
- Edite la política de acceso del tema para conceder el permiso SNS:Subscribe a la cuenta B.
- Añada la instrucción de política que se muestra a continuación y guarde:
{ "Sid": "Allow-AccountB-To-Subscribe", "Effect": "Allow", "Principal": { "AWS": "" }, "Action": "sns:Subscribe", "Resource": "" }
Nota: En Entidad principal, sustitúyala <AccountB> por su número de cuenta que tiene la función de Lambda. En el campo Recurso, escriba <SNSTopicARN> su nombre de recurso de Amazon (ARN) del tema de SNS.
Cree una función de Lambda en la cuenta B:
- Abra la página de Función en la consola de AWS Lambda. A continuación, seleccione Crear función.
- Introduzca un Nombre de función.
- En Rol de ejecución, elija Crear un nuevo rol con permisos básicos de Lambda. Lambda crea un rol de ejecución que otorga a la función permiso para cargar registros en Amazon CloudWatch.
- Desplácese hacia abajo y haga clic en el botón Crear función.
Suscribirse a una función de Lambda añadiendo un desencadenador en la consola de Lambda (opción 1)
- Abra la página de Función en la consola de AWS Lambda y seleccione la función que creó anteriormente.
- Haga clic en el botón Añadir desencadenador.
- En la página de configuración del desencadenador, seleccione SNS en la lista desplegable.
- En el campo de Tema de SNS, pegue el ARN del tema.
- Haga clic en el botón Añadir.
El tema de SNS de la cuenta A ahora puede invocar la función de Lambda en la cuenta B.
Probar la configuración
Pruebe publicando un mensaje en el tema de SNS.
Nota: Al añadir el disparador desde la consola de Lambda, Lambda añade automáticamente los permisos necesarios para que Amazon SNS invoque la función de Lambda desde este desencadenador.
Suscribirse a una función de Lambda añadiendo una suscripción desde la consola de SNS (opción 2)
Esta opción requiere que conceda explícitamente al servicio SNS el permiso principal para realizar la acción lambda:InvokeFunction.
Permita que la entidad principal del servicio de SNS invoque la función de Lambda.
En la página Funciones de la consola de Lambda, seleccione la función que creó anteriormente. A continuación, siga estos pasos:
- Seleccione la pestaña Configuración y, a continuación, Permisos.
- Desplácese hacia abajo hasta la sección Política basada en recursos. A continuación, haga clic en el botón Agregar permisos.
- Seleccione AWS Service y elija SNS en la lista desplegable. A continuación, rellene los campos:
En ID de instrucción, establezca AllowSNSToInvokeFunction
En ARN de origen, pegue el ARN del tema de SNS creado anteriormente
En Acción, elija lambda:InvokeFunction - Seleccione Guardar.
- Cree la suscripción de SNS para Lambda.
Desde la cuenta B, abra la consola de Amazon SNS.
- En el panel de la izquierda, seleccione Suscripciones.
- Haga clic en el botón Crear suscripción.
- Pegue el ARN del tema de SNS de la cuenta A en el campo ARN del tema.
- Seleccione AWS Lambda de la lista desplegable Protocol.
- Pegue el ARN de la función de Lambda en el campo Punto de conexión
- Desplácese hacia abajo y haga clic en el botón Crear suscripción.
Nota: Asegúrese de suscribir su función de Lambda al tema de SNS desde la cuenta de AWS que tiene la función de Lambda (cuenta B). Si intenta crear la suscripción desde la cuenta que tiene el tema de SNS (cuenta A), aparece el siguiente error:
Error code: AccessDeniedException - Error message: User: arn:aws:sts::XXXXXXX:XXXXXXX/XXXXX/XXXXXX is not authorized to perform: lambda:AddPermission on resource: arn:aws:lambda:region:XXXXXXX:function:XXXXXXX
Información relacionada
Contenido relevante
- OFICIAL DE AWSActualizada hace 10 meses
- OFICIAL DE AWSActualizada hace 3 años
- OFICIAL DE AWSActualizada hace un año