Skip to content

Commit

Permalink
fix(appmesh): fix circular dependency by removing virtual service nam…
Browse files Browse the repository at this point in the history
…e reference for virtual node backends
  • Loading branch information
wplucinsky committed Jan 4, 2022
1 parent cd51a5d commit c3a5157
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 39 deletions.
18 changes: 18 additions & 0 deletions packages/@aws-cdk/aws-appmesh/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,24 @@ The `backends` property can be added with `node.addBackend()`. In the example, w

The `backendDefaults` property is added to the node while creating the virtual node. These are the virtual node's default settings for all backends.

Create a circular traffic flow by creating a `VirtualNode` with a backend that is a `VirtualService` whose `provider` is the same `VirtualNode`

```ts
declare const mesh: appmesh.Mesh;

const node = new appmesh.VirtualNode(this, 'node', {
mesh,
serviceDiscovery: appmesh.ServiceDiscovery.dns('node'),
});

const virtualService = new appmesh.VirtualService(this, 'service-1', {
virtualServiceProvider: appmesh.VirtualServiceProvider.virtualNode(node),
virtualServiceName: 'service1.domain.local',
});

node.addBackend(appmesh.Backend.virtualService(virtualService));
```

### Adding TLS to a listener

The `tls` property specifies TLS configuration when creating a listener for a virtual node or a virtual gateway.
Expand Down
8 changes: 7 additions & 1 deletion packages/@aws-cdk/aws-appmesh/lib/shared-interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ import { renderTlsClientPolicy } from './private/utils';
import { TlsClientPolicy } from './tls-client-policy';
import { IVirtualService } from './virtual-service';

// keep this import separate from other imports to reduce chance for merge conflicts with v2-main
// eslint-disable-next-line no-duplicate-imports, import/order
import { Token } from '@aws-cdk/core';

// keep this import separate from other imports to reduce chance for merge conflicts with v2-main
// eslint-disable-next-line no-duplicate-imports, import/order
import { Construct } from '@aws-cdk/core';
Expand Down Expand Up @@ -238,7 +242,9 @@ class VirtualServiceBackend extends Backend {
return {
virtualServiceBackend: {
virtualService: {
virtualServiceName: this.virtualService.virtualServiceName,
virtualServiceName: Token.isUnresolved(this.virtualService.virtualServiceName)
? (this.virtualService as any).physicalName
: this.virtualService.virtualServiceName,
clientPolicy: this.tlsClientPolicy
? {
tls: renderTlsClientPolicy(scope, this.tlsClientPolicy),
Expand Down
28 changes: 4 additions & 24 deletions packages/@aws-cdk/aws-appmesh/test/integ.mesh.expected.json
Original file line number Diff line number Diff line change
Expand Up @@ -1040,22 +1040,12 @@
"Backends": [
{
"VirtualService": {
"VirtualServiceName": {
"Fn::GetAtt": [
"service6D174F83",
"VirtualServiceName"
]
}
"VirtualServiceName": "service1.domain.local"
}
},
{
"VirtualService": {
"VirtualServiceName": {
"Fn::GetAtt": [
"service27C65CF7D",
"VirtualServiceName"
]
}
"VirtualServiceName": "service2.domain.local"
}
}
],
Expand Down Expand Up @@ -1111,12 +1101,7 @@
"Backends": [
{
"VirtualService": {
"VirtualServiceName": {
"Fn::GetAtt": [
"service3859EB104",
"VirtualServiceName"
]
}
"VirtualServiceName": "service3.domain.local"
}
}
],
Expand Down Expand Up @@ -1241,12 +1226,7 @@
"Backends": [
{
"VirtualService": {
"VirtualServiceName": {
"Fn::GetAtt": [
"service4983B61EE",
"VirtualServiceName"
]
}
"VirtualServiceName": "service4.domain.local"
}
}
],
Expand Down
4 changes: 1 addition & 3 deletions packages/@aws-cdk/aws-appmesh/test/mesh.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -314,9 +314,7 @@ describe('mesh', () => {
Backends: [
{
VirtualService: {
VirtualServiceName: {
'Fn::GetAtt': ['service1A48078CF', 'VirtualServiceName'],
},
VirtualServiceName: 'service1.domain.local',
},
},
],
Expand Down
57 changes: 46 additions & 11 deletions packages/@aws-cdk/aws-appmesh/test/virtual-node.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,24 +41,18 @@ describe('virtual node', () => {
Backends: [
{
VirtualService: {
VirtualServiceName: {
'Fn::GetAtt': ['service1A48078CF', 'VirtualServiceName'],
},
VirtualServiceName: 'service1.domain.local',
},
},
{
VirtualService: {
VirtualServiceName: {
'Fn::GetAtt': ['service27C65CF7D', 'VirtualServiceName'],
},
VirtualServiceName: 'service2.domain.local',
},
},
],
},
MeshOwner: ABSENT,
});


});
});

Expand Down Expand Up @@ -458,9 +452,7 @@ describe('virtual node', () => {
Backends: [
{
VirtualService: {
VirtualServiceName: {
'Fn::GetAtt': ['service1A48078CF', 'VirtualServiceName'],
},
VirtualServiceName: 'service1.domain.local',
ClientPolicy: {
TLS: {
Ports: [8080, 8081],
Expand All @@ -478,8 +470,51 @@ describe('virtual node', () => {
],
},
});
});

test('should add a backend virtual service to the resource without using a CDK Ref', () => {
// GIVEN
const stack = new cdk.Stack();

// WHEN
const mesh = new appmesh.Mesh(stack, 'mesh', {
meshName: 'test-mesh',
});

const node = new appmesh.VirtualNode(stack, 'test-node', {
mesh,
serviceDiscovery: appmesh.ServiceDiscovery.dns('test'),
});

const myVirtualService1 = new appmesh.VirtualService(stack, 'service-1', {
virtualServiceProvider: appmesh.VirtualServiceProvider.virtualNode(node),
});

const myVirtualService2 = new appmesh.VirtualService(stack, 'service-2', {
virtualServiceProvider: appmesh.VirtualServiceProvider.virtualNode(node),
virtualServiceName: 'service2.domain.local',
});

node.addBackend(appmesh.Backend.virtualService(myVirtualService1));
node.addBackend(appmesh.Backend.virtualService(myVirtualService2));

// THEN
expect(stack).toHaveResourceLike('AWS::AppMesh::VirtualNode', {
Spec: {
Backends: [
{
VirtualService: {
VirtualServiceName: 'service1',
},
},
{
VirtualService: {
VirtualServiceName: 'service2.domain.local',
},
},
],
},
});
});
});

Expand Down

0 comments on commit c3a5157

Please sign in to comment.