

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# ¿Qué es el AWS Serverless Application Model (AWS SAM)?
<a name="what-is-sam"></a>

AWS Serverless Application Model (AWS SAM) es un marco de código abierto para crear aplicaciones sin servidor utilizando la infraestructura como código (IaC). Con AWS SAM su sintaxis abreviada, los desarrolladores declaran los recursos y los [CloudFormation](https://aws.amazon.com/cloudformation)recursos especializados sin servidor que se transforman en infraestructura durante la implementación. Al trabajar con AWS SAM, interactuará con:

1. AWS SAM CLI- Una herramienta de línea de comandos que le ayuda a desarrollar, probar e implementar localmente sus aplicaciones sin servidor.

1. AWS SAM Plantilla: una extensión CloudFormation que proporciona una sintaxis simplificada para definir los recursos sin servidor.

Al utilizar el **sam init** comando, se crea un directorio de proyectos, al que llamaremos AWS SAM proyecto, que normalmente incluye la AWS SAM plantilla, el código de la aplicación y otros archivos de configuración.

## ¿Cuándo se debe usar AWS SAM
<a name="when-to-use-sam"></a>

AWS SAM es una solución de iAC ideal para escenarios en los que desee un desarrollo simplificado sin servidor con toda la potencia de. CloudFormation Por ejemplo, puede utilizar SAM para los siguientes procesos:
+ **Aplicaciones sin servidor:** puede usar SAM para definir rápidamente AWS Lambda funciones, funciones duraderas de Lambda, Amazon API APIs Gateway, tablas de Amazon DynamoDB y otros recursos sin servidor con un código mínimo.
+ **CloudFormation mejora:** puede combinar SAM con las CloudFormation plantillas existentes para añadir componentes sin servidor a la infraestructura tradicional. Los recursos de SAM funcionan junto con CloudFormation los recursos estándar en la misma plantilla.
+ **Desarrollo y pruebas locales:** puede utilizar la CLI de SAM para probar las funciones de Lambda a nivel local, así como simular los puntos de conexión de API Gateway y depurar aplicaciones sin servidor en su máquina de desarrollo antes de implementarlas en AWS.
+ **CI/CD para entornos sin servidor:** puede crear canalizaciones de implementación mediante plantillas SAM que generan automáticamente la CloudFormation infraestructura necesaria para los entornos de preparación y producción.
+ **Migración desde recursos creados en la consola:** puede convertir las funciones de Lambda y los recursos de API Gateway creados en la consola de administración de AWS en infraestructura como código mediante plantillas de SAM.

**Comparación con otras herramientas de IaC AWS SAM **
+ Utilice SAM en lugar de simplificar las definiciones de recursos sin servidor y, CloudFormation al mismo tiempo, mantener la compatibilidad de las plantillas.
+ Utilice SAM en lugar de AWS CDK utilizar un enfoque declarativo para describir su infraestructura en lugar de uno programático.
+ Combine SAM con las funciones AWS CDK de pruebas locales de la CLI de SAM para mejorar sus aplicaciones de CDK.

## Características principales de
<a name="what-is-sam-feature"></a>

AWS SAM ofrece una variedad de beneficios que mejoran la experiencia del desarrollador al permitirle: 

**Define el código de infraestructura de tu aplicación rápidamente, utilizando menos código**  
Cree AWS SAM plantillas para definir el código de infraestructura de aplicaciones sin servidor. Implemente sus plantillas directamente CloudFormation para aprovisionar sus recursos.

**Administra las aplicaciones sin servidor durante todo su ciclo de vida de desarrollo**  
Usa la CLI de AWS SAM para administrar tu aplicación sin servidor durante las fases de autoría, creación, implementación, prueba y supervisión de su ciclo de vida de desarrollo. Para obtener más información, consulte [AWS SAM CLI](using-sam-cli.md).

**Aprovisione rápidamente los permisos entre los recursos con AWS SAM conectores**  
Usa AWS SAM conectores en tus AWS SAM plantillas para definir los permisos entre tus AWS recursos. AWS SAM transforma tu código en los permisos de IAM necesarios para facilitar tu intención. Para obtener más información, consulte [Administrar los permisos de recursos con AWS SAM conectores](managing-permissions-connectors.md).

**Sincroniza de forma continua los cambios locales en la nube a medida que ve desarrollando contenido**  
Utilice el AWS SAMCLI **sam sync** comando para sincronizar automáticamente los cambios locales con la nube, lo que agiliza los flujos de trabajo de desarrollo y pruebas en la nube. Para obtener más información, consulta [Introducción al uso sam sync de la sincronización con Nube de AWS](using-sam-cli-sync.md).

**Gestione sus aplicaciones de Terraform sin servidor**  
Use la CLI de AWS SAM para realizar la depuración y las pruebas locales de las funciones y capas de Lambda. Para obtener más información, consulta [Compatibilidad de la CLI de AWS SAM con Terraform](terraform-support.md).

## Información relacionada
<a name="w2aab5c15"></a>
+ Para obtener información sobre cómo AWS SAM funciona, consulte[¿Cómo funciona AWS SAM](what-is-sam-overview.md).
+ Para empezar a usarlo AWS SAM, consulte[Empezar con AWS SAM](serverless-getting-started.md). 
+ Para obtener información general sobre cómo se puede utilizar AWS SAM para crear una aplicación sin servidor, consulte[Cómo usar AWS SAM](chapter-using-sam.md#chapter-using-sam.title).

# ¿Cómo funciona AWS SAM
<a name="what-is-sam-overview"></a>

Cuando trabaje AWS SAM para crear su aplicación sin servidor, interactuará con los siguientes componentes:

1. **[AWS SAM plantilla](sam-specification.md)**— Un archivo importante que define sus AWS recursos. Esta plantilla incluye la **especificación de la AWS SAM plantilla**: el marco de código abierto que viene con una sintaxis abreviada simplificada que se utiliza para definir las funciones, los eventos APIs, las configuraciones y los permisos de una aplicación sin servidor. Este archivo se encuentra en el AWS SAM proyecto, que es la carpeta de la aplicación que se crea al ejecutar el comando. **sam init**

1. **[AWS SAM CLI](using-sam-cli.md)**— Una herramienta de línea de comandos que puede usar con su AWS SAM proyecto y que admite integraciones de terceros para crear y ejecutar sus aplicaciones sin servidor. AWS SAMCLIEs la herramienta que utilizas para ejecutar comandos en tu AWS SAM proyecto y, finalmente, convertirlo en tu aplicación sin servidor.

Para expresar los recursos, las asignaciones de fuentes de eventos y otras propiedades que definen una aplicación sin servidor, defina los recursos y desarrolle la aplicación en la AWS SAM plantilla y en otros archivos del proyecto. AWS SAM Los usa AWS SAMCLI para ejecutar los comandos en su AWS SAM proyecto, que es la forma de inicializar, compilar, probar e implementar su aplicación sin servidor.

**¿La primera vez que utiliza la tecnología sin servidor?**  
También le recomendamos que revise [Conceptos sin servidor para AWS Serverless Application Model](what-is-concepts.md).

## ¿Cuál es la especificación de la AWS SAM plantilla?
<a name="what-is-sam-template-spec"></a>

La especificación AWS SAM de la plantilla es un marco de código abierto que puede utilizar para definir y administrar el código de infraestructura de aplicaciones sin servidor. La especificación de la AWS SAM plantilla es:
+ **Basado en AWS CloudFormation**: la CloudFormation sintaxis se utiliza directamente en la AWS SAM plantilla y se aprovecha su amplia compatibilidad con las configuraciones de recursos y propiedades. Si ya lo conoce CloudFormation, no necesita aprender un nuevo servicio para administrar el código de infraestructura de aplicaciones.
+ **Una extensión de CloudFormation**: AWS SAM ofrece su propia sintaxis única que se centra específicamente en acelerar el desarrollo sin servidores. Puede usar la AWS SAM sintaxis CloudFormation y la sintaxis en la misma plantilla.
+ **Una sintaxis abstracta y abreviada**: con la sintaxis de AWS SAM , puedes definir su infraestructura rápidamente, en menos líneas de código y con una menor probabilidad de errores. Su sintaxis está especialmente diseñada para eliminar la complejidad que implica definir la infraestructura de aplicaciones sin servidor.
+ **Transformacional**: AWS SAM realiza la compleja tarea de transformar la plantilla en el código necesario para aprovisionar la infraestructura. CloudFormation

## ¿Qué son el AWS SAM proyecto y la AWS SAM plantilla?
<a name="what-is-sam-template"></a>

El AWS SAM proyecto incluye la AWS SAM plantilla que contiene la especificación AWS SAM de la plantilla. Esta especificación es el marco de código abierto que se utiliza para definir la infraestructura de aplicaciones sin servidor AWS, con algunos componentes adicionales que facilitan el trabajo con ellos. En este sentido, AWS SAM las plantillas son una extensión de CloudFormation las plantillas.

A continuación se muestra un ejemplo de una aplicación sin servidor básica. Esta aplicación procesa las solicitudes para obtener todos los elementos de una base de datos mediante una solicitud HTTP. Consta de los elementos siguientes:

1. Función que contienes la lógica necesaria para procesar la solicitud.

1. Una API HTTP que sirve de comunicación entre el cliente (solicitante) y la aplicación.

1. Una base de datos para almacenar elementos.

1. Permisos para que la aplicación se ejecuta de forma segura.

![\[Arquitectura de aplicación de una aplicación sencilla sin servidor.\]](http://docs.aws.amazon.com/es_es/serverless-application-model/latest/developerguide/images/what-is-sam-06.png)


El código de infraestructura de esta aplicación se puede definir en la siguiente plantilla de AWS SAM :

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
Resources:
  getAllItemsFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: src/get-all-items.getAllItemsHandler
      Runtime: nodejs20.x
      Events:
        Api:
          Type: HttpApi
          Properties:
            Path: /
            Method: GET
    Connectors:
      MyConn:
        Properties:
          Destination:
            Id: SampleTable
          Permissions:
            - Read
  SampleTable:
    Type: AWS::Serverless::SimpleTable
```

En 23 líneas de código, se define la siguiente infraestructura:
+ Una función que utiliza el AWS Lambda servicio.
+ Una API HTTP que utiliza el servicio Amazon API Gateway.
+ Una base de datos que utiliza el servicio Amazon DynamoDB.
+ Los permisos AWS Identity and Access Management (IAM) necesarios para que estos servicios interactúen entre sí.

Para aprovisionar esta infraestructura, la plantilla se implementa en CloudFormation. Durante la implementación, AWS SAM transforma las 23 líneas de código en la CloudFormation sintaxis necesaria para generar estos recursos. AWS¡La CloudFormation plantilla transformada contiene más de 200 líneas de código\$1

### CloudFormation Plantilla transformada
<a name="what-is-sam-template-example-cfn"></a>

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Resources": {
    "getAllItemsFunction": {
      "Type": "AWS::Lambda::Function",
      "Metadata": {
        "SamResourceId": "getAllItemsFunction"
      },
      "Properties": {
        "Code": {
          "S3Bucket": "amzn-s3-demo-source-bucket-1a4x26zbcdkqr",
          "S3Key": "what-is-app/a6f856abf1b2c4f7488c09b367540b5b"
        },
        "Handler": "src/get-all-items.getAllItemsHandler",
        "Role": {
          "Fn::GetAtt": [
            "getAllItemsFunctionRole",
            "Arn"
          ]
        },
        "Runtime": "nodejs12.x",
        "Tags": [
          {
            "Key": "lambda:createdBy",
            "Value": "SAM"
          }
        ]
      }
    },
    "getAllItemsFunctionRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",		 	 	 
          "Statement": [
            {
              "Action": [
                "sts:AssumeRole"
              ],
              "Effect": "Allow",
              "Principal": {
                "Service": [
                  "lambda.amazonaws.com"
                ]
              }
            }
          ]
        },
        "ManagedPolicyArns": [
          "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
        ],
        "Tags": [
          {
            "Key": "lambda:createdBy",
            "Value": "SAM"
          }
        ]
      }
    },
    "getAllItemsFunctionApiPermission": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Ref": "getAllItemsFunction"
        },
        "Principal": "apigateway.amazonaws.com",
        "SourceArn": {
          "Fn::Sub": [
            "arn:${AWS::Partition}:execute-api:${AWS::Region}:${AWS::AccountId}:${__ApiId__}/${__Stage__}/GET/",
            {
              "__ApiId__": {
                "Ref": "ServerlessHttpApi"
              },
              "__Stage__": "*"
            }
          ]
        }
      }
    },
    "ServerlessHttpApi": {
      "Type": "AWS::ApiGatewayV2::Api",
      "Properties": {
        "Body": {
          "info": {
            "version": "1.0",
            "title": {
              "Ref": "AWS::StackName"
            }
          },
          "paths": {
            "/": {
              "get": {
                "x-amazon-apigateway-integration": {
                  "httpMethod": "POST",
                  "type": "aws_proxy",
                  "uri": {
                    "Fn::Sub": "arn:${AWS::Partition}:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${getAllItemsFunction.Arn}/invocations"
                  },
                  "payloadFormatVersion": "2.0"
                },
                "responses": {}
              }
            }
          },
          "openapi": "3.0.1",
          "tags": [
            {
              "name": "httpapi:createdBy",
              "x-amazon-apigateway-tag-value": "SAM"
            }
          ]
        }
      }
    },
    "ServerlessHttpApiApiGatewayDefaultStage": {
      "Type": "AWS::ApiGatewayV2::Stage",
      "Properties": {
        "ApiId": {
          "Ref": "ServerlessHttpApi"
        },
        "StageName": "$default",
        "Tags": {
          "httpapi:createdBy": "SAM"
        },
        "AutoDeploy": true
      }
    },
    "SampleTable": {
      "Type": "AWS::DynamoDB::Table",
      "Metadata": {
        "SamResourceId": "SampleTable"
      },
      "Properties": {
        "AttributeDefinitions": [
          {
            "AttributeName": "id",
            "AttributeType": "S"
          }
        ],
        "KeySchema": [
          {
            "AttributeName": "id",
            "KeyType": "HASH"
          }
        ],
        "BillingMode": "PAY_PER_REQUEST"
      }
    },
    "getAllItemsFunctionMyConnPolicy": {
      "Type": "AWS::IAM::ManagedPolicy",
      "Metadata": {
        "aws:sam:connectors": {
          "getAllItemsFunctionMyConn": {
            "Source": {
              "Type": "AWS::Serverless::Function"
            },
            "Destination": {
              "Type": "AWS::Serverless::SimpleTable"
            }
          }
        }
      },
      "Properties": {
        "PolicyDocument": {
          "Version": "2012-10-17",		 	 	 
          "Statement": [
            {
              "Effect": "Allow",
              "Action": [
                "dynamodb:GetItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:BatchGetItem",
                "dynamodb:ConditionCheckItem",
                "dynamodb:PartiQLSelect"
              ],
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "SampleTable",
                    "Arn"
                  ]
                },
                {
                  "Fn::Sub": [
                    "${DestinationArn}/index/*",
                    {
                      "DestinationArn": {
                        "Fn::GetAtt": [
                          "SampleTable",
                          "Arn"
                        ]
                      }
                    }
                  ]
                }
              ]
            }
          ]
        },
        "Roles": [
          {
            "Ref": "getAllItemsFunctionRole"
          }
        ]
      }
    }
  }
}
```

Al AWS SAM utilizarla, se definen 23 líneas de código de infraestructura. AWS SAM transforma el código en las más de 200 líneas de CloudFormation código necesarias para aprovisionar la aplicación.

## ¿Qué es el? AWS SAMCLI
<a name="what-is-sam-cli"></a>

 AWS SAMCLIEs una herramienta de línea de comandos que puede usar con AWS SAM plantillas e integraciones de terceros compatibles para crear y ejecutar sus aplicaciones sin servidor. Use la CLI de AWS SAM para:
+ Inicializar rápidamente un nuevo proyecto de aplicación.
+ Crear tu aplicación para su implementación.
+ Realizar pruebas y depuraciones locales.
+ Implementa la aplicación.
+ Configure las canalizaciones CI/CD de implementación.
+ Supervisar y solucionar los problemas de tu aplicación en la nube.
+ Sincronizar los cambios locales con la nube a medida que ve desarrollándose.
+ Y mucho más.

Se AWS SAMCLI utiliza mejor cuando se utiliza con CloudFormation plantillas AWS SAM y. También funciona con productos de terceros, como Terraform.

### Inicio de un nuevo proyecto
<a name="what-is-sam-cli-init"></a>

Selecciona una de las plantillas iniciales o elige una ubicación de plantilla personalizada para comenzar un nuevo proyecto.

A continuación se muestra el comando **sam init** para iniciar un nuevo proyecto de aplicación. Para empezar, seleccionamos el proyecto **Hello World Example**. La CLI de AWS SAM descarga una plantilla inicial y crea la estructura de directorios de carpetas del proyecto. 

![\[Se utiliza sam init para iniciar un nuevo proyecto de aplicación con la CLI de AWS SAM.\]](http://docs.aws.amazon.com/es_es/serverless-application-model/latest/developerguide/images/what-is-sam-01.gif)


Para obtener más información, consulta [Crea tu aplicación en AWS SAM](using-sam-cli-init.md).

### Compilación de tu aplicación para implementación
<a name="what-is-sam-cli-build"></a>

Empaquete las dependencias de sus funciones y organice el código del proyecto y la estructura de carpetas para prepararlos para la implementación.

En este caso, utilizamos el comando **sam build** para preparar nuestra aplicación para su implementación. La CLI de AWS SAM crea un directorio `.aws-sam` y organiza allí las dependencias y los archivos de nuestras aplicaciones para su implementación.

![\[Se utiliza sam build para preparar una aplicación para su implementación.\]](http://docs.aws.amazon.com/es_es/serverless-application-model/latest/developerguide/images/what-is-sam-02.gif)


Para obtener más información, consulta [Creación de su aplicación](serverless-building.md).

### Realización de testeo y depuraciones locales
<a name="what-is-sam-cli-local"></a>

En su máquina local, simule eventos, pruebe APIs, invoque funciones y mucho más para depurar y probar su aplicación.

En este caso, utilizamos el comando **sam local invoke** para invocar `HelloWorldFunction` de forma local. Para ello, la CLI de AWS SAM crea un contenedor local, crea nuestra función, la invoca y genera los resultados. Puede utilizar una aplicación como Docker para ejecutar contenedores en su máquina.

![\[Uso del AWS SAMCLI sam local invoke comando para invocar una función de forma local.\]](http://docs.aws.amazon.com/es_es/serverless-application-model/latest/developerguide/images/what-is-sam-04.gif)


Para obtener más información, consulta[Prueba de la aplicación](serverless-test-and-debug.md) y [Depuración de la aplicación](debug-application.md).

### Implementar la aplicación
<a name="what-is-sam-cli-deploy"></a>

Configure los ajustes de despliegue de su aplicación e impleméntela AWS en la nube para aprovisionar sus recursos.

Aquí, utilizamos el comando **sam deploy --guided** para implementar nuestra aplicación a través de un flujo interactivo. Esto nos AWS SAMCLI guía a través de la configuración de los ajustes de despliegue de nuestra aplicación CloudFormation, transforma nuestra plantilla en ella y la implementa CloudFormation para crear nuestros recursos.

![\[Uso del AWS SAMCLI sam deploy comando para implementar una aplicación en la AWS nube.\]](http://docs.aws.amazon.com/es_es/serverless-application-model/latest/developerguide/images/what-is-sam-03.gif)


Para obtener más información, consulte [Implementación de la aplicación y los recursos](serverless-deploying.md).

### Configure las canalizaciones CI/CD de implementación
<a name="what-is-sam-cli-cicd"></a>

Cree canalizaciones seguras de *integración y entrega continuas (CI/CD)* mediante un sistema compatible. CI/CD 

En este caso, utilizamos el comando **sam pipeline init --bootstrap** para configurar una canalización de implementación de CI/CD para nuestra aplicación. Esto nos AWS SAMCLI guía a través de nuestras opciones y genera AWS los recursos y el archivo de configuración para usarlos con nuestro sistema de CI/CD.

![\[Uso del AWS SAMCLI sam pipeline init --bootstrap comando para configurar una CI/CD canalización con nuestro sistema preferido CI/CD .\]](http://docs.aws.amazon.com/es_es/serverless-application-model/latest/developerguide/images/what-is-sam-07.gif)


Para obtener más información, consulta [Implemente con CI/CD sistemas y canalizaciones](deploying-options.md#serverless-deploying-ci-cd).

### Supervisión y solución de los problemas de la aplicación en la nube
<a name="what-is-sam-cli-monitor"></a>

Consulta información importante sobre los recursos desplegados, recopile registros y utiliza herramientas de supervisión integradas, como AWS X-Ray.

En este caso, utilizamos el comando **sam list** para ver los recursos desplegados. Obtenemos el punto de conexión de la API y lo invocamos, lo que activa nuestra función. Luego, usamos **sam logs** para ver los registros de la función.

![\[Uso del AWS SAMCLI sam list comando para obtener el punto final de nuestra API. Luego, usamos sam logs para ver los registros de la función.\]](http://docs.aws.amazon.com/es_es/serverless-application-model/latest/developerguide/images/what-is-sam-08.gif)


Para obtener más información, consulta [Supervisión de la aplicación](serverless-monitoring.md).

### Sincronización de los cambios locales con la nube a medida que va desarrollando
<a name="what-is-sam-cli-sync"></a>

A medida que va desarrollando en tu máquina local, sincronice automáticamente los cambios con la nube. Consulta rápidamente los cambios y realiza pruebas y validaciones en la nube.

En este caso, utilizaremos el comando **sam sync --watch** para que la CLI de AWS SAM vigile los cambios locales. Modificaremos el código `HelloWorldFunction` y, de forma automática, la CLI de AWS SAM detectará el cambio e implementará las actualizaciones en la nube. 

![\[Uso del AWS SAMCLI sam sync comando para sincronizar los cambios locales con la AWS nube.\]](http://docs.aws.amazon.com/es_es/serverless-application-model/latest/developerguide/images/what-is-sam-05.gif)


### Prueba de los recursos compatibles en la nube
<a name="what-is-sam-cli-remote-invoke"></a>

Invoca y transfiere eventos a los recursos compatibles en la nube.

En este caso, utilizamos el comando **sam remote invoke** para probar una función de Lambda implementada en la nube. Invocamos la función de Lambda y recibimos sus registros y su respuesta. Con la función de Lambda configurada para transmitir las respuestas, la CLI de AWS SAM transmite su respuesta en tiempo real.

![\[Uso del AWS SAMCLI sam remote invoke comando para probar nuestra función implementada en la AWS nube.\]](http://docs.aws.amazon.com/es_es/serverless-application-model/latest/developerguide/images/what-is-sam-09.gif)


## Más información
<a name="what-is-sam-learn"></a>

Para seguir informándote AWS SAM, consulta los siguientes recursos:
+ **[El AWS SAM taller completo](https://s12d.com/sam-ws-en-intro)**: un taller diseñado para enseñarle muchas de las principales funciones que AWS SAM ofrece.
+ **[Sesiones con SAM](https://www.youtube.com/playlist?list=PLJo-rJlep0ED198FJnTzhIB5Aut_1vDAd)**: serie de vídeos sobre su uso AWS SAM creada por nuestro equipo de AWS Serverless Developer Advocate.
+ **[Serverless Land](https://serverlessland.com/)**: sitio que reúne la información más reciente, blogs, vídeos, códigos y recursos de aprendizaje sobre sistemas sin servidor. AWS 

## Siguientes pasos
<a name="what-is-sam-next"></a>

Si es la primera vez que lo usa AWS SAM, consulte. [Empezar con AWS SAM](serverless-getting-started.md)

# Conceptos sin servidor para AWS Serverless Application Model
<a name="what-is-concepts"></a>

Obtenga información sobre los conceptos básicos de la tecnología sin servidor antes de usar AWS Serverless Application Model ()AWS SAM.

## Conceptos sobre sistemas sin servidor
<a name="what-is-concepts-terms"></a>

**Arquitectura basada en eventos**  <a name="what-is-concepts-terms-eda"></a>
Una aplicación sin servidor consta de AWS servicios individuales, como los de computación y Amazon DynamoDB AWS Lambda para la administración de bases de datos, cada uno de los cuales desempeña una función especializada. A continuación, estos servicios se integran de forma flexible entre sí mediante una arquitectura basada en eventos. Para obtener más información sobre la arquitectura basada en eventos, consulta [¿Qué es una arquitectura basada en eventos?](https://aws.amazon.com/event-driven-architecture/) 

**Infraestructura como código (IaC)**  <a name="what-is-concepts-terms-iac"></a>
La infraestructura como código (IaC) es una forma de tratar la infraestructura de la misma manera que los desarrolladores tratan el código, aplicando el mismo rigor que el desarrollo del código de aplicaciones al aprovisionamiento de la infraestructura. Usted define su infraestructura en un archivo de plantilla, la implementa y AWS crea los recursos automáticamente. AWS Con IaC, usted define en el código lo que quiere AWS aprovisionar. Para ver una comparación de las herramientas de IaC disponibles AWS, consulte. [Infraestructura como código (IaC)](what-is-iac.md)

**Tecnologías sin servidor**  <a name="what-is-concepts-terms-serverless"></a>
Con las tecnologías AWS sin servidor, puede crear y ejecutar aplicaciones sin tener que administrar sus propios servidores. Toda la administración de los servidores se lleva a cabo de forma automática AWS, lo que proporciona numerosas ventajas, como el escalado automático y la alta disponibilidad integrada, lo que le permite llevar su idea a la producción rápidamente. Al utilizar tecnologías sin servidor, puede centrarse en el núcleo de su producto sin tener que preocuparse por la administración y el funcionamiento de los servidores. Para obtener más información sobre sin servidor, consulta lo siguiente:  
+ [Sin servidor activado AWS](https://aws.amazon.com/serverless/)
+ [Guía para desarrolladores sin servidor](https://docs.aws.amazon.com/serverless/latest/devguide/serverless-preface.html): proporciona una visión general conceptual del desarrollo sin servidor en AWS Cloud.
*Para obtener una introducción básica a los principales servicios AWS sin servidor, consulte [Serverless 101: Comprender los servicios sin servidor en Serverless Land](https://serverlessland.com/learn/serverless-101).*

**Aplicación sin servidor**  <a name="what-is-concepts-terms-serverless"></a>
Cuando los usa AWS SAM, administra los recursos relacionados en una aplicación, que consiste en su proyecto y su AWS SAM plantilla. Todos los recursos de la aplicación están definidos o se hace referencia a ellos en la AWS SAM plantilla. Cuando AWS SAM procesa la plantilla, crea CloudFormation recursos. En CloudFormation, los recursos se administran en una sola unidad denominada pila, y todos los recursos de una pila se definen mediante la CloudFormation plantilla de la pila.

# Infraestructura como código (IaC)
<a name="what-is-iac"></a>

Con la infraestructura como código (IaC), puede automatizar la implementación y la administración de sus AWS recursos, incluidas las aplicaciones sin servidor. La IaC permite definir la infraestructura mediante código, lo que facilita la creación de versiones, el uso compartido y la replicación de las implementaciones. Este enfoque ayuda a realizar lo siguiente:
+ Acelerar el ciclo de desarrollo
+ Facilitar la administración de la configuración
+ Mejorar la fiabilidad y coherencia de las implementaciones

## Herramientas de IaC para aplicaciones sin servidor AWS
<a name="iac-tools-aws"></a>

AWS ofrece varias herramientas de IaC para ayudarlo a crear, implementar y administrar sus recursos en la nube. En esta sección se explica cómo AWS SAM se integra en este ecosistema y cómo funciona con otras herramientas de AWS IaC.

**AWS CloudFormation**  
Con ellas [CloudFormation](https://aws.amazon.com/cloudformation/), puedes modelar y aprovisionar toda tu AWS infraestructura con plantillas YAML o JSON. CloudFormation gestiona la creación, actualización y eliminación de recursos de forma automática. Al implementar AWS SAM aplicaciones, CloudFormation procesa las plantillas transformadas para crear y administrar sus recursos.

**AWS Serverless Application Model (AWS SAM)**  
AWS SAM le ayuda a crear aplicaciones sin servidor con una sintaxis simplificada para definir los recursos sin servidor. Puede usar AWS SAM plantillas para aprovisionar funciones, APIs bases de datos y fuentes de eventos de Lambda mediante una sintaxis YAML concisa. AWS SAM transforma estas plantillas en CloudFormation plantillas durante la implementación.  
Si bien AWS SAM se especializa en aplicaciones sin servidor, puede usar cualquier tipo CloudFormation de recurso en sus AWS SAM plantillas. Esto confiere flexibilidad para incluir recursos sin servidor cuando sea necesario.

**AWS Kit Cloud Development (AWS CDK)**  
Con [AWS CDK](https://aws.amazon.com/cdk/), puede definir su infraestructura sin servidor utilizando lenguajes de programación conocidos como Python TypeScript, Java, C\$1/.Net o Go. Puede utilizar estructuras de programación, como bucles y condiciones, para definir su infraestructura y generar plantillas para su implementación. AWS CDK CloudFormation Puede utilizarlas para probar y AWS SAMCLI depurar localmente las aplicaciones creadas con ellas. AWS CDK Para obtener más información, consulte [Probar aplicaciones de CDK de manera local](https://docs.aws.amazon.com/cdk/v2/guide/testing-locally.html).

## Comparación de herramientas de IaC para aplicaciones sin servidor
<a name="comparing-iac-tools"></a>

Para elegir una herramienta de IaC para sus aplicaciones sin servidor, es importante tener presente las preferencias de su equipo, los requisitos del proyecto y los flujos de trabajo existentes. En la siguiente tabla se comparan las características clave de las herramientas de AWS IaC para el desarrollo sin servidor:


| **Herramienta** | **Uso principal** | **Lo mejor para** | **Funciona con AWS SAM** | **Cuándo elegir** | 
| --- | --- | --- | --- | --- | 
| **CloudFormation** | Administrar una AWS infraestructura compleja | Aplicaciones que requieren un control detallado de AWS los recursos | AWS SAM las plantillas se transforman en CloudFormation plantillas durante el despliegue | Para un control detallado sobre recursos que no están sin servidor | 
| **AWS SAM** | Desarrollo de aplicaciones sin servidor | Equipos que crean aplicaciones sin servidor con Lambda | Funcionalidad nativa | Cuando se centra principalmente en arquitecturas sin servidor con funciones Lambda APIs, API Gateway y otros recursos sin servidor | 
| **AWS CDK** | Definición de infraestructura mediante lenguajes de programación | Equipos que prefieran los lenguajes tipados y el enfoque basado en el código | Genere AWS SAM plantillas y utilícelas para realizar pruebas AWS SAMCLI | Cuando necesite una definición de infraestructura programática o una lógica de configuración de recursos compleja | 

**nota**  
Si bien esta guía se centra en las herramientas AWS de iAC nativas, Terraform es otra solución popular de iAC que se puede utilizar para definir aplicaciones sin servidor. La CLI de AWS SAM admite las pruebas locales de las funciones de Lambda definidas en Terraform. Para obtener más información, consulte [Compatibilidad de la CLI de AWS SAM con Terraform](terraform-support.md).

## Más información
<a name="iac-learn-more"></a>
+ [Para obtener más información sobre DevOps las prácticas sobre, consulte la Introducción a AWS DevOps AWS](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html)
+ Para obtener información sobre el uso de Lambda con diferentes herramientas de IaC, consulte [Uso de Lambda con la infraestructura como código (IaC)](https://docs.aws.amazon.com/lambda/latest/dg/foundation-iac.html)