

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.

# Crea tu aplicación en AWS SAM
<a name="using-sam-cli-init"></a>

Después de completar [Introducción](serverless-getting-started.md) y de leer [Cómo usar AWS Serverless Application Model (AWS SAM)](chapter-using-sam.md), estará listo para crear un proyecto de AWS SAM en su entorno de desarrollador. Su AWS SAM proyecto servirá como punto de partida para escribir su aplicación sin servidor. Para obtener una lista de las opciones de AWS SAMCLI `sam init` comando, consulte[sam init](sam-cli-command-reference-sam-init.md).

El AWS Serverless Application Model comando Command Line Interface (AWS SAMCLI) `sam init` proporciona opciones para inicializar una nueva aplicación sin servidor que consta de:
+ Una AWS SAM plantilla para definir el código de infraestructura.
+ Una estructura de carpetas que organiza la aplicación.
+ Configuración para sus AWS Lambda funciones.

Para crear un AWS SAM proyecto, consulte los temas de estas secciones.

**nota**  
`sam init`incluye plantillas de proyectos para funciones duraderas en tiempos de ejecución compatibles (PythonTypeScript, Java). Estas plantillas proporcionan código de inicio y configuración para crear aplicaciones sin servidor con estado.

**Topics**
+ [Inicialización de aplicación sin servidor](#using-sam-cli-init-new)
+ [Opciones para el inicio de sesión](#using-sam-cli-init-options)
+ [Resolución de problemas](#using-sam-cli-init-troubleshooting)
+ [Ejemplos](#using-sam-cli-init-examples)
+ [Más información](#using-sam-cli-init-learn)
+ [Siguientes pasos](#w2aac18c11c39)

## Inicialización de aplicación sin servidor
<a name="using-sam-cli-init-new"></a>

**Cómo inicializar una nueva aplicación sin servidor mediante la CLI de AWS SAM**

1. `cd` a un directorio de inicio.

1. Ejecute lo siguiente en la línea de comandos:

   ```
   $ sam init
   ```

1. La CLI de AWS SAM lo guiará a través de un flujo interactivo para crear una nueva aplicación sin servidor.
**nota**  
Como se explica en [Tutorial: Implemente una aplicación Hello World con AWS SAM](serverless-getting-started-hello-world.md), este comando inicializa la aplicación sin servidor y crea el directorio del proyecto. Este directorio contendrá varios archivos y carpetas. El archivo más importante es `template.yaml`. Esta es tu plantilla. AWS SAM Su versión de python debe coincidir con la versión de python que aparece en el archivo `template.yaml` que creó el comando **sam init**.

### Elegir una plantilla inicial
<a name="using-sam-cli-init-new-template"></a>

Una *plantilla* consta de lo siguiente:

1. Una AWS SAM plantilla para su código de infraestructura.

1. Un directorio inicial del proyecto que organiza los archivos del proyecto. Por ejemplo, esto puede incluir:

   1. Una estructura para el código de la función de Lambda y sus dependencias.

   1. Una carpeta `events` que contiene los eventos de prueba para las testeo local.

   1. Una carpeta `tests` para respaldar las pruebas unitarias.

   1. Un archivo `samconfig.toml` para configurar los ajustes del proyecto.

   1. Un archivo `ReadMe` y otros archivos básicos de inicio del proyecto.

   A continuación, se muestra un ejemplo de un directorio inicial para un proyecto:

   ```
   sam-app
   ├── README.md
   ├── __init__.py
   ├── events
   │   └── event.json
   ├── hello_world
   │   ├── __init__.py
   │   ├── app.py
   │   └── requirements.txt
   ├── samconfig.toml
   ├── template.yaml
   └── tests
       ├── __init__.py
       ├── integration
       │   ├── __init__.py
       │   └── test_api_gateway.py
       ├── requirements.txt
       └── unit
           ├── __init__.py
           └── test_handler.py
   ```

Puede seleccionar de una lista de *plantillas de inicio rápido de AWS * disponibles o proporcionar su propia *ubicación de plantilla personalizada*.

**Para elegir una plantilla de inicio AWS rápido**

1. Cuando se le solicite, seleccione **Plantillas de inicio rápido de AWS **.

1. Seleccione una plantilla de inicio AWS rápido para empezar. A continuación, se muestra un ejemplo:

   ```
   Which template source would you like to use?
       1 - AWS Quick Start Templates
       2 - Custom Template Location
   Choice: 1
   
   Choose an AWS Quick Start application template
       1 - Hello World Example
       2 - Multi-step workflow
       3 - Serverless API
       4 - Scheduled task
       5 - Standalone function
       6 - Data processing
       7 - Hello World Example With Powertools
       8 - Infrastructure event management
       9 - Serverless Connector Hello World Example
       10 - Multi-step workflow with Connectors
       11 - Lambda EFS example
       12 - DynamoDB Example
       13 - Machine Learning
   Template: 4
   ```

**Para elegir su propia ubicación de plantilla personalizada**

1. Cuando se le solicite, seleccione la **ubicación de la plantilla personalizada**.

   ```
   Which template source would you like to use?
       1 - AWS Quick Start Templates
       2 - Custom Template Location
   Choice: 2
   ```

1. La CLI de AWS SAM le pedirá que proporciona una ubicación para la plantilla.

   ```
   Template location (git, mercurial, http(s), zip, path):
   ```

   Proporciona cualquiera de las siguientes ubicaciones al archivo.zip de la plantilla:
   + **Repositorio GitHub**: la ruta al archivo.zip de su repositorio GitHub. El archivo debe estar en la raíz del repositorio.
   + **Repositorio Mercurial**: la ruta al archivo.zip de su repositorio Mercurial. El archivo debe estar en la raíz del repositorio.
   + **Ruta.zip**: una ruta HTTPS o local a su archivo.zip.

1. La CLI de AWS SAM inicializará la aplicación sin servidor con su plantilla personalizada.

### Elija un tiempo de ejecución
<a name="using-sam-cli-init-new-runtime"></a>

Al elegir una *plantilla de inicio rápido de AWS *, la CLI de AWS SAM le pide que seleccione un tiempo de ejecución para las funciones de Lambda. La lista de opciones que muestra la CLI de AWS SAM son los tiempos de ejecución compatibles de forma nativa con Lambda.
+ El [tiempo de ejecución](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-concepts.html#gettingstarted-concepts-runtime) proporciona un entorno específico del lenguaje que se ejecuta en el entorno de ejecución.
+ [Cuando se implementa en Nube de AWS, el servicio Lambda invoca la función en un entorno de ejecución.](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtime-environment.html)

Puedes utilizar cualquier otro lenguaje de programación con un tiempo de ejecución personalizado. Para ello, debe crear manualmente la estructura inicial de la aplicación. A continuación, puede utilizar `sam init` para inicializar rápidamente la aplicación configurando una ubicación de plantilla personalizada.

A partir de tu selección, la CLI de AWS SAM crea el directorio de inicio para el código y las dependencias de la función de Lambda.

Si Lambda admite varios administradores de dependencias para su tiempo de ejecución, se le solicitará que elija el administrador de dependencias que prefiera.

### Elija un tipo de paquete
<a name="using-sam-cli-init-new-package"></a>

Cuando elige una *plantilla de inicio rápido de AWS * y un *tiempo de ejecución*, la CLI de AWS SAM le pide que seleccione un *tipo de paquete*. El tipo de paquete determina cómo se implementan las funciones de Lambda para usarlas con el servicio de Lambda. Los dos tipos de paquetes compatibles son:

1. **Imagen del contenedor**: contiene el sistema operativo base, el tiempo de ejecución, las extensiones de Lambda, el código de tu aplicación y sus dependencias.

1. **Un archivo de archivo .zip**, que incluye el código de la aplicación y sus dependencias.

Para obtener más información sobre paquetes de implementación, consulta [Paquetes de implementación de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-package.html) en la *Guía para desarrolladores de AWS Lambda *.

A continuación, se muestra un ejemplo de estructura de directorios de una aplicación con una función de Lambda empaquetada como imagen de contenedor. AWS SAMCLIDescarga la imagen y crea un directorio `Dockerfile` en el directorio de la función para especificar la imagen.

```
sam-app
├── README.md
├── __init__.py
├── events
│   └── event.json
├── hello_world
│   ├── Dockerfile
│   ├── __init__.py
│   ├── app.py
│   └── requirements.txt
├── samconfig.toml
├── template.yaml
└── tests
    ├── __init__.py
    └── unit
        ├── __init__.py
        └── test_handler.py
```

A continuación, se muestra un ejemplo de estructura de directorios de una aplicación con una función empaquetada como un archivo de archivos.zip.

```
sam-app
├── README.md
├── __init__.py
├── events
│   └── event.json
├── hello_world
│   ├── __init__.py
│   ├── app.py
│   └── requirements.txt
├── samconfig.toml
├── template.yaml
└── tests
    ├── __init__.py
    ├── integration
    │   ├── __init__.py
    │   └── test_api_gateway.py
    ├── requirements.txt
    └── unit
        ├── __init__.py
        └── test_handler.py
```

### Configura el AWS X-Ray rastreo
<a name="using-sam-cli-init-new-tracing"></a>

Puede optar por activar el AWS X-Ray rastreo. Para obtener más información, consulta [¿Qué es? AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html) en la *Guía para AWS X-Ray desarrolladores*.

Si la activas, AWS SAMCLI configura tu AWS SAM plantilla. A continuación, se muestra un ejemplo:

```
Globals:
  Function:
    ...
    Tracing: Active
  Api:
    TracingEnabled: True
```

### Configure la supervisión con Amazon CloudWatch Application Insights
<a name="using-sam-cli-init-new-insights"></a>

Puede optar por activar la supervisión mediante Amazon CloudWatch Application Insights. Para obtener más información, consulte [Amazon CloudWatch Application Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html) en la *Guía del CloudWatch usuario de Amazon*.

Si la activas, AWS SAMCLI configurará tu AWS SAM plantilla. A continuación, se muestra un ejemplo:

```
Resources:
  ApplicationResourceGroup:
    Type: AWS::ResourceGroups::Group
    Properties:
      Name:
        Fn::Join:
        - ''
        - - ApplicationInsights-SAM-
          - Ref: AWS::StackName
      ResourceQuery:
        Type: CLOUDFORMATION_STACK_1_0
  ApplicationInsightsMonitoring:
    Type: AWS::ApplicationInsights::Application
    Properties:
      ResourceGroupName:
        Fn::Join:
        - ''
        - - ApplicationInsights-SAM-
          - Ref: AWS::StackName
      AutoConfigurationEnabled: 'true'
    DependsOn: ApplicationResourceGroup
```

### Asigne un nombre a la aplicación.
<a name="using-sam-cli-init-new-name"></a>

Indique un nombre para su solicitud. La CLI de AWS SAM crea una carpeta de nivel superior para la aplicación con este nombre.

## Opciones para el inicio de sesión
<a name="using-sam-cli-init-options"></a>

Estas son algunas de las opciones principales que puede utilizar con el comando `sam init`. Para obtener una lista de todas las opciones, consulta [sam init](sam-cli-command-reference-sam-init.md).

### Inicializa una aplicación mediante una ubicación de plantilla personalizada
<a name="using-sam-cli-init-options-location"></a>

Utiliza la opción `--location` y proporciona una ubicación de plantilla personalizada compatible. A continuación, se muestra un ejemplo:

```
$ sam init --location https://github.com/aws-samples/sessions-with-aws-sam/raw/master/starter-templates/web-app.zip
```

### Inicializa una aplicación sin el flujo interactivo
<a name="using-sam-cli-init-options-no-interactive"></a>

Utiliza la opción `--no-interactive` y proporciona las opciones de configuración en la línea de comandos para omitir el flujo interactivo. A continuación, se muestra un ejemplo:

```
$ sam init --no-interactive --runtime go1.x --name go-demo --dependency-manager mod --app-template hello-world
```

## Resolución de problemas
<a name="using-sam-cli-init-troubleshooting"></a>

Para solucionar el problema AWS SAMCLI, consulte. [Solución de problemas para AWS SAM CLI](sam-cli-troubleshooting.md)

## Ejemplos
<a name="using-sam-cli-init-examples"></a>

### Inicialice una nueva aplicación sin servidor mediante la plantilla Hello World Starter AWS
<a name="using-sam-cli-init-examples-helloworld"></a>

Para ver este ejemplo, consulta [Paso 1: inicializar la aplicación de muestra Hello World](serverless-getting-started-hello-world.md#serverless-getting-started-hello-world-init) en el *tutorial: Implementación de una aplicación de Hello World*.

### Inicializa una nueva aplicación sin servidor con una ubicación de plantilla personalizada
<a name="using-sam-cli-init-examples-custom"></a>

Los siguientes son ejemplos de cómo proporcionar una ubicación GitHub a la plantilla personalizada:

```
$ sam init --location gh:aws-samples/cookiecutter-aws-sam-python
$ sam init --location git+sh://git@github.com/aws-samples/cookiecutter-aws-sam-python.git
$ sam init --location hg+ssh://hg@bitbucket.org/repo/template-name
```

A continuación, se muestra un ejemplo de una ruta de archivo local:

```
$ sam init --location /path/to/template.zip
```

A continuación, se muestra un ejemplo de una ruta a la que se puede acceder mediante HTTPS:

```
$ sam init --location https://github.com/aws-samples/sessions-with-aws-sam/raw/master/starter-templates/web-app.zip
```

## Más información
<a name="using-sam-cli-init-learn"></a>

Para obtener más información sobre el uso del comando `sam init`, consulta los enlaces siguientes:
+ **[Aprendizaje AWS SAM: sam init, sobre la](https://www.youtube.com/watch?v=9m3R-leD5Xo)** serie Serverless Land «Aprendizaje AWS SAM». YouTube
+ **[Estructuración de aplicaciones sin servidor para su uso con la CLI de AWS SAM(Sesiones con SAM S2E7)](https://www.youtube.com/watch?v=k9IRdgze9fQ)**: Sesiones con la serie AWS SAM en YouTube.

## Siguientes pasos
<a name="w2aac18c11c39"></a>

Ahora que ha creado su AWS SAM proyecto, está listo para empezar a crear su aplicación. Consulte [Defina su infraestructura con AWS SAM](serverless-authoring.md) para obtener instrucciones detalladas sobre las tareas que debe completar para hacerlo.