Enviar logs de função do Lambda para o Amazon S3 - AWS Lambda

Enviar logs de função do Lambda para o Amazon S3

Você pode configurar a função do Lambda para enviar logs diretamente para o Amazon S3 usando o console do Lambda. Esse atributo fornece uma solução econômica para armazenamento de logs de longo prazo e habilita opções de análise avançadas usando serviços como o Athena.

nota

Você pode configurar os logs de função do Lambda para serem enviados ao Amazon S3 usando o console do Lambda, a AWS CLI, o AWS CloudFormation e todos os SDKs da AWS.

Preços

Para obter detalhes sobre os preços, consulte Definição de preço do Amazon CloudWatch.

Permissões exigidas para o destino de log do Amazon S3

Ao usar o console do Lambda para configurar o Amazon S3 como o destino de log da função, você precisa:

  1. Das permissões do IAM exigidas para usar o CloudWatch Logs com o Lambda.

  2. Para Configurar um filtro de assinaturas do CloudWatch Logs para enviar os logs de função do Lambda para o Amazon S3. Esse filtro define quais eventos de log são entregues ao bucket to Amazon S3.

Configurar um filtro de assinaturas do CloudWatch Logs para enviar os logs de função do Lambda para o Amazon S3

Para enviar logs do CloudWatch Logs para o Amazon S3, você precisa criar um filtro de assinatura. Esse filtro define quais eventos de log são entregues ao bucket to Amazon S3. O bucket to Amazon S3 deve ser usado na mesma região do grupo de logs.

Para criar um filtro de assinatura para o Amazon S3

  1. Crie um bucket do Amazon Simple Storage Service (Amazon S3). Recomendamos utilizar um bucket criado especificamente para o CloudWatch Logs. No entanto, se você desejar usar um bucket existente, vá para a etapa 2.

    Execute o comando a seguir, substituindo o espaço reservado Region (Região) pela região que você deseja usar:

    aws s3api create-bucket --bucket amzn-s3-demo-bucket2 --create-bucket-configuration LocationConstraint=region
    nota

    amzn-s3-demo-bucket2 é um exemplo de nome de bucket do Amazon S3. Ele é reservado. Para esse procedimento funcionar, é necessário substituí-lo pelo nome exclusivo do bucket do Amazon S3.

    A seguir está um exemplo de saída:

    { "Location": "/amzn-s3-demo-bucket2" }
  2. Crie o perfil do IAM que concede ao CloudWatch Logs permissão para colocar dados no bucket do Amazon S3. Essa política inclui uma chave de contexto de condição global aws:SourceArn para ajudar a evitar o problema de segurança "confused deputy". Para obter mais informações sobre a prevenção de confused-deputy.

    1. Use um editor de texto para criar uma política de confiança em um arquivo ~/TrustPolicyForCWL.json, da seguinte maneira:

      { "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:logs:region:123456789012:*" } }, "Action": "sts:AssumeRole" } }
    2. Use o comando create-role para criar a função do IAM especificando o arquivo de política de confiança. Observe o valor de Role.Arn retornado, pois você precisará dele em uma etapa posterior:

      aws iam create-role \ --role-name CWLtoS3Role \ --assume-role-policy-document file://~/TrustPolicyForCWL.json { "Role": { "AssumeRolePolicyDocument": { "Statement": { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:logs:region:123456789012:*" } } } }, "RoleId": "AAOIIAH450GAB4HC5F431", "CreateDate": "2015-05-29T13:46:29.431Z", "RoleName": "CWLtoS3Role", "Path": "/", "Arn": "arn:aws:iam::123456789012:role/CWLtoS3Role" } }
  3. Crie uma política de permissões para definir quais ações o CloudWatch Logs poderá executar em sua conta. Primeiro, use um editor de texto para criar uma política de permissões em um arquivo ~/PermissionsForCWL.json:

    { "Statement": [ { "Effect": "Allow", "Action": ["s3:PutObject"], "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket2/*"] } ] }

    Associe a política de permissões ao perfil usando o comando put-role-policy:

    aws iam put-role-policy --role-name CWLtoS3Role --policy-name Permissions-Policy-For-S3 --policy-document file://~/PermissionsForCWL.json
  4. Crie um novo grupo de logs Delivery ou use um grupo de logs Delivery existente.

    aws logs create-log-group --log-group-name my-logs --log-group-class DELIVERY --region REGION_NAME
  5. PutSubscriptionFilter para configurar destino

    aws logs put-subscription-filter --log-group-name my-logs --filter-name my-lambda-delivery --filter-pattern "" --destination-arn arn:aws:s3:::amzn-s3-demo-bucket2 --role-arn arn:aws:iam::123456789012:role/CWLtoS3Role --region REGION_NAME

Enviar logs de função do Lambda para o Amazon S3

No console do Lambda, você pode enviar os logs de função diretamente para o Amazon S3 após criar uma nova função. Para fazer isso, conclua estas etapas:

  1. Faça login no AWS Management Console e abra o console do Lambda.

  2. Escolha o nome da função.

  3. Escolha a guia Configuração.

  4. Escolha a guia Ferramentas de monitoramento e operações.

  5. Na seção "Configuração de registro em log", escolha Editar.

  6. Na seção "Conteúdo de logs", selecione um formato de log.

  7. Na seção "Destino de logs", conclua as seguintes etapas:

    1. Selecione um serviço de destino.

    2. Escolha Criar um novo grupo de logs ou use um Grupo de logs existente.

      nota

      Se for escolher um grupo de logs existente para um destino do Amazon S3, confirme se o grupo de logs escolhido é do tipo Delivery.

    3. Escolha um bucket do Amazon S3 para ser o destino dos logs de função.

    4. O grupo de logs Delivery do CloudWatch será exibido.

  8. Escolha Salvar.

nota

Se o perfil do IAM fornecido no console não tiver as permissões exigidas, a configuração de destino falhará. Para corrigir isso, consulte .

Registro em log entre contas

Você pode configurar o Lambda para enviar logs para um bucket do Amazon S3 em outra conta da AWS. Isso requer a configuração de um destino e de permissões apropriadas em ambas as contas.

Para obter instruções detalhadas sobre a configuração do registro em log entre contas, incluindo os perfis do IAM e as políticas necessárias, consulte Setting up a new cross-account subscription na documentação do CloudWatch Logs.