Azure Functions & Container Apps para Go
O Microsoft Azure hospeda Go através de dois caminhos principais: Azure Functions com um processo de manipulador personalizado e Azure Container Apps (ACA) para imagens OCI com regras de escala.
Busque em todas as páginas da documentação
O Microsoft Azure hospeda Go através de dois caminhos principais: Azure Functions com um processo de manipulador personalizado e Azure Container Apps (ACA) para imagens OCI com regras de escala.
Ambos aceitam os mesmos padrões de binário Go estático que você usa na AWS e GCP - as diferenças estão nos contratos de hospedagem e na conexão de identidade.
Os manipuladores personalizados do Functions permitem que o Go controle um servidor HTTP em uma porta atribuída pela plataforma, enquanto o host do Functions roteia eventos de gatilho para ele.
Os Container Apps executam sua imagem como o Cloud Run com opções de escala para zero e gatilhos KEDA (HTTP, filas, cron).
Use identidade gerenciada e referências do Key Vault em vez de strings de conexão nas configurações do aplicativo.
Cartão de receita de referência rápida - pronto para copiar e colar.
// cmd/functions/main.go - esqueleto do manipulador personalizado
http.HandleFunc("/api/HttpExample", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
_, _ = w.Write([]byte(`{"message":"hello from go"}`))
})
port := os.Getenv("FUNCTIONS_CUSTOMHANDLER_PORT")
log.Fatal(http.ListenAndServe(":"+port, nil))# Esboço de implantação do Container Apps
az containerapp up --name go-api --source . --ingress external --target-port 8080Quando usar isso:
package main
import (
"encoding/json"
"log/slog"
"net/http"
"os"
)
type response struct {
Message string `json:"message"`
}
func main() {
slog.SetDefault(slog.New(slog.NewJSONHandler(os.Stdout, nil)))
mux := http.NewServeMux()
mux.HandleFunc("POST /api/process", func(w http.ResponseWriter, r *http.Request) {
var payload map[string]any
if err := json.NewDecoder(r.Body).Decode(&payload); err != nil {
http.Error(w, "bad json", http.StatusBadRequest)
return
}
slog.Info("event", "keys", len(payload))
w.Header().Set("Content-Type", "application/json")
_ = json.NewEncoder(w).Encode(response{Message: "processed"})
})
mux.HandleFunc("GET /health", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusNoContent)
})
port := os.Getenv("FUNCTIONS_CUSTOMHANDLER_PORT")
if port == "" {
port = os.Getenv("PORT")
}
if port == "" {
port = "8080"
}
slog.Info("listening", "port", port)
if err := http.ListenAndServe(":"+port, mux); err != nil {
slog.Error("listen failed", "err", err)
os.Exit(1)
}
}O que isso demonstra:
FUNCTIONS_CUSTOMHANDLER_PORT para Functions, PORT para Container Apps.| Dimensão | Azure Functions (manipulador personalizado) | Azure Container Apps |
|---|---|---|
| Unidade de implantação | Binário + configuração do host function.json | Imagem de contêiner |
| Gatilhos | Catálogo de associações integrado | Scalers KEDA (HTTP, SB, cron) |
| Escala | Planos de Consumo ou Premium | Réplicas mín/máx, escala para zero |
| Estilo Go | net/http em porta personalizada | O mesmo que padrões Cloud Run |
| Identidade | Identidade gerenciada atribuída pelo sistema | Identidade gerenciada no aplicativo |
host.json e function.json{
"bindings": [{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": ["post"],
"route": "process"
}, {
"type": "http",
"direction": "out",
"name": "res"
}]
}Emparelhe cada gatilho com uma rota que seu mux Go implementa; rotas incompatíveis retornam 404 do seu processo enquanto o host ainda fatura a invocação.
FUNCTIONS_CUSTOMHANDLER_PORT Ausente - O host do Functions atribui a porta; codificar 8080 falha localmente sob func start. Correção: Sempre vincule os.Getenv("FUNCTIONS_CUSTOMHANDLER_PORT").signal.Notify + http.Server.Shutdown.127.0.0.1 quebra as sondas de integridade de entrada. Correção: Escute em 0.0.0.0 / : + porta.| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| Azure App Service | Aplicativos web Windows/Linux simples | Você precisa de escalonamento de fila KEDA |
| AKS | Operadores Kubernetes e CRDs | API Go única com operações mínimas |
| AWS Lambda / Cloud Run | Padrão multi-cloud | Identidade e rede do Azure são fixas |
| Somente Azure API Management | Políticas de gateway sem computação | Você ainda precisa de um backend Go em algum lugar |
As linguagens de primeira classe no processo do Azure diferem por geração de runtime.
Go de produção no Functions geralmente usa o modelo de manipulador personalizado com seu próprio servidor HTTP.
Sim, com scalers KEDA acionados por HTTP ou eventos configurados para permitir zero réplicas.
Cold starts se assemelham ao Cloud Run - mantenha as imagens enxutas.
Habilite o OpenTelemetry ou use o SDK Go do Application Insights; emita logs JSON para stdout para correlação automática quando configurado no host.
ACA é geralmente mais simples para HTTP sempre disponível com middleware padrão.
Functions se destacam quando você precisa do catálogo de associações para gatilhos Timer/Queue/Blob junto com endpoints HTTP pequenos.
Muitas vezes sim - altere o comando de implantação para az containerapp up ou tarefas de pipeline e verifique as configurações de porta/verificação de integridade.
Versões de Stack: Esta página foi escrita para Go 1.26.x (padrão GC Green Tea,
go fix modernizers- verifique o patch na compilação), chi (última versão - verifique na compilação), gin (última versão - verifique na compilação), echo (última versão - verifique na compilação), google.golang.org/grpc (última versão - verifique na compilação), sigs.k8s.io/controller-runtime (última versão - verifique na compilação), kubebuilder (última versão - verifique na compilação), tinygo (última versão - verifique os alvos de placa na compilação), wazero (última versão - verifique na compilação) e golangci-lint (última versão - verifique o conjunto de linters na compilação).
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026