Blog
AWS Lambda - Wie man einen benutzerdefinierten Bootstrap in Go erstellt

Auf der re:Invent 2018 hat AWS Lambda Custom Runtimes angekündigt, mit denen Sie eine AWS Lambda-Laufzeit in einer beliebigen Programmiersprache implementieren können. In diesem Blog werden wir unseren eigenen Bootstrap in Go erstellen.
Bootstrap
Bootstrap ist eine Datei im Bereitstellungsarchiv, die dafür verantwortlich ist, die Umgebungsvariable 'AWS_LAMBDA_RUNTIME_API' zu lesen und mit der Lambda-Laufzeit-API zu interagieren, indem das nächste Ereignis abgerufen und eine Antwort gesendet wird. Die Lambda-Laufzeit-API ist als Webservice verfügbar, so dass es sehr einfach ist, eine Bootstrap-Anwendung in Go zu erstellen. Nachfolgend sehen Sie ein Beispiel für eine
package main
import (
"bytes"
"fmt"
"io/ioutil"
"log"
"net/http"
"os"
"time"
)
func main() {
awsLambdaRuntimeApi := os.Getenv("AWS_LAMBDA_RUNTIME_API")
if awsLambdaRuntimeApi == "" {
panic("Missing: 'AWS_LAMBDA_RUNTIME_API'")
}
for {
// get the next event
requestUrl := fmt.Sprintf("http://%s/2018-06-01/runtime/invocation/next", awsLambdaRuntimeApi)
resp, err := http.Get(requestUrl)
if err != nil {
log.Fatal(fmt.Errorf("Expected status code 200, got %d", resp.StatusCode))
}
requestId := resp.Header.Get("Lambda-Runtime-Aws-Request-Id")
// print the next event
eventData, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(fmt.Errorf("Error: %s"), err)
}
fmt.Println("Received event:", string(eventData))
// Assume API Gateway and respond with Hello World
responseUrl := fmt.Sprintf("http://%s/2018-06-01/runtime/invocation/%s/response", awsLambdaRuntimeApi, requestId)
responsePayload := []byte({"statusCode": 200, "body": "Hello World!"})
req, err := http.NewRequest("POST", responseUrl, bytes.NewBuffer(responsePayload))
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
client.Timeout = time.Second * 1
postResp, err := client.Do(req)
if err != nil {
log.Fatal(fmt.Errorf("Error %s", err))
}
body, _ := ioutil.ReadAll(postResp.Body)
fmt.Println("Received response:", string(body))
}
}
Beispiel
Das Beispiel zeigt, wie Sie eine native Go-Binärdatei als Bootstrap für AWS als API Gateway Handler erstellen, bauen, verpacken und bereitstellen. Zum Bereitstellen des Beispiels geben Sie 'make dep[oy' und zum Löschen 'make delete' ein.
Fazit
Lambda kann jede statische Linux-Binärdatei ausführen, was großartig ist! Lambda unterstützt nach wie vor die verwalteten Lambda-Laufzeiten, aber um zusätzliche Leistung aus unseren Lambda-Handlern herauszuholen, können wir hoch optimierte Binärdateien erstellen, die die schnellste Verarbeitung und die niedrigsten Kosten haben.
Verfasst von
Dennis Vriend
Contact