Creación de aplicaciones gratuitas y escalables en AWS Lambda

Hoy, AWS LEmbda está promoviendo el soporte para Experimento a Disponible. Esto significa que puede utilizar Rust para crear aplicaciones no comerciales, respaldadas por el soporte de AWS con SLASD BIST y SLAST BIST.

Dust es un lenguaje popular bien merecido por su combinación de alto rendimiento, seguridad de la memoria y experiencia del desarrollador. Ofrece la comodidad de utilizar C++ y la confiabilidad de los lenguajes de alto nivel.

Esta publicación le muestra cómo crear e implementar trabajos de Local Rush utilizando funciones de Cargo Lambda, una herramienta de código abierto de terceros para trabajar con funciones de Lambda. También cubriremos la implementación de un flujo de trabajo utilizando la compilación Cargo Lambada AWS Cloud Cloud (AWS CDK).

Artículo anterior

Antes de comenzar, asegúrese de:

  • Una cuenta de AWS con los permisos necesarios.
  • La interfaz de línea de comandos de AWS (AWS Cli) está configurada con sus credenciales
  • Rust instalado en su máquina de desarrollo (versión 1.70 o posterior)
  • Node.js 20 o posterior (para descarga de aws cdk)
  • AWS CDK instalado: npm install -g aws-cdk

Vista completa

Esta publicación lo guiará a través de los siguientes pasos:

  1. Instalar y configurar Cargo Lambda.
  2. Cree e implemente una función http Lambda utilizando Cargo Lambda.
  3. Cree una API que no pueda utilizar AWS CDK y la corrosión de la funcionalidad de Remembda.

Instalar y configurar Cargo Lambda

Cargo es el administrador financiero y el sistema de construcción de Rust. Cargo Lambda es una extensión celular de terceros para la herramienta de línea de comandos que presenta la generación y eliminación de óxido.

Para instalar Animal Lambda en sistemas Linux, ejecute:

curl -fsSL https://cargo-lambda.info/install.sh | sh

Para opciones de instalación adicionales, consulte la documentación de instalación de Cargo Lambda.

Construyendo su primer trabajo en la alfombra roja

Cree una función de día basada en Lambdand:

Preguntado sobre ¿Funciona esta función http?ingresar clase de palabra.

Esto crea un proyecto con la siguiente estructura:

├── Cargo.toml
├── README.md
└── src
    ├── http_handler.rs
    └── main.rs

El programa incluye:

  • main.rs – El punto de integración funcional es donde combinas confianza y estilo.
  • http_handler.rs – Tecnología de rendimiento central

El main.rs El archivo contiene el siguiente código:

use lambda_http::{run, service_fn, tracing, Error};
mod http_handler;
use http_handler::function_handler;
#(tokio::main)
async fn main() -> Result<(), Error> {
tracing::init_default_subscriber();
run(service_fn(function_handler)).await
}

La parte principal del main.rs el archivo es run(service_fn(function_handler)).await. La gestión es parte del http_lambda Crate comenzará con Lambda Security (ric), que puede sondear eventos desde Rundda Runtime API. El function_handler la función está definida en el http_handler.rs archivo. Cuando la API RUNTIME devuelve la sesión de solicitud, ric llama al function_handler de http_handler.rs:

use lambda_http::{Body, Error, Request, RequestExt, Response};
pub(crate) async fn function_handler(event: Request) -> Result {
// Extract some useful information from the request
let who = event
.query_string_parameters_ref()
.and_then(|params| params.first("name"))
.unwrap_or("world");
let message = format!("Hello {who}, this is an AWS Lambda HTTP request");
// Return something that implements IntoResponse.
// It will be serialized to the right response event automatically by the runtime

let resp = Response::builder()
    .status(200)
    .header("content-type", "text/html")
    .body(message.into())
    .map_err(Box::new)?;
Ok(resp)

}

El function_handler El trabajo de firma es todo lo contrario. event Artículo anterior Request. El event El contenido del servicio está bloqueando el proceso. Por ejemplo, puede haber información de solicitud Http, como la ruta entrante si la solicitud se realiza a través de HTTP, o más registros de Amazon KinesIS.

Para tareas que no sean http, se pueden escribir eventos. Además, podéis acordar una estructura a la que entrar cuando sea significativo. serde::Serialize y serde::Deserialize.

La fórmula trata con signos de interrogación y busca el primer carácter que contiene el nombre. name.

El lambda_http Crate está destinado a devolver una respuesta, utilizando una plantilla de constructor. La función devuelve una respuesta como Result y el Ok() es por eso run calarse main.rs esperar.

Doblar

El main.rs El archivo contiene la siguiente línea:

tracing::init_default_subscriber();

La arquitectura de Rust Runtime incluye registros y registros públicos, y admite JSON preformado. Al trazar esta línea y la RUST_LOG Cambiando el entorno, Lambda ofrece bases de datos a la nube para Amazon. Por defecto, el INFO Habilita el nivel de registro.

Para escribir los registros, use la plataforma street y envíe los programas usando la siguiente sintaxis:

tracing::info("This is a log entry");

Casa

Para crear una función Lambda, utilice cargo lambda build. Al compilar una función Lambda, AWS LEmbda Runtime se crea en su binario. El archivo binario se llama bootstrap. Está empaquetado en un archivo .ZIP y se puede encontrar como un archivo en AWS LEmbda.

Cuando Rembda ejecute este binario, iniciará una copia de seguridad ilimitada (el Run trabajar). Los votos del Rullda Runtime Runtime para conseguir la aplicación que llamas tu limpiadora, la function_handler Trabajar.

Entorno de ejecución lambda

Su código de acción se ejecuta y la respuesta de la acción se envía a Runtime Runtime API, que la envía al remitente.

Experimento

Antes de enviar el trabajo, puedes completar/probar el trabajo utilizado por el dominio. cargo lambda.

cargo lambda watch Crea un entorno que representa el entorno de ejecución de Lambda. De esta manera puede enviar una solicitud a la función Lambda y ver los resultados.

Para enviar la solicitud, puede utilizarla. cargo lambda o enviar un curl Aplicar al emulador Emulador.

Para usar cargo lambdaEjecute lo siguiente, Reemplazar y hi_api Para este ejemplo

cargo lambda invoke  --data-example apigw-request

Puede utilizar uno de los precios integrados y --data-example Parámetros. Causa --data-ascii para realizar su propio pago.

Para aplicar la función usando curlpase el formato JSON a la dirección del emulador local:

curl -v -X POST \
  'http://127.0.0.1:9000/lambda-url//' \
  -H 'content-type: application/json' \
  -d '{ "command": "hi" }'

Envío con Cargo Lambda

Una vez creada la función usando cargo lambda buildpuede cargar su cuenta de AWS.

Para enviar tu trabajo:

Una vez implementada la función Lambda, puede probarla de forma remota. cargo lambda invoke Pruebe la función Lambdate utilizando el valor almacenado en el .json Archivo:

cargo lambda invoke --remote hi_api --data-file 

Tecnología como código con AWS CDK

Puedes crear una API gratuita antes de esta actividad del óxido del polvo de Lamberda utilizando la API de Amazon Game. Este ejemplo utiliza el CDK CDK. No se garantiza que este modelo esté configurado para el final de la dirección API, ya que es un modelo. Lo que AWS hace mejor es implementar los controles adecuados.

  1. Primero, cree un nuevo proyecto CDK:
    mkdir rusty_cdk
    cd rusty_cdk
    cdk init --language=typescript

    La forma más sencilla de implementar un trabajo de óxido recordado es utilizar AWS CDK para utilizar el cargo lambda Producción de CDK. Viene con todo lo que necesita para gestionar el óxido en AWS. Es parte del cargo lambda Proyecto.

  2. Instale el CDK Cargo Lambda generado:
  3. Cree una nueva función HTTP Lambda en su proyecto:
    mkdir lambda
    cd lambda
    cargo lambda new helloRust

    Preguntado sobre ¿Funciona esta función http?ingresar clase de palabra.

  4. Actualice su implementación de CDK lib/rusty_cdk-stack.ts Para instalar la función Lambda con el Gateway.
    import * as cdk from 'aws-cdk-lib';
    import { HttpApi } from 'aws-cdk-lib/aws-apigatewayv2';
    import { HttpLambdaIntegration } from 'aws-cdk-lib/aws-apigatewayv2-integrations';
    import { HttpMethod } from 'aws-cdk-lib/aws-events';
    import { RustFunction } from 'cargo-lambda-cdk';
    import { Construct } from 'constructs';
    export class RustyCdkStack extends cdk.Stack {
      constructor(scope: Construct, id: string, props?: cdk.StackProps) {
        super(scope, id, props);
        const helloRust = new RustFunction(this, 'helloRust',{
          manifestPath: './lambda/helloRust',
          runtime: 'provided.al2023',
          timeout: cdk.Duration.seconds(30),
        });
    
        const api = new HttpApi(this, 'rustyApi');
        const helloInteg = new HttpLambdaIntegration('helloInteg', helloRust);
    
        api.addRoutes({
          path: '/hello',
          methods: (HttpMethod.GET),
          integration: helloInteg,
        })
        new cdk.CfnOutput(this, 'apiUrl',{
          description: 'The URL of the API Gateway',
          value: `https://${api.apiId}.execute-api.${this.region}.amazonaws.com`,
        })
      }
    }

  5. Arranque su cuenta de AWS y su dominio de AWS para AWS CDK:
  6. Limpia tu pila:

Pruebe la API

Para probar su API distribuida utilizando la URL proporcionada en la versión CDK CDK:

curl https:///hello

Lavado

Para evitar cargos continuos, elimine los recursos asignados:

ultima parte

La compatibilidad con AWS LEmbda está disponible para que Dust cree aplicaciones grandes y sin memoria. Cargo Lambda es una extensión de terceros para Dust cargo CLI facilita la experiencia del desarrollo, las pruebas y la recuperación de aplicaciones libres de óxido.

Para obtener más información sobre cómo crear aplicaciones gratuitas con Rust:

Para encontrar ejemplos de leyes más elásticas, utilice la colección de ejemplos gratuita. Para obtener más recursos de aprendizaje gratuitos, visite el mundo gratuito.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *