Virtual Node
Provides an AWS App Mesh virtual node resource.
Breaking Changes
Because of backward incompatible API changes (read here), aws.appmesh.VirtualNode resource definitions created with provider versions earlier than v2.3.0 will need to be modified:
Rename the
service_nameattribute of thednsobject tohostname.Replace the
backendsattribute of thespecobject with one or morebackendconfiguration blocks, settingvirtual_service_nameto the name of the service. The state associated with existing resources will automatically be migrated.
Example Usage
Basic
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.appmesh.VirtualNode;
import com.pulumi.aws.appmesh.VirtualNodeArgs;
import com.pulumi.aws.appmesh.inputs.VirtualNodeSpecArgs;
import com.pulumi.aws.appmesh.inputs.VirtualNodeSpecListenerArgs;
import com.pulumi.aws.appmesh.inputs.VirtualNodeSpecListenerPortMappingArgs;
import com.pulumi.aws.appmesh.inputs.VirtualNodeSpecServiceDiscoveryArgs;
import com.pulumi.aws.appmesh.inputs.VirtualNodeSpecServiceDiscoveryDnsArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var serviceb1 = new VirtualNode("serviceb1", VirtualNodeArgs.builder()
.meshName(aws_appmesh_mesh.simple().id())
.spec(VirtualNodeSpecArgs.builder()
.backends(VirtualNodeSpecBackendArgs.builder()
.virtualService(VirtualNodeSpecBackendVirtualServiceArgs.builder()
.virtualServiceName("servicea.simpleapp.local")
.build())
.build())
.listener(VirtualNodeSpecListenerArgs.builder()
.portMapping(VirtualNodeSpecListenerPortMappingArgs.builder()
.port(8080)
.protocol("http")
.build())
.build())
.serviceDiscovery(VirtualNodeSpecServiceDiscoveryArgs.builder()
.dns(VirtualNodeSpecServiceDiscoveryDnsArgs.builder()
.hostname("serviceb.simpleapp.local")
.build())
.build())
.build())
.build());
}
}AWS Cloud Map Service Discovery
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.servicediscovery.HttpNamespace;
import com.pulumi.aws.appmesh.VirtualNode;
import com.pulumi.aws.appmesh.VirtualNodeArgs;
import com.pulumi.aws.appmesh.inputs.VirtualNodeSpecArgs;
import com.pulumi.aws.appmesh.inputs.VirtualNodeSpecListenerArgs;
import com.pulumi.aws.appmesh.inputs.VirtualNodeSpecListenerPortMappingArgs;
import com.pulumi.aws.appmesh.inputs.VirtualNodeSpecServiceDiscoveryArgs;
import com.pulumi.aws.appmesh.inputs.VirtualNodeSpecServiceDiscoveryAwsCloudMapArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var example = new HttpNamespace("example");
var serviceb1 = new VirtualNode("serviceb1", VirtualNodeArgs.builder()
.meshName(aws_appmesh_mesh.simple().id())
.spec(VirtualNodeSpecArgs.builder()
.backends(VirtualNodeSpecBackendArgs.builder()
.virtualService(VirtualNodeSpecBackendVirtualServiceArgs.builder()
.virtualServiceName("servicea.simpleapp.local")
.build())
.build())
.listener(VirtualNodeSpecListenerArgs.builder()
.portMapping(VirtualNodeSpecListenerPortMappingArgs.builder()
.port(8080)
.protocol("http")
.build())
.build())
.serviceDiscovery(VirtualNodeSpecServiceDiscoveryArgs.builder()
.awsCloudMap(VirtualNodeSpecServiceDiscoveryAwsCloudMapArgs.builder()
.attributes(Map.of("stack", "blue"))
.serviceName("serviceb1")
.namespaceName(example.name())
.build())
.build())
.build())
.build());
}
}Listener Health Check
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.appmesh.VirtualNode;
import com.pulumi.aws.appmesh.VirtualNodeArgs;
import com.pulumi.aws.appmesh.inputs.VirtualNodeSpecArgs;
import com.pulumi.aws.appmesh.inputs.VirtualNodeSpecListenerArgs;
import com.pulumi.aws.appmesh.inputs.VirtualNodeSpecListenerPortMappingArgs;
import com.pulumi.aws.appmesh.inputs.VirtualNodeSpecListenerHealthCheckArgs;
import com.pulumi.aws.appmesh.inputs.VirtualNodeSpecServiceDiscoveryArgs;
import com.pulumi.aws.appmesh.inputs.VirtualNodeSpecServiceDiscoveryDnsArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var serviceb1 = new VirtualNode("serviceb1", VirtualNodeArgs.builder()
.meshName(aws_appmesh_mesh.simple().id())
.spec(VirtualNodeSpecArgs.builder()
.backends(VirtualNodeSpecBackendArgs.builder()
.virtualService(VirtualNodeSpecBackendVirtualServiceArgs.builder()
.virtualServiceName("servicea.simpleapp.local")
.build())
.build())
.listener(VirtualNodeSpecListenerArgs.builder()
.portMapping(VirtualNodeSpecListenerPortMappingArgs.builder()
.port(8080)
.protocol("http")
.build())
.healthCheck(VirtualNodeSpecListenerHealthCheckArgs.builder()
.protocol("http")
.path("/ping")
.healthyThreshold(2)
.unhealthyThreshold(2)
.timeoutMillis(2000)
.intervalMillis(5000)
.build())
.build())
.serviceDiscovery(VirtualNodeSpecServiceDiscoveryArgs.builder()
.dns(VirtualNodeSpecServiceDiscoveryDnsArgs.builder()
.hostname("serviceb.simpleapp.local")
.build())
.build())
.build())
.build());
}
}Logging
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.appmesh.VirtualNode;
import com.pulumi.aws.appmesh.VirtualNodeArgs;
import com.pulumi.aws.appmesh.inputs.VirtualNodeSpecArgs;
import com.pulumi.aws.appmesh.inputs.VirtualNodeSpecListenerArgs;
import com.pulumi.aws.appmesh.inputs.VirtualNodeSpecListenerPortMappingArgs;
import com.pulumi.aws.appmesh.inputs.VirtualNodeSpecServiceDiscoveryArgs;
import com.pulumi.aws.appmesh.inputs.VirtualNodeSpecServiceDiscoveryDnsArgs;
import com.pulumi.aws.appmesh.inputs.VirtualNodeSpecLoggingArgs;
import com.pulumi.aws.appmesh.inputs.VirtualNodeSpecLoggingAccessLogArgs;
import com.pulumi.aws.appmesh.inputs.VirtualNodeSpecLoggingAccessLogFileArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var serviceb1 = new VirtualNode("serviceb1", VirtualNodeArgs.builder()
.meshName(aws_appmesh_mesh.simple().id())
.spec(VirtualNodeSpecArgs.builder()
.backends(VirtualNodeSpecBackendArgs.builder()
.virtualService(VirtualNodeSpecBackendVirtualServiceArgs.builder()
.virtualServiceName("servicea.simpleapp.local")
.build())
.build())
.listener(VirtualNodeSpecListenerArgs.builder()
.portMapping(VirtualNodeSpecListenerPortMappingArgs.builder()
.port(8080)
.protocol("http")
.build())
.build())
.serviceDiscovery(VirtualNodeSpecServiceDiscoveryArgs.builder()
.dns(VirtualNodeSpecServiceDiscoveryDnsArgs.builder()
.hostname("serviceb.simpleapp.local")
.build())
.build())
.logging(VirtualNodeSpecLoggingArgs.builder()
.accessLog(VirtualNodeSpecLoggingAccessLogArgs.builder()
.file(VirtualNodeSpecLoggingAccessLogFileArgs.builder()
.path("/dev/stdout")
.build())
.build())
.build())
.build())
.build());
}
}Import
App Mesh virtual nodes can be imported using mesh_name together with the virtual node's name, e.g.,
$ pulumi import aws:appmesh/virtualNode:VirtualNode serviceb1 simpleapp/serviceBv1Properties
Creation date of the virtual node.
Last update date of the virtual node.
Resource owner's AWS account ID.
Virtual node specification to apply.