appmesh

package
v1.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 19, 2026 License: MIT Imports: 19 Imported by: 0

README

App Mesh

Parity grade: A · SDK aws-sdk-go-v2/service/appmesh@v1.36.2 · last audited 2026-07-13 (40f05928)

Coverage

Operations audited 38 (38 ok)
Feature families 6 (6 ok)
Known gaps 4
Deferred items 1
Resource leaks clean
Known gaps
  • meshOwner query param (cross-account shared mesh access) is accepted on Describe/Delete/Create/List paths by real AWS but never read by gopherstack's handlers; this backend has no cross-account model at all. Low priority: shared meshes are an advanced, rarely-emulated feature.
  • No server-side name validation (AWS enforces a resourceName regex/length constraint on meshName/virtualNodeName/etc.); invalid names are accepted rather than rejected with BadRequestException. Spec bodies are also passed through as opaque JSON with no schema validation against the real MeshSpec/VirtualNodeSpec/etc. shapes.
  • TooManyTagsException (50-tag-per-resource limit) is not enforced by TagResource.
  • DeleteMesh/DeleteVirtualNode/etc. return the resource with its status left at ACTIVE; real AWS App Mesh's terminal status semantics on delete (whether the returned object flips to a DELETED/INACTIVE MeshStatusCode) were not confirmed against a live account and were left unchanged rather than guessed.
Deferred
  • CloudTrail-capture / observability integration (pkgs/service middleware chokepoint) was not specifically audited

More

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrMeshNotFound is returned when a mesh does not exist.
	ErrMeshNotFound = awserr.New("mesh not found", awserr.ErrNotFound)
	// ErrMeshAlreadyExists is returned when a mesh already exists.
	ErrMeshAlreadyExists = awserr.New("mesh already exists", awserr.ErrAlreadyExists)
	// ErrMeshInUse is returned when a mesh has resources and cannot be deleted.
	ErrMeshInUse = awserr.New("mesh is in use", awserr.ErrConflict)
	// ErrVirtualNodeNotFound is returned when a virtual node does not exist.
	ErrVirtualNodeNotFound = awserr.New("virtual node not found", awserr.ErrNotFound)
	// ErrVirtualNodeAlreadyExists is returned when a virtual node already exists.
	ErrVirtualNodeAlreadyExists = awserr.New("virtual node already exists", awserr.ErrAlreadyExists)
	// ErrVirtualRouterNotFound is returned when a virtual router does not exist.
	ErrVirtualRouterNotFound = awserr.New("virtual router not found", awserr.ErrNotFound)
	// ErrVirtualRouterAlreadyExists is returned when a virtual router already exists.
	ErrVirtualRouterAlreadyExists = awserr.New("virtual router already exists", awserr.ErrAlreadyExists)
	// ErrVirtualRouterInUse is returned when a virtual router has routes.
	ErrVirtualRouterInUse = awserr.New("virtual router has routes", awserr.ErrConflict)
	// ErrRouteNotFound is returned when a route does not exist.
	ErrRouteNotFound = awserr.New("route not found", awserr.ErrNotFound)
	// ErrRouteAlreadyExists is returned when a route already exists.
	ErrRouteAlreadyExists = awserr.New("route already exists", awserr.ErrAlreadyExists)
	// ErrVirtualServiceNotFound is returned when a virtual service does not exist.
	ErrVirtualServiceNotFound = awserr.New("virtual service not found", awserr.ErrNotFound)
	// ErrVirtualServiceAlreadyExists is returned when a virtual service already exists.
	ErrVirtualServiceAlreadyExists = awserr.New("virtual service already exists", awserr.ErrAlreadyExists)
	// ErrVirtualGatewayNotFound is returned when a virtual gateway does not exist.
	ErrVirtualGatewayNotFound = awserr.New("virtual gateway not found", awserr.ErrNotFound)
	// ErrVirtualGatewayAlreadyExists is returned when a virtual gateway already exists.
	ErrVirtualGatewayAlreadyExists = awserr.New("virtual gateway already exists", awserr.ErrAlreadyExists)
	// ErrVirtualGatewayInUse is returned when a virtual gateway has gateway routes.
	ErrVirtualGatewayInUse = awserr.New("virtual gateway has gateway routes", awserr.ErrConflict)
	// ErrGatewayRouteNotFound is returned when a gateway route does not exist.
	ErrGatewayRouteNotFound = awserr.New("gateway route not found", awserr.ErrNotFound)
	// ErrGatewayRouteAlreadyExists is returned when a gateway route already exists.
	ErrGatewayRouteAlreadyExists = awserr.New("gateway route already exists", awserr.ErrAlreadyExists)
	// ErrResourceNotFound is returned when a tagged resource does not exist.
	ErrResourceNotFound = awserr.New("resource not found for tagging", awserr.ErrNotFound)
)
View Source
var ErrNilAppContext = errors.New("AppContext is required")

ErrNilAppContext is returned when Provider.Init is called with a nil AppContext.

Functions

func ErrIs

func ErrIs(err, sentinel error) bool

ErrIs checks whether err wraps sentinel.

Types

type GatewayRoute

type GatewayRoute struct {
	MeshName           string
	VirtualGatewayName string
	GatewayRouteName   string
	Status             string
	Meta               ResourceMeta
	Spec               json.RawMessage
}

GatewayRoute is an App Mesh gateway route under a virtual gateway.

type GatewayRouteSummary

type GatewayRouteSummary struct {
	CreatedAt          time.Time
	UpdatedAt          time.Time
	Arn                string
	MeshName           string
	VirtualGatewayName string
	GatewayRouteName   string
	MeshOwner          string
	ResourceOwner      string
	Version            int64
}

GatewayRouteSummary is a gateway route entry in a list response.

type Handler

type Handler struct {
	Backend StorageBackend
}

Handler handles App Mesh HTTP requests.

func NewHandler

func NewHandler(b StorageBackend) *Handler

NewHandler constructs a new Handler.

func (*Handler) ExtractOperation

func (h *Handler) ExtractOperation(c *echo.Context) string

ExtractOperation returns the operation name for the request.

func (*Handler) ExtractResource

func (h *Handler) ExtractResource(c *echo.Context) string

ExtractResource returns the primary resource identifier.

func (*Handler) GetSupportedOperations

func (h *Handler) GetSupportedOperations() []string

GetSupportedOperations returns the list of supported operations.

func (*Handler) Handler

func (h *Handler) Handler() echo.HandlerFunc

Handler returns the echo handler function.

func (*Handler) MatchPriority

func (h *Handler) MatchPriority() int

MatchPriority returns the routing priority.

func (*Handler) Name

func (h *Handler) Name() string

Name returns the service name.

func (*Handler) Reset

func (h *Handler) Reset()

Reset resets the backend.

func (*Handler) Restore

func (h *Handler) Restore(ctx context.Context, data []byte) error

Restore implements persistence.Persistable by delegating to the backend.

func (*Handler) RouteMatcher

func (h *Handler) RouteMatcher() service.Matcher

RouteMatcher returns a function that matches App Mesh REST API requests.

func (*Handler) Snapshot

func (h *Handler) Snapshot(ctx context.Context) []byte

Snapshot implements persistence.Persistable by delegating to the backend. Neither the Handler nor the backend had a Snapshot/Restore pair before this conversion -- App Mesh had no persistence at all -- so cli.go's generic setupPersistence (which discovers services via a persistence.Persistable type assertion on the registered Handler) never picked App Mesh up. This adds the delegation, matching every other converted Phase 3.3 service.

type InMemoryBackend

type InMemoryBackend struct {
	// contains filtered or unexported fields
}

InMemoryBackend is a thread-safe in-memory App Mesh backend.

meshes, virtualNodes, virtualRouters, routes, virtualSvcs, virtualGWs, and gatewayRoutes are store.Table-backed (see store_setup.go for the Phase 3.3 datalayer conversion): meshes registers directly on its real, globally unique Name field; virtualNodes/virtualRouters/virtualSvcs/virtualGWs are mesh-nested, so each registers under the composite "meshName|name" key with a byMesh Index answering the per-mesh list scans the old map[string]map[string]*T nesting used to serve directly; routes and gatewayRoutes are nested one level deeper (under a virtual router / virtual gateway within a mesh), so each registers under a three-part composite key with a byRouter/byGateway Index over its two-part parent key. None of these value types needed a hidden field added for the composite key: every parent-identifying component (MeshName, VirtualRouterName, VirtualGatewayName) was already a real, wire-visible field on the value type itself.

tags (map[string]map[string]string, keyed by ARN rather than by a *T with its own identity) does not fit store.Table's keyed-collection shape and is left as a plain map; see persistence.go for how it round-trips through Snapshot/Restore alongside the registered tables.

func NewInMemoryBackend

func NewInMemoryBackend(accountID, region string) *InMemoryBackend

NewInMemoryBackend creates a new InMemoryBackend.

func (*InMemoryBackend) AccountID

func (b *InMemoryBackend) AccountID() string

func (*InMemoryBackend) CreateGatewayRoute

func (b *InMemoryBackend) CreateGatewayRoute(
	meshName, virtualGatewayName, routeName string, spec json.RawMessage, tags map[string]string,
) (*GatewayRoute, error)

func (*InMemoryBackend) CreateMesh

func (b *InMemoryBackend) CreateMesh(name string, spec json.RawMessage, tags map[string]string) (*Mesh, error)

func (*InMemoryBackend) CreateRoute

func (b *InMemoryBackend) CreateRoute(
	meshName, virtualRouterName, routeName string, spec json.RawMessage, tags map[string]string,
) (*Route, error)

func (*InMemoryBackend) CreateVirtualGateway

func (b *InMemoryBackend) CreateVirtualGateway(
	meshName, name string, spec json.RawMessage, tags map[string]string,
) (*VirtualGateway, error)

func (*InMemoryBackend) CreateVirtualNode

func (b *InMemoryBackend) CreateVirtualNode(
	meshName, name string, spec json.RawMessage, tags map[string]string,
) (*VirtualNode, error)

func (*InMemoryBackend) CreateVirtualRouter

func (b *InMemoryBackend) CreateVirtualRouter(
	meshName, name string, spec json.RawMessage, tags map[string]string,
) (*VirtualRouter, error)

func (*InMemoryBackend) CreateVirtualService

func (b *InMemoryBackend) CreateVirtualService(
	meshName, name string, spec json.RawMessage, tags map[string]string,
) (*VirtualService, error)

func (*InMemoryBackend) DeleteGatewayRoute

func (b *InMemoryBackend) DeleteGatewayRoute(meshName, virtualGatewayName, routeName string) (*GatewayRoute, error)

func (*InMemoryBackend) DeleteMesh

func (b *InMemoryBackend) DeleteMesh(name string) (*Mesh, error)

func (*InMemoryBackend) DeleteRoute

func (b *InMemoryBackend) DeleteRoute(meshName, virtualRouterName, routeName string) (*Route, error)

func (*InMemoryBackend) DeleteVirtualGateway

func (b *InMemoryBackend) DeleteVirtualGateway(meshName, name string) (*VirtualGateway, error)

func (*InMemoryBackend) DeleteVirtualNode

func (b *InMemoryBackend) DeleteVirtualNode(meshName, name string) (*VirtualNode, error)

func (*InMemoryBackend) DeleteVirtualRouter

func (b *InMemoryBackend) DeleteVirtualRouter(meshName, name string) (*VirtualRouter, error)

func (*InMemoryBackend) DeleteVirtualService

func (b *InMemoryBackend) DeleteVirtualService(meshName, name string) (*VirtualService, error)

func (*InMemoryBackend) DescribeGatewayRoute

func (b *InMemoryBackend) DescribeGatewayRoute(meshName, virtualGatewayName, routeName string) (*GatewayRoute, error)

func (*InMemoryBackend) DescribeMesh

func (b *InMemoryBackend) DescribeMesh(name string) (*Mesh, error)

func (*InMemoryBackend) DescribeRoute

func (b *InMemoryBackend) DescribeRoute(meshName, virtualRouterName, routeName string) (*Route, error)

func (*InMemoryBackend) DescribeVirtualGateway

func (b *InMemoryBackend) DescribeVirtualGateway(meshName, name string) (*VirtualGateway, error)

func (*InMemoryBackend) DescribeVirtualNode

func (b *InMemoryBackend) DescribeVirtualNode(meshName, name string) (*VirtualNode, error)

func (*InMemoryBackend) DescribeVirtualRouter

func (b *InMemoryBackend) DescribeVirtualRouter(meshName, name string) (*VirtualRouter, error)

func (*InMemoryBackend) DescribeVirtualService

func (b *InMemoryBackend) DescribeVirtualService(meshName, name string) (*VirtualService, error)

func (*InMemoryBackend) ListGatewayRoutes

func (b *InMemoryBackend) ListGatewayRoutes(
	meshName, virtualGatewayName string, maxResults int32, nextToken string,
) ([]*GatewayRouteSummary, string, error)

func (*InMemoryBackend) ListMeshes

func (b *InMemoryBackend) ListMeshes(maxResults int32, nextToken string) ([]*MeshSummary, string, error)

func (*InMemoryBackend) ListRoutes

func (b *InMemoryBackend) ListRoutes(
	meshName, virtualRouterName string, maxResults int32, nextToken string,
) ([]*RouteSummary, string, error)

func (*InMemoryBackend) ListTagsForResource

func (b *InMemoryBackend) ListTagsForResource(
	arn string,
	maxResults int32,
	nextToken string,
) ([]TagRef, string, error)

func (*InMemoryBackend) ListVirtualGateways

func (b *InMemoryBackend) ListVirtualGateways(
	meshName string, maxResults int32, nextToken string,
) ([]*VirtualGatewaySummary, string, error)

func (*InMemoryBackend) ListVirtualNodes

func (b *InMemoryBackend) ListVirtualNodes(
	meshName string, maxResults int32, nextToken string,
) ([]*VirtualNodeSummary, string, error)

func (*InMemoryBackend) ListVirtualRouters

func (b *InMemoryBackend) ListVirtualRouters(
	meshName string, maxResults int32, nextToken string,
) ([]*VirtualRouterSummary, string, error)

func (*InMemoryBackend) ListVirtualServices

func (b *InMemoryBackend) ListVirtualServices(
	meshName string, maxResults int32, nextToken string,
) ([]*VirtualServiceSummary, string, error)

func (*InMemoryBackend) Region

func (b *InMemoryBackend) Region() string

func (*InMemoryBackend) Reset

func (b *InMemoryBackend) Reset()

func (*InMemoryBackend) Restore

func (b *InMemoryBackend) Restore(ctx context.Context, data []byte) error

Restore loads backend state from a JSON snapshot. It implements persistence.Persistable.

func (*InMemoryBackend) Snapshot

func (b *InMemoryBackend) Snapshot(ctx context.Context) []byte

Snapshot serialises the backend state to JSON. It implements persistence.Persistable.

func (*InMemoryBackend) TagResource

func (b *InMemoryBackend) TagResource(arn string, tags map[string]string) error

func (*InMemoryBackend) UntagResource

func (b *InMemoryBackend) UntagResource(arn string, keys []string) error

func (*InMemoryBackend) UpdateGatewayRoute

func (b *InMemoryBackend) UpdateGatewayRoute(
	meshName, virtualGatewayName, routeName string, spec json.RawMessage,
) (*GatewayRoute, error)

func (*InMemoryBackend) UpdateMesh

func (b *InMemoryBackend) UpdateMesh(name string, spec json.RawMessage) (*Mesh, error)

func (*InMemoryBackend) UpdateRoute

func (b *InMemoryBackend) UpdateRoute(
	meshName, virtualRouterName, routeName string,
	spec json.RawMessage,
) (*Route, error)

func (*InMemoryBackend) UpdateVirtualGateway

func (b *InMemoryBackend) UpdateVirtualGateway(meshName, name string, spec json.RawMessage) (*VirtualGateway, error)

func (*InMemoryBackend) UpdateVirtualNode

func (b *InMemoryBackend) UpdateVirtualNode(meshName, name string, spec json.RawMessage) (*VirtualNode, error)

func (*InMemoryBackend) UpdateVirtualRouter

func (b *InMemoryBackend) UpdateVirtualRouter(meshName, name string, spec json.RawMessage) (*VirtualRouter, error)

func (*InMemoryBackend) UpdateVirtualService

func (b *InMemoryBackend) UpdateVirtualService(meshName, name string, spec json.RawMessage) (*VirtualService, error)

type Mesh

type Mesh struct {
	Name   string
	Status string
	Meta   ResourceMeta
	Spec   json.RawMessage
}

Mesh is an App Mesh service mesh.

type MeshSummary

type MeshSummary struct {
	CreatedAt     time.Time
	UpdatedAt     time.Time
	Arn           string
	Name          string
	MeshOwner     string
	ResourceOwner string
	Version       int64
}

MeshSummary is a mesh entry in a list response.

type Provider

type Provider struct{}

Provider implements service.Provider for the App Mesh service.

func (*Provider) Init

Init initializes the App Mesh backend and handler.

func (*Provider) Name

func (p *Provider) Name() string

Name returns the logical name of the provider.

type ResourceMeta

type ResourceMeta struct {
	CreatedAt     time.Time
	UpdatedAt     time.Time
	Arn           string
	UID           string
	MeshOwner     string
	ResourceOwner string
	Version       int64
}

ResourceMeta holds common metadata for App Mesh resources. CreatedAt is first to reduce GC pointer bytes for the non-pointer time prefix.

type Route

type Route struct {
	MeshName          string
	VirtualRouterName string
	RouteName         string
	Status            string
	Meta              ResourceMeta
	Spec              json.RawMessage
}

Route is an App Mesh route under a virtual router.

type RouteSummary

type RouteSummary struct {
	CreatedAt         time.Time
	UpdatedAt         time.Time
	Arn               string
	MeshName          string
	VirtualRouterName string
	RouteName         string
	MeshOwner         string
	ResourceOwner     string
	Version           int64
}

RouteSummary is a route entry in a list response.

type StorageBackend

type StorageBackend interface {
	// Snapshot and Restore implement persistence.Persistable. Handler
	// delegates to them (see persistence.go) so cli.go's generic
	// setupPersistence picks App Mesh up.
	Snapshot(ctx context.Context) []byte
	Restore(ctx context.Context, data []byte) error

	// Mesh operations
	CreateMesh(name string, spec json.RawMessage, tags map[string]string) (*Mesh, error)
	DescribeMesh(name string) (*Mesh, error)
	UpdateMesh(name string, spec json.RawMessage) (*Mesh, error)
	DeleteMesh(name string) (*Mesh, error)
	ListMeshes(maxResults int32, nextToken string) ([]*MeshSummary, string, error)

	// VirtualNode operations
	CreateVirtualNode(meshName, name string, spec json.RawMessage, tags map[string]string) (*VirtualNode, error)
	DescribeVirtualNode(meshName, name string) (*VirtualNode, error)
	UpdateVirtualNode(meshName, name string, spec json.RawMessage) (*VirtualNode, error)
	DeleteVirtualNode(meshName, name string) (*VirtualNode, error)
	ListVirtualNodes(meshName string, maxResults int32, nextToken string) ([]*VirtualNodeSummary, string, error)

	// VirtualRouter operations
	CreateVirtualRouter(meshName, name string, spec json.RawMessage, tags map[string]string) (*VirtualRouter, error)
	DescribeVirtualRouter(meshName, name string) (*VirtualRouter, error)
	UpdateVirtualRouter(meshName, name string, spec json.RawMessage) (*VirtualRouter, error)
	DeleteVirtualRouter(meshName, name string) (*VirtualRouter, error)
	ListVirtualRouters(meshName string, maxResults int32, nextToken string) ([]*VirtualRouterSummary, string, error)

	// Route operations (nested under virtual router)
	CreateRoute(
		meshName, virtualRouterName, routeName string,
		spec json.RawMessage,
		tags map[string]string,
	) (*Route, error)
	DescribeRoute(meshName, virtualRouterName, routeName string) (*Route, error)
	UpdateRoute(meshName, virtualRouterName, routeName string, spec json.RawMessage) (*Route, error)
	DeleteRoute(meshName, virtualRouterName, routeName string) (*Route, error)
	ListRoutes(meshName, virtualRouterName string, maxResults int32, nextToken string) ([]*RouteSummary, string, error)

	// VirtualService operations
	CreateVirtualService(meshName, name string, spec json.RawMessage, tags map[string]string) (*VirtualService, error)
	DescribeVirtualService(meshName, name string) (*VirtualService, error)
	UpdateVirtualService(meshName, name string, spec json.RawMessage) (*VirtualService, error)
	DeleteVirtualService(meshName, name string) (*VirtualService, error)
	ListVirtualServices(meshName string, maxResults int32, nextToken string) ([]*VirtualServiceSummary, string, error)

	// VirtualGateway operations
	CreateVirtualGateway(meshName, name string, spec json.RawMessage, tags map[string]string) (*VirtualGateway, error)
	DescribeVirtualGateway(meshName, name string) (*VirtualGateway, error)
	UpdateVirtualGateway(meshName, name string, spec json.RawMessage) (*VirtualGateway, error)
	DeleteVirtualGateway(meshName, name string) (*VirtualGateway, error)
	ListVirtualGateways(meshName string, maxResults int32, nextToken string) ([]*VirtualGatewaySummary, string, error)

	// GatewayRoute operations (nested under virtual gateway)
	CreateGatewayRoute(
		meshName, virtualGatewayName, routeName string,
		spec json.RawMessage,
		tags map[string]string,
	) (*GatewayRoute, error)
	DescribeGatewayRoute(meshName, virtualGatewayName, routeName string) (*GatewayRoute, error)
	UpdateGatewayRoute(meshName, virtualGatewayName, routeName string, spec json.RawMessage) (*GatewayRoute, error)
	DeleteGatewayRoute(meshName, virtualGatewayName, routeName string) (*GatewayRoute, error)
	ListGatewayRoutes(
		meshName, virtualGatewayName string,
		maxResults int32,
		nextToken string,
	) ([]*GatewayRouteSummary, string, error)

	// Tag operations
	TagResource(arn string, tags map[string]string) error
	UntagResource(arn string, keys []string) error
	ListTagsForResource(arn string, maxResults int32, nextToken string) ([]TagRef, string, error)

	AccountID() string
	Region() string
	Reset()
}

StorageBackend is the storage interface for the App Mesh service.

type TagRef

type TagRef struct {
	Key   string
	Value string
}

TagRef is a key-value tag pair returned in list responses.

type VirtualGateway

type VirtualGateway struct {
	MeshName           string
	VirtualGatewayName string
	Status             string
	Meta               ResourceMeta
	Spec               json.RawMessage
}

VirtualGateway is an App Mesh virtual gateway.

type VirtualGatewaySummary

type VirtualGatewaySummary struct {
	CreatedAt          time.Time
	UpdatedAt          time.Time
	Arn                string
	MeshName           string
	VirtualGatewayName string
	MeshOwner          string
	ResourceOwner      string
	Version            int64
}

VirtualGatewaySummary is a virtual gateway entry in a list response.

type VirtualNode

type VirtualNode struct {
	MeshName        string
	VirtualNodeName string
	Status          string
	Meta            ResourceMeta
	Spec            json.RawMessage
}

VirtualNode is an App Mesh virtual node.

type VirtualNodeSummary

type VirtualNodeSummary struct {
	CreatedAt       time.Time
	UpdatedAt       time.Time
	Arn             string
	MeshName        string
	VirtualNodeName string
	MeshOwner       string
	ResourceOwner   string
	Version         int64
}

VirtualNodeSummary is a virtual node entry in a list response.

type VirtualRouter

type VirtualRouter struct {
	MeshName          string
	VirtualRouterName string
	Status            string
	Meta              ResourceMeta
	Spec              json.RawMessage
}

VirtualRouter is an App Mesh virtual router.

type VirtualRouterSummary

type VirtualRouterSummary struct {
	CreatedAt         time.Time
	UpdatedAt         time.Time
	Arn               string
	MeshName          string
	VirtualRouterName string
	MeshOwner         string
	ResourceOwner     string
	Version           int64
}

VirtualRouterSummary is a virtual router entry in a list response.

type VirtualService

type VirtualService struct {
	MeshName           string
	VirtualServiceName string
	Status             string
	Meta               ResourceMeta
	Spec               json.RawMessage
}

VirtualService is an App Mesh virtual service.

type VirtualServiceSummary

type VirtualServiceSummary struct {
	CreatedAt          time.Time
	UpdatedAt          time.Time
	Arn                string
	MeshName           string
	VirtualServiceName string
	MeshOwner          string
	ResourceOwner      string
	Version            int64
}

VirtualServiceSummary is a virtual service entry in a list response.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL