Skip to content

Commit 8ab920b

Browse files
authored
fix(app-mesh): Missing port property in gRPC routers matchers (#25868)
As described in the related issue, `GrpcRouteMatch` L2 construct was missing `port` property which is already present in the L1 construct `CfnRoute`. This PR adds the missing `port` property to `GrpcRouteMatch` L2 construct and also adds `port` property to `GrpcGatewayRouteMatch` and `HttpRouteMatch` L2 constructs that were also missing it. The PR includes unit and integration tests expansion to cover this new property plus a reference to the property in the appmesh README file. Closes #25810. ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
1 parent 1cb9351 commit 8ab920b

File tree

16 files changed

+2803
-5
lines changed

16 files changed

+2803
-5
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"version": "32.0.0",
3+
"files": {
4+
"21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": {
5+
"source": {
6+
"path": "appmeshroutesportmatchersDefaultTestDeployAssert40D7C50D.template.json",
7+
"packaging": "file"
8+
},
9+
"destinations": {
10+
"current_account-current_region": {
11+
"bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}",
12+
"objectKey": "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json",
13+
"assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}"
14+
}
15+
}
16+
}
17+
},
18+
"dockerImages": {}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
{
2+
"Parameters": {
3+
"BootstrapVersion": {
4+
"Type": "AWS::SSM::Parameter::Value<String>",
5+
"Default": "/cdk-bootstrap/hnb659fds/version",
6+
"Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]"
7+
}
8+
},
9+
"Rules": {
10+
"CheckBootstrapVersion": {
11+
"Assertions": [
12+
{
13+
"Assert": {
14+
"Fn::Not": [
15+
{
16+
"Fn::Contains": [
17+
[
18+
"1",
19+
"2",
20+
"3",
21+
"4",
22+
"5"
23+
],
24+
{
25+
"Ref": "BootstrapVersion"
26+
}
27+
]
28+
}
29+
]
30+
},
31+
"AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI."
32+
}
33+
]
34+
}
35+
}
36+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"version":"32.0.0"}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"version": "32.0.0",
3+
"testCases": {
4+
"appmesh-routes-port-matchers/DefaultTest": {
5+
"stacks": [
6+
"mesh-stack"
7+
],
8+
"assertionStack": "appmesh-routes-port-matchers/DefaultTest/DeployAssert",
9+
"assertionStackName": "appmeshroutesportmatchersDefaultTestDeployAssert40D7C50D"
10+
}
11+
}
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,315 @@
1+
{
2+
"version": "32.0.0",
3+
"artifacts": {
4+
"mesh-stack.assets": {
5+
"type": "cdk:asset-manifest",
6+
"properties": {
7+
"file": "mesh-stack.assets.json",
8+
"requiresBootstrapStackVersion": 6,
9+
"bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version"
10+
}
11+
},
12+
"mesh-stack": {
13+
"type": "aws:cloudformation:stack",
14+
"environment": "aws://unknown-account/unknown-region",
15+
"properties": {
16+
"templateFile": "mesh-stack.template.json",
17+
"validateOnSynth": false,
18+
"assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}",
19+
"cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}",
20+
"stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/22240821b1bd2dffca97a9e0b581bf2d1a2dc32765da9872c066c10f315cd391.json",
21+
"requiresBootstrapStackVersion": 6,
22+
"bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version",
23+
"additionalDependencies": [
24+
"mesh-stack.assets"
25+
],
26+
"lookupRole": {
27+
"arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}",
28+
"requiresBootstrapStackVersion": 8,
29+
"bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version"
30+
}
31+
},
32+
"dependencies": [
33+
"mesh-stack.assets"
34+
],
35+
"metadata": {
36+
"/mesh-stack/vpc/Resource": [
37+
{
38+
"type": "aws:cdk:logicalId",
39+
"data": "vpcA2121C38"
40+
}
41+
],
42+
"/mesh-stack/vpc/PublicSubnet1/Subnet": [
43+
{
44+
"type": "aws:cdk:logicalId",
45+
"data": "vpcPublicSubnet1Subnet2E65531E"
46+
}
47+
],
48+
"/mesh-stack/vpc/PublicSubnet1/RouteTable": [
49+
{
50+
"type": "aws:cdk:logicalId",
51+
"data": "vpcPublicSubnet1RouteTable48A2DF9B"
52+
}
53+
],
54+
"/mesh-stack/vpc/PublicSubnet1/RouteTableAssociation": [
55+
{
56+
"type": "aws:cdk:logicalId",
57+
"data": "vpcPublicSubnet1RouteTableAssociation5D3F4579"
58+
}
59+
],
60+
"/mesh-stack/vpc/PublicSubnet1/DefaultRoute": [
61+
{
62+
"type": "aws:cdk:logicalId",
63+
"data": "vpcPublicSubnet1DefaultRoute10708846"
64+
}
65+
],
66+
"/mesh-stack/vpc/PublicSubnet1/EIP": [
67+
{
68+
"type": "aws:cdk:logicalId",
69+
"data": "vpcPublicSubnet1EIPDA49DCBE"
70+
}
71+
],
72+
"/mesh-stack/vpc/PublicSubnet1/NATGateway": [
73+
{
74+
"type": "aws:cdk:logicalId",
75+
"data": "vpcPublicSubnet1NATGateway9C16659E"
76+
}
77+
],
78+
"/mesh-stack/vpc/PublicSubnet2/Subnet": [
79+
{
80+
"type": "aws:cdk:logicalId",
81+
"data": "vpcPublicSubnet2Subnet009B674F"
82+
}
83+
],
84+
"/mesh-stack/vpc/PublicSubnet2/RouteTable": [
85+
{
86+
"type": "aws:cdk:logicalId",
87+
"data": "vpcPublicSubnet2RouteTableEB40D4CB"
88+
}
89+
],
90+
"/mesh-stack/vpc/PublicSubnet2/RouteTableAssociation": [
91+
{
92+
"type": "aws:cdk:logicalId",
93+
"data": "vpcPublicSubnet2RouteTableAssociation21F81B59"
94+
}
95+
],
96+
"/mesh-stack/vpc/PublicSubnet2/DefaultRoute": [
97+
{
98+
"type": "aws:cdk:logicalId",
99+
"data": "vpcPublicSubnet2DefaultRouteA1EC0F60"
100+
}
101+
],
102+
"/mesh-stack/vpc/PrivateSubnet1/Subnet": [
103+
{
104+
"type": "aws:cdk:logicalId",
105+
"data": "vpcPrivateSubnet1Subnet934893E8"
106+
}
107+
],
108+
"/mesh-stack/vpc/PrivateSubnet1/RouteTable": [
109+
{
110+
"type": "aws:cdk:logicalId",
111+
"data": "vpcPrivateSubnet1RouteTableB41A48CC"
112+
}
113+
],
114+
"/mesh-stack/vpc/PrivateSubnet1/RouteTableAssociation": [
115+
{
116+
"type": "aws:cdk:logicalId",
117+
"data": "vpcPrivateSubnet1RouteTableAssociation67945127"
118+
}
119+
],
120+
"/mesh-stack/vpc/PrivateSubnet1/DefaultRoute": [
121+
{
122+
"type": "aws:cdk:logicalId",
123+
"data": "vpcPrivateSubnet1DefaultRoute1AA8E2E5"
124+
}
125+
],
126+
"/mesh-stack/vpc/PrivateSubnet2/Subnet": [
127+
{
128+
"type": "aws:cdk:logicalId",
129+
"data": "vpcPrivateSubnet2Subnet7031C2BA"
130+
}
131+
],
132+
"/mesh-stack/vpc/PrivateSubnet2/RouteTable": [
133+
{
134+
"type": "aws:cdk:logicalId",
135+
"data": "vpcPrivateSubnet2RouteTable7280F23E"
136+
}
137+
],
138+
"/mesh-stack/vpc/PrivateSubnet2/RouteTableAssociation": [
139+
{
140+
"type": "aws:cdk:logicalId",
141+
"data": "vpcPrivateSubnet2RouteTableAssociation007E94D3"
142+
}
143+
],
144+
"/mesh-stack/vpc/PrivateSubnet2/DefaultRoute": [
145+
{
146+
"type": "aws:cdk:logicalId",
147+
"data": "vpcPrivateSubnet2DefaultRouteB0E07F99"
148+
}
149+
],
150+
"/mesh-stack/vpc/IGW": [
151+
{
152+
"type": "aws:cdk:logicalId",
153+
"data": "vpcIGWE57CBDCA"
154+
}
155+
],
156+
"/mesh-stack/vpc/VPCGW": [
157+
{
158+
"type": "aws:cdk:logicalId",
159+
"data": "vpcVPCGW7984C166"
160+
}
161+
],
162+
"/mesh-stack/test-namespace/Resource": [
163+
{
164+
"type": "aws:cdk:logicalId",
165+
"data": "testnamespace01FA2CAF"
166+
}
167+
],
168+
"/mesh-stack/mesh/Resource": [
169+
{
170+
"type": "aws:cdk:logicalId",
171+
"data": "meshACDFE68E"
172+
}
173+
],
174+
"/mesh-stack/mesh/http-router/Resource": [
175+
{
176+
"type": "aws:cdk:logicalId",
177+
"data": "meshhttprouter1DC8881A"
178+
}
179+
],
180+
"/mesh-stack/mesh/http-router/http-route/Resource": [
181+
{
182+
"type": "aws:cdk:logicalId",
183+
"data": "meshhttprouterhttprouteA1EC61B9"
184+
}
185+
],
186+
"/mesh-stack/mesh/grpc-router/Resource": [
187+
{
188+
"type": "aws:cdk:logicalId",
189+
"data": "meshgrpcrouter885C4D83"
190+
}
191+
],
192+
"/mesh-stack/mesh/grpc-router/grpc-route/Resource": [
193+
{
194+
"type": "aws:cdk:logicalId",
195+
"data": "meshgrpcroutergrpcrouteC2C69C40"
196+
}
197+
],
198+
"/mesh-stack/mesh/http-node/Resource": [
199+
{
200+
"type": "aws:cdk:logicalId",
201+
"data": "meshhttpnode26144F8B"
202+
}
203+
],
204+
"/mesh-stack/mesh/grpc-node/Resource": [
205+
{
206+
"type": "aws:cdk:logicalId",
207+
"data": "meshgrpcnode5DE90B75"
208+
}
209+
],
210+
"/mesh-stack/mesh/gateway/Resource": [
211+
{
212+
"type": "aws:cdk:logicalId",
213+
"data": "meshgateway7E10276F"
214+
}
215+
],
216+
"/mesh-stack/mesh/gateway/gateway-route-http/Resource": [
217+
{
218+
"type": "aws:cdk:logicalId",
219+
"data": "meshgatewaygatewayroutehttpFC878A78"
220+
}
221+
],
222+
"/mesh-stack/mesh/gateway2/Resource": [
223+
{
224+
"type": "aws:cdk:logicalId",
225+
"data": "meshgateway2A278D68E"
226+
}
227+
],
228+
"/mesh-stack/mesh/gateway2/gateway2-route-grpc/Resource": [
229+
{
230+
"type": "aws:cdk:logicalId",
231+
"data": "meshgateway2gateway2routegrpcD0DA968B"
232+
}
233+
],
234+
"/mesh-stack/http-service/Resource": [
235+
{
236+
"type": "aws:cdk:logicalId",
237+
"data": "httpserviceA998E5F0"
238+
}
239+
],
240+
"/mesh-stack/grpc-service/Resource": [
241+
{
242+
"type": "aws:cdk:logicalId",
243+
"data": "grpcserviceF42BA24D"
244+
}
245+
],
246+
"/mesh-stack/BootstrapVersion": [
247+
{
248+
"type": "aws:cdk:logicalId",
249+
"data": "BootstrapVersion"
250+
}
251+
],
252+
"/mesh-stack/CheckBootstrapVersion": [
253+
{
254+
"type": "aws:cdk:logicalId",
255+
"data": "CheckBootstrapVersion"
256+
}
257+
]
258+
},
259+
"displayName": "mesh-stack"
260+
},
261+
"appmeshroutesportmatchersDefaultTestDeployAssert40D7C50D.assets": {
262+
"type": "cdk:asset-manifest",
263+
"properties": {
264+
"file": "appmeshroutesportmatchersDefaultTestDeployAssert40D7C50D.assets.json",
265+
"requiresBootstrapStackVersion": 6,
266+
"bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version"
267+
}
268+
},
269+
"appmeshroutesportmatchersDefaultTestDeployAssert40D7C50D": {
270+
"type": "aws:cloudformation:stack",
271+
"environment": "aws://unknown-account/unknown-region",
272+
"properties": {
273+
"templateFile": "appmeshroutesportmatchersDefaultTestDeployAssert40D7C50D.template.json",
274+
"validateOnSynth": false,
275+
"assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}",
276+
"cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}",
277+
"stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json",
278+
"requiresBootstrapStackVersion": 6,
279+
"bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version",
280+
"additionalDependencies": [
281+
"appmeshroutesportmatchersDefaultTestDeployAssert40D7C50D.assets"
282+
],
283+
"lookupRole": {
284+
"arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}",
285+
"requiresBootstrapStackVersion": 8,
286+
"bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version"
287+
}
288+
},
289+
"dependencies": [
290+
"appmeshroutesportmatchersDefaultTestDeployAssert40D7C50D.assets"
291+
],
292+
"metadata": {
293+
"/appmesh-routes-port-matchers/DefaultTest/DeployAssert/BootstrapVersion": [
294+
{
295+
"type": "aws:cdk:logicalId",
296+
"data": "BootstrapVersion"
297+
}
298+
],
299+
"/appmesh-routes-port-matchers/DefaultTest/DeployAssert/CheckBootstrapVersion": [
300+
{
301+
"type": "aws:cdk:logicalId",
302+
"data": "CheckBootstrapVersion"
303+
}
304+
]
305+
},
306+
"displayName": "appmesh-routes-port-matchers/DefaultTest/DeployAssert"
307+
},
308+
"Tree": {
309+
"type": "cdk:tree",
310+
"properties": {
311+
"file": "tree.json"
312+
}
313+
}
314+
}
315+
}

0 commit comments

Comments
 (0)