¿Cómo soluciono el error «El tamaño final de la política es superior al límite» de Lambda?

4 minutos de lectura
0

Cuando configuro un activador para invocar mi función de AWS Lambda, aparece el error «El tamaño final de la política es superior al límite». ¿Cómo soluciono el error?

Descripción breve

Si la política basada en recursos de la función de Lambda supera los 20 KB, Lambda devuelve un error El tamaño final de la política es mayor que el límite.

El error puede producirse al añadir declaraciones de política a la política basada en recursos de la función mediante una de las siguientes acciones:

Para resolver el error, reduzca el tamaño de la política de la función eliminando las declaraciones de política repetitivas y sustituyéndolas por declaraciones consolidadas que usen caracteres comodín (*). Para obtener más información, consulte Cuotas de Lambda y Limpieza de políticas basadas en recursos.

Resolución

Nota: Si recibe errores al ejecutar los comandos de la AWS CLI, asegúrese de utilizar la versión más reciente de la AWS CLI.

Revise las políticas basadas en recursos de su función

Nota: Para los siguientes comandos, sustituya my-function por el nombre de su función o nombre de recurso de Amazon (ARN).

  1. Ejecute el siguiente comando get-policy de AWS CLI para buscar y revisar la política basada en recursos de su función de Lambda:
$ aws lambda get-policy --function-name my-function

Nota: También puede utilizar el procesador JSON de la línea de comandos, jq, en el comando get-policy para escribir consultas avanzadas. Para obtener información sobre cómo descargar e instalar jq, consulte Descargar jq en el sitio web de jq en GitHub.

Ejemplo de comando get-policy que usa jq para formatear la política de una función de Lambda como un archivo JSON

$ aws lambda get-policy --function-name my-function | jq '.Policy|fromjson'

Ejemplo de comando get-policy que usa jq para encontrar el tamaño de la política de una función de Lambda

$ aws lambda get-policy --function-name my-function | jq -r '.Policy' | wc -c

Ejemplo de comando get-policy que usa jq para buscar el ID de sentencia (Sid) de determinadas sentencias de política

Sustituya events.amazonaws.com por el servicio de AWS que invoca su función.

$ aws lambda get-policy --function-name my-function | jq '.Policy
| fromjson
| .Statement[]
| select(.Principal.Service=="events.amazonaws.com")
| .Sid'

Ejemplo de comando get-policy que usa jq para obtener el Sid de los recursos cuyos nombres comienzan con la misma cadena

Sustituya arn:aws:events:region:account-id:rule/test- por una cadena que compartan los ARN de los recursos en varias sentencias de políticas repetitivas.

$ aws lambda get-policy --function-name my-function | jq '.Policy
| fromjson
| .Statement[]
| select(.Condition.ArnLike."AWS:SourceArn" | startswith("arn:aws:events:region:account-id:rule/test-"))
| .Sid'
  1. En la política basada en recursos, identifique las sentencias de política que pueda reemplazar por un comodín. Anote el Sid de cada sentencia de política.

Eliminar sentencias de política repetitivas

Ejecute el siguiente comando remove-permission de AWS CLI para eliminar cada declaración de política repetitiva. Reemplace my-function por el nombre o el ARN de su función. Sustituya sid por el Sid de la sentencia de política que desee eliminar.

$ aws lambda remove-permission --function-name my-function --statement-id sid

Agregue sentencias de política que usen un comodín (*)

Ejecute el siguiente comando add-permission de AWS CLI para añadir sentencias de políticas nuevas y consolidadas que incluyan un comodín (*). Reemplace my-function por el nombre o ARN de su función. Sustituya sid por un nuevo Sid de cualquier valor. Sustituya events.amazonaws.com por el principal de servicio o cuenta de AWS que invoca su función. Sustituya arn:aws:events:region:account-id:rule/test-* por una cadena de ARN (más un comodín) que compartan los recursos a los que está concediendo permisos.

$ aws lambda add-permission --function-name my-function \
--statement-id 'sid' \
--action 'lambda:InvokeFunction' \
--principal 'events.amazonaws.com' \
--source-arn 'arn:aws:events:region:account-id:rule/test-*'

Nota: Es posible que los activadores con comodines en la política basada en recursos no estén visibles en la consola de Lambda. Para obtener más información, consulte Invocación basada en eventos.

Para obtener más información, consulte Conceder acceso a las funciones a los servicios de AWS.


Información relacionada

Elementos de la política JSON de IAM: recurso

Controlar la salida de comandos desde la AWS CLI (Guía del usuario de la AWS CLI)

¿Por qué mi notificación de eventos de Amazon S3 no invoca mi función de Lambda?

¿Cómo detengo e inicio las instancias de Amazon EC2 a intervalos regulares con Lambda?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años