Noções Básicas de Implantação na Nuvem
10 exemplos para você começar com Nuvem e Serverless - 7 básicos e 3 intermediários.
Busque em todas as páginas da documentação
10 exemplos para você começar com Nuvem e Serverless - 7 básicos e 3 intermediários.
aws configure com uma conta de desenvolvimento.gcloud auth login mais gcloud config set project <PROJECT_ID>.go version, docker version e autenticação do CLI da nuvem antes de implantar.Crie um módulo com pontos de entrada cmd separados para Lambda e HTTP.
mkdir greeter-cloud && cd greeter-cloud
go mod init example.com/greeter-cloud
mkdir -p cmd/lambda cmd/server internal/greetinternal/greet contém a lógica compartilhada que ambos os adaptadores chamam.cmd/lambda usa github.com/aws/aws-lambda-go/lambda.cmd/server expõe um servidor HTTP normal para o Cloud Run.Relacionado: Go na Nuvem: Lambda, Cloud Run e Além - modelo mental da plataforma
Mantenha os manipuladores enxutos delegando para uma função pura.
package greet
import "fmt"
func Message(name string) string {
if name == "" {
name = "world"
}
return fmt.Sprintf("hello, %s", name)
}internal/greet - os testes de unidade permanecem rápidos.Relacionado: Arquitetura em Go: Interfaces Pequenas, Dependências Explícitas - limites do adaptador
Use o runtime provided.al2023 com o nome binário 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 o manipulador com a API do runtime.GOOS=linux GOARCH=arm64 CGO_ENABLED=0.Relacionado: Runtime Personalizado AWS Lambda e provided.al2023 - empacotamento ARM
Produza bootstrap para o layout de zip do runtime fornecido.
GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -ldflags="-s -w" -o bootstrap ./cmd/lambda
zip function.zip bootstrap-ldflags="-s -w" remove símbolos de depuração para encolher o tempo de carregamento da inicialização a frio.bootstrap na raiz do arquivo para provided.al2023.Relacionado: Runtime Personalizado AWS Lambda e provided.al2023 - layout de zip
Ouça em $PORT (padrão 8080) para compatibilidade com 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; o desenvolvimento local usa 8080 como fallback./health suporta sondas de balanceador de carga e plataforma.Relacionado: Padrões GCP Cloud Run e AWS Fargate - configuração de serviço
Use uma compilação multi-estágio com uma imagem 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: Padrões GCP Cloud Run e AWS Fargate - implantação de contêiner
Compile, envie e implante em um único fluxo.
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 é apenas para demonstrações públicas; restrinja serviços de produção.curl "$(gcloud run services describe greeter --region REGION --format='value(status.url)')?name=cloud".Relacionado: Segredos, IAM e Identidade de Carga de Trabalho - fiação de conta de serviço
Declare o runtime, arquitetura e manipulador em infraestrutura 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 e sam deploy --guided carregam o zip e a rota do API Gateway.MemorySize - ele também escala a CPU no Lambda.Relacionado: Guia de Decisão de Arquitetura Go Serverless - quando o Lambda se encaixa
Teste o binário bootstrap antes de carregar.
sam local invoke GreeterFunction -e events/greet.json{"name": "sam"}events/greet.json é uma carga de exemplo verificada no repositório.Relacionado: Melhores Práticas de Nuvem e Serverless - hábitos de paridade local
Use log/slog para que o CloudWatch e o Cloud Logging analisem JSON de forma consistente.
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
slog.SetDefault(logger)
slog.Info("request", "name", name, "platform", "cloud-run")Relacionado: Melhores Práticas de Nuvem e Serverless - barreiras de observabilidade
Versões da Pilha: Esta página foi escrita para Go 1.26.x (padrão GC Green Tea, modernizadores go fix - verifique o patch na compilação), chi (mais recente - verifique na compilação), gin (mais recente - verifique na compilação), echo (mais recente - verifique na compilação), google.golang.org/grpc (mais recente - verifique na compilação), sigs.k8s.io/controller-runtime (mais recente - verifique na compilação), kubebuilder (mais recente - verifique na compilação), tinygo (mais recente - verifique os destinos da placa na compilação), wazero (mais recente - verifique na compilação) e golangci-lint (mais recente - verifique o conjunto de linters na compilação).
Revisado por Chris St. John·Última atualização: 19 de jul. de 2026