Skip to content
GitHubXDiscord

VirtualNode

The VirtualNode resource lets you manage AWS AppMesh VirtualNodes that define the communication between your services in a mesh. VirtualNodes are key components that represent a logical pointer to a service and facilitate traffic routing.

This example demonstrates how to create a basic VirtualNode with required properties and one optional property.

import AWS from "alchemy/aws/control";
const virtualNode = await AWS.AppMesh.VirtualNode("basicVirtualNode", {
MeshName: "myAppMesh",
Spec: {
ServiceDiscovery: {
DNS: {
Hostname: "my-service.local"
}
},
Listeners: [
{
PortMapping: {
Port: 8080,
Protocol: "http"
}
}
]
},
VirtualNodeName: "myVirtualNode"
});

This example illustrates how to configure a VirtualNode with enhanced settings, such as health checks and additional listeners.

const advancedVirtualNode = await AWS.AppMesh.VirtualNode("advancedVirtualNode", {
MeshName: "myAppMesh",
Spec: {
ServiceDiscovery: {
DNS: {
Hostname: "my-service.local"
}
},
Listeners: [
{
PortMapping: {
Port: 8080,
Protocol: "http"
},
HealthCheck: {
HealthyThreshold: 2,
IntervalMillis: 5000,
TimeoutMillis: 2000,
UnhealthyThreshold: 2,
Path: "/health",
Protocol: "http"
}
},
{
PortMapping: {
Port: 8443,
Protocol: "http2"
}
}
]
},
VirtualNodeName: "myAdvancedVirtualNode",
Tags: [{ Key: "Environment", Value: "Production" }]
});

This example shows how to define a VirtualNode with traffic routing to multiple services based on weights.

const trafficRoutingVirtualNode = await AWS.AppMesh.VirtualNode("trafficRoutingVirtualNode", {
MeshName: "myAppMesh",
Spec: {
ServiceDiscovery: {
DNS: {
Hostname: "my-service.local"
}
},
Listeners: [
{
PortMapping: {
Port: 8080,
Protocol: "http"
}
}
],
BackendDefaults: {
ClientPolicy: {
TLS: {
Enforce: true,
Ports: [8080],
Validation: {
Trust: {
CertificateAuthorityArns: ["arn:aws:acm:region:account-id:certificate/certificate-id"]
}
}
}
}
}
},
VirtualNodeName: "myTrafficRoutingVirtualNode"
});