Como faço para resolver o erro “The final policy size is bigger than the limit” (O tamanho final da política é maior que o limite) do Lambda?

4 minuto de leitura
0

Quando defino um gatilho para invocar minha função do AWS Lambda, recebo o erro (The final policy size is bigger than the limit" (O tamanho final da política é maior que o limite). Como resolvo o erro?

Breve descrição

Se a política baseada em recursos da sua função do Lambda tiver mais de 20 KB, o Lambda retornará um erro O tamanho final da política é maior que o limite.

O erro pode ocorrer quando você adiciona instruções de política à política baseada em recursos da sua função fazendo o seguinte:

Para resolver o erro, reduza o tamanho da política de sua função removendo declarações de política repetitivas e substituindo-as por instruções consolidadas que usam curingas (*). Para mais informações, consulte Lambda quotas (Cotas do Lambda) e Cleaning up resource-based policies (Limpar políticas baseadas em recursos).

Resolução

Observação: se você receber erros ao executar comandos da AWS CLI, certifique-se de estar usando a versão mais recente da AWS CLI.

Revisar as políticas baseadas em recursos da sua função

Observação: para os comandos a seguir, substitua my-function pelo nome da sua função ou pelo Nome do recurso da Amazon (ARN).

1.    Execute o seguinte comando get-policy da AWS CLI para encontrar e revisar a política baseada em recursos da sua função do Lambda:

$ aws lambda get-policy --function-name my-function

Observação: você também pode usar o processador JSON da linha de comando, jq, no comando get-policy para escrever consultas avançadas. Para informações sobre como baixar e instalar o jq, consulte Baixar o jq no site do jq no GitHub.

Exemplo de comando get-policy que usa jq para formatar a política de uma função do Lambda como um arquivo JSON

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

Exemplo de comando get-policy que usa jq para encontrar o tamanho da política de uma função do Lambda

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

Exemplo de comando get-policy que usa jq para encontrar a ID da declaração (Sid) de determinadas declarações de política

Substitua events.amazonaws.com pelo serviço da AWS que invoca sua função.

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

Exemplo de comando get-policy que usa jq para obter a Sid de recursos cujos nomes começam com a mesma sequência de caracteres

Substitua arn:aws:events:region:account-id:rule/test- por uma sequência compartilhada pelos ARNs dos recursos em várias declarações de política 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'

2.    Na política baseada em recursos, identifique as declarações de política que você pode substituir por um curinga. Observe a Sid de cada declaração de política.

Remover declarações de política repetitivas

Execute o seguinte comando remove-permission da AWS CLI para remover cada declaração de política repetitiva. Substitua my-function pelo nome ou ARN da sua função. Substitua sid pela Sid da declaração de política que você deseja remover.

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

Adicionar declarações de política que usam um curinga (*)

Execute o seguinte comando add-permission da AWS CLI para adicionar novas declarações de política consolidadas que incluam um caractere curinga (*). Substitua my-function pelo nome ou ARN da sua função. Substitua sid por uma nova Sid de qualquer valor. Substitua events.amazonaws.com pelo serviço da AWS ou pela entidade principal da conta que invoca sua função. Substitua arn:aws:events:region:account-id:rule/test-* por uma sequência do ARN (mais um curinga) compartilhada pelos recursos aos quais você está concedendo permissões.

$ 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-*'

Observação: Os acionadores com curingas na política baseada em recursos podem não estar visíveis no console do Lambda. Para mais informações, consulte Event-driven invocation (Invocação orientada por eventos).

Para mais informações, consulte Granting function access to AWS services (Conceder acesso a funções aos serviços da AWS).


Informações relacionadas

Elementos da política JSON do IAM: recurso

Controlar a saída do comando da AWS CLI (Guia do usuário da AWS CLI)

Por que minha notificação de evento do Amazon S3 não invoca minha função do Lambda?

Como faço para interromper e iniciar instâncias do Amazon EC2 em intervalos regulares usando o Lambda?

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos