Conceptos básicos de despliegue en la nube
10 ejemplos para empezar con Cloud & Serverless: 7 básicos y 3 intermedios.
Busca en todas las páginas de la documentación
10 ejemplos para empezar con Cloud & Serverless: 7 básicos y 3 intermedios.
aws configure con una cuenta de desarrollador.gcloud auth login seguido de gcloud config set project <PROJECT_ID>.go version, docker version y la autenticación de la CLI de la nube antes de desplegar.Crea un módulo con puntos de entrada cmd separados para Lambda y HTTP.
mkdir greeter-cloud && cd greeter-cloud
go mod init example.com/greeter-cloud
mkdir -p cmd/lambda cmd/server internal/greetinternal/greet contiene la lógica compartida que ambos adaptadores llaman.cmd/lambda utiliza github.com/aws/aws-lambda-go/lambda.cmd/server expone un servidor HTTP normal para Cloud Run.Relacionado: Go en la nube: Lambda, Cloud Run y más allá - modelo mental de la plataforma
Mantén los manejadores ligeros delegando a una función pura.
package greet
import "fmt"
func Message(name string) string {
if name == "" {
name = "world"
}
return fmt.Sprintf("hello, %s", name)
}internal/greet: las pruebas unitarias se mantienen rápidas.Relacionado: Arquitectura en Go: Interfaces pequeñas, dependencias explícitas - límites del adaptador
Utiliza el runtime provided.al2023 con el nombre de binario bootstrap.
package main
import (
"context"
"example.com/greeter-cloud/internal/greet"
"github.com/aws/aws-lambda-go/lambda"
)
type Event struct {
Name string `json:"name"`
}
func handle(ctx context.Context, e Event) (string, error) {
return greet.Message(e.Name), nil
}
func main() {
lambda.Start(handle)
}lambda.Start registra el manejador con la API del runtime.GOOS=linux GOARCH=arm64 CGO_ENABLED=0.Relacionado: Runtime personalizado de AWS Lambda y provided.al2023 - empaquetado ARM
Produce bootstrap para el diseño de archivo zip del runtime proporcionado.
GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -ldflags="-s -w" -o bootstrap ./cmd/lambda
zip function.zip bootstrap-ldflags="-s -w" elimina los símbolos de depuración para reducir el tiempo de carga de arranque en frío.bootstrap en la raíz del archivo para provided.al2023.Relacionado: Runtime personalizado de AWS Lambda y provided.al2023 - diseño del archivo zip
Escucha en $PORT (por defecto 8080) para compatibilidad con Cloud Run.
package main
import (
"log"
"net/http"
"os"
"example.com/greeter-cloud/internal/greet"
)
func main() {
mux := http.NewServeMux()
mux.HandleFunc("GET /", func(w http.ResponseWriter, r *http.Request) {
name := r.URL.Query().Get("name")
_, _ = w.Write([]byte(greet.Message(name)))
})
mux.HandleFunc("GET /health", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusNoContent)
})
addr := ":" + os.Getenv("PORT")
if addr == ":" {
addr = ":8080"
}
log.Fatal(http.ListenAndServe(addr, mux))
}PORT; el desarrollo local recurre a 8080./health soporta sondeos de balanceador de carga y plataforma.Relacionado: Patrones de GCP Cloud Run y AWS Fargate - configuración del servicio
Utiliza una compilación multi-etapa con una imagen de runtime distroless.
FROM golang:1.26 AS build
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -ldflags="-s -w" -o /server ./cmd/server
FROM gcr.io/distroless/static-debian12
COPY --from=build /server /server
ENV PORT=8080
EXPOSE 8080
ENTRYPOINT ["/server"]Relacionado: Patrones de GCP Cloud Run y AWS Fargate - despliegue de contenedores
Compila, sube y despliega en un solo flujo.
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT/REPO/greeter:latest
gcloud run deploy greeter \
--image REGION-docker.pkg.dev/PROJECT/REPO/greeter:latest \
--region REGION \
--allow-unauthenticated \
--port 8080--allow-unauthenticated es solo para demostraciones públicas; bloquea los servicios de producción.curl "$(gcloud run services describe greeter --region REGION --format='value(status.url)')?name=cloud".Relacionado: Secretos, IAM y Workload Identity - conexión de cuentas de servicio
Declara el runtime, la arquitectura y el manejador en infraestructura como código.
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
GreeterFunction:
Type: AWS::Serverless::Function
Properties:
Runtime: provided.al2023
Architectures: [arm64]
Handler: bootstrap
CodeUri: .
MemorySize: 128
Timeout: 10
Events:
Api:
Type: Api
Properties:
Path: /greet
Method: getsam build y sam deploy --guided suben el archivo zip y la ruta de API Gateway.MemorySize: también escala la CPU en Lambda.Relacionado: Guía de decisión de arquitectura Go sin servidor - cuándo encaja Lambda
Prueba el binario bootstrap antes de subirlo.
sam local invoke GreeterFunction -e events/greet.json{"name": "sam"}events/greet.json es una carga de ejemplo incluida en el repositorio.Relacionado: Mejores prácticas para la nube y sin servidor - hábitos de paridad local
Utiliza log/slog para que CloudWatch y Cloud Logging analicen JSON de forma consistente.
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
slog.SetDefault(logger)
slog.Info("request", "name", name, "platform", "cloud-run")Relacionado: Mejores prácticas para la nube y sin servidor - barreras de observabilidad
Versiones de la pila: Esta página se escribió para Go 1.26.x (predeterminado GC Green Tea, go fix modernizers - verifica el parche en la compilación), chi (última versión - verifica en la compilación), gin (última versión - verifica en la compilación), echo (última versión - verifica en la compilación), google.golang.org/grpc (última versión - verifica en la compilación), sigs.k8s.io/controller-runtime (última versión - verifica en la compilación), kubebuilder (última versión - verifica en la compilación), tinygo (última versión - verifica los destinos de la placa en la compilación), wazero (última versión - verifica en la compilación) y golangci-lint (última versión - verifica el conjunto de linters en la compilación).
Revisado por Chris St. John·Última actualización: 19 jul 2026