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:
-
Das permissões do IAM exigidas para usar o CloudWatch Logs com o Lambda.
-
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
-
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" }
-
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.
-
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" } }
-
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" } }
-
-
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
-
Crie um novo grupo de logs
Delivery
ou use um grupo de logsDelivery
existente.aws logs create-log-group --log-group-name my-logs --log-group-class DELIVERY --region REGION_NAME
-
PutSubscriptionFilter
para configurar destinoaws 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:
-
Faça login no AWS Management Console e abra o console do Lambda.
-
Escolha o nome da função.
-
Escolha a guia Configuração.
-
Escolha a guia Ferramentas de monitoramento e operações.
-
Na seção "Configuração de registro em log", escolha Editar.
-
Na seção "Conteúdo de logs", selecione um formato de log.
-
Na seção "Destino de logs", conclua as seguintes etapas:
-
Selecione um serviço de destino.
-
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
. -
Escolha um bucket do Amazon S3 para ser o destino dos logs de função.
-
O grupo de logs
Delivery
do CloudWatch será exibido.
-
-
Escolha Salvar.
nota
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.