

# Envío de registros de funciones de Lambda a Amazon S3
<a name="logging-with-s3"></a>

Puede configurar su función de Lambda para enviar registros directamente a Amazon S3 mediante la consola de Lambda. Esta característica proporciona una solución rentable para el almacenamiento de registros a largo plazo y permite potentes opciones de análisis mediante servicios como Athena.

**nota**  
Puede configurar los registros de funciones de Lambda para que se envíen a Amazon S3 mediante la consola de Lambda, la AWS CLI, AWS CloudFormation y todos los AWS SDK.

## Precios
<a name="logging-s3-pricing"></a>

Para obtener información detallada sobre los precios, consulte [Precios de Amazon CloudWatch](https://aws.amazon.com/cloudwatch/pricing/#Vended_Logs).

## Permisos necesarios para el destino de registros de Amazon S3
<a name="logging-s3-permissions"></a>

Cuando utilice la consola de Lambda para configurar Amazon S3 como destino del registro de su función, necesitará lo siguiente:

1. Los [permisos de IAM necesarios](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-cloudwatchlogs.html#monitoring-cloudwatchlogs-prereqs) para usar Registros de CloudWatch con Lambda.

1. A [Configuración de un filtro de suscripciones de Registros de CloudWatch para enviar los registros de funciones de Lambda a Amazon S3](#using-cwl-subscription-filter-lambda-s3). Este filtro define qué eventos de registro se entregan a su bucket de Amazon S3.

## Configuración de un filtro de suscripciones de Registros de CloudWatch para enviar los registros de funciones de Lambda a Amazon S3
<a name="using-cwl-subscription-filter-lambda-s3"></a>

Para enviar registros desde Registros de CloudWatch a Amazon S3, debe crear un filtro de suscripción. Este filtro define qué eventos de registro se entregan a su bucket de Amazon S3. El bucket de Amazon S3 se debe usar en la misma región que el grupo de registro.

### Creación de un filtro de suscripción para Amazon S3
<a name="create-subscription-filter-s3"></a>

1. Cree un bucket de Amazon Simple Storage Service (Amazon S3). Recomendamos que utilice un bucket creado específicamente para Registros de CloudWatch. Sin embargo, si desea utilizar un bucket existente, vaya al paso 2.

   Ejecute el siguiente comando y sustituya la región del marcador por la región que desee utilizar:

   ```
   aws s3api create-bucket --bucket amzn-s3-demo-bucket2 --create-bucket-configuration LocationConstraint=region
   ```
**nota**  
`amzn-s3-demo-bucket2` es un ejemplo de nombre de bucket de Amazon S3. Está *reservado*. Para que este procedimiento funcione, debe reemplazarlo con el nombre único de su bucket de Amazon S3.

   A continuación, se muestra un ejemplo de la salida:

   ```
   {
       "Location": "/amzn-s3-demo-bucket2"
   }
   ```

1. Cree el rol de IAM que concede el permiso a Registros de CloudWatch para incluir datos en su bucket de Amazon S3. Esta política incluye una clave de contexto de condición global aws:SourceArn para ayudar a prevenir el confuso problema de seguridad adjunto. Para obtener más información, consulte [Confused deputy prevention](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Subscriptions-confused-deputy.html).

   1. Use un editor de texto para crear una política de confianza en un archivo `~/TrustPolicyForCWL.json`, como se indica a continuación:

      ```
      {
          "Statement": {
              "Effect": "Allow",
              "Principal": { "Service": "logs.amazonaws.com" },
              "Condition": { 
                  "StringLike": {
                      "aws:SourceArn": "arn:aws:logs:region:123456789012:*"
                  } 
               },
              "Action": "sts:AssumeRole"
          } 
      }
      ```

   1. Ejecute el comando create-role para crear el rol de IAM y especifique el archivo de política de confianza. Anote el valor de Role.Arn devuelto, ya que lo necesitará en un paso 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"
          }
      }
      ```

1. Cree una política de permisos para definir las acciones que Registros de CloudWatch puede realizar en su cuenta. En primer lugar, utilice un editor de texto para crear una política de permisos en un archivo `~/PermissionsForCWL.json`:

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

   Asocie la política de permisos con el rol mediante el siguiente comando `put-role-policy`:

   ```
   aws iam put-role-policy --role-name CWLtoS3Role --policy-name Permissions-Policy-For-S3 --policy-document file://~/PermissionsForCWL.json
   ```

1. Elija un grupo de registro `Delivery` ya existente o cree un grupo de registro `Delivery` nuevo.

   ```
   aws logs create-log-group --log-group-name my-logs --log-group-class DELIVERY --region REGION_NAME
   ```

1. `PutSubscriptionFilter` para configurar el 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
   ```

## Envío de registros de funciones de Lambda a Amazon S3
<a name="logging-s3-setup"></a>

En la consola de Lambda, puede enviar los registros de funciones directamente a Amazon S3 después de crear una nueva función. Para hacerlo, siga estos pasos:

1. Inicie sesión en la consola de administración de AWS y abra la consola de Lambda.

1. Elija el nombre de su función.

1. Elija la pestaña **Configuración**.

1. Seleccione la pestaña **Herramientas de supervisión y operaciones**.

1. En la sección “Configuración de registro”, elija **Editar**.

1. En la sección “Contenido del registro”, seleccione un formato de registro.

1. En la sección “Destino de registro”, siga los pasos que se describen a continuación:

   1. Seleccione un servicio de destino.

   1. Elija **Crear un nuevo grupo de registro** o use un **Grupo de registro existente**.
**nota**  
Si elige un grupo de registro existente para un destino de Amazon S3, asegúrese de que el grupo de registro que elija sea de tipo `Delivery`.

   1. Elija un bucket de Amazon S3 como destino para los registros de sus funciones.

   1. Aparecerá el grupo de registro `Delivery` de CloudWatch.

1. Seleccione **Save**.

**nota**  
Si el rol de IAM proporcionado en la consola no tiene los permisos necesarios, se producirá un error en la configuración del destino. Para solucionarlo, consulte [Permisos necesarios para el destino de registro de Amazon S3](#logging-s3-permissions).

## Registro entre cuentas
<a name="cross-account-logging-s3"></a>

Puede configurar Lambda para enviar registros a un bucket de Amazon S3 en una cuenta de AWS diferente. Esto requiere configurar un destino y establecer los permisos adecuados en ambas cuentas.

Para obtener instrucciones detalladas sobre cómo configurar el registro entre cuentas, incluidos los roles y las políticas de IAM que necesita, consulte [Setting up a new cross-account subscription](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CrossAccountSubscriptions.html) en la documentación de Registros de CloudWatch.