1{
2    "version": "1.0",
3    "parameters": {
4        "Region": {
5            "builtIn": "AWS::Region",
6            "required": false,
7            "documentation": "The AWS region used to dispatch the request.",
8            "type": "String"
9        },
10        "UseDualStack": {
11            "builtIn": "AWS::UseDualStack",
12            "required": true,
13            "default": false,
14            "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
15            "type": "Boolean"
16        },
17        "UseFIPS": {
18            "builtIn": "AWS::UseFIPS",
19            "required": true,
20            "default": false,
21            "documentation": "When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.",
22            "type": "Boolean"
23        },
24        "Endpoint": {
25            "builtIn": "SDK::Endpoint",
26            "required": false,
27            "documentation": "Override the endpoint used to send this request",
28            "type": "String"
29        }
30    },
31    "rules": [
32        {
33            "conditions": [
34                {
35                    "fn": "isSet",
36                    "argv": [
37                        {
38                            "ref": "Endpoint"
39                        }
40                    ]
41                }
42            ],
43            "rules": [
44                {
45                    "conditions": [
46                        {
47                            "fn": "booleanEquals",
48                            "argv": [
49                                {
50                                    "ref": "UseFIPS"
51                                },
52                                true
53                            ]
54                        }
55                    ],
56                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
57                    "type": "error"
58                },
59                {
60                    "conditions": [
61                        {
62                            "fn": "booleanEquals",
63                            "argv": [
64                                {
65                                    "ref": "UseDualStack"
66                                },
67                                true
68                            ]
69                        }
70                    ],
71                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
72                    "type": "error"
73                },
74                {
75                    "conditions": [],
76                    "endpoint": {
77                        "url": {
78                            "ref": "Endpoint"
79                        },
80                        "properties": {},
81                        "headers": {}
82                    },
83                    "type": "endpoint"
84                }
85            ],
86            "type": "tree"
87        },
88        {
89            "conditions": [
90                {
91                    "fn": "isSet",
92                    "argv": [
93                        {
94                            "ref": "Region"
95                        }
96                    ]
97                }
98            ],
99            "rules": [
100                {
101                    "conditions": [
102                        {
103                            "fn": "aws.partition",
104                            "argv": [
105                                {
106                                    "ref": "Region"
107                                }
108                            ],
109                            "assign": "PartitionResult"
110                        }
111                    ],
112                    "rules": [
113                        {
114                            "conditions": [
115                                {
116                                    "fn": "booleanEquals",
117                                    "argv": [
118                                        {
119                                            "ref": "UseFIPS"
120                                        },
121                                        true
122                                    ]
123                                },
124                                {
125                                    "fn": "booleanEquals",
126                                    "argv": [
127                                        {
128                                            "ref": "UseDualStack"
129                                        },
130                                        true
131                                    ]
132                                }
133                            ],
134                            "rules": [
135                                {
136                                    "conditions": [
137                                        {
138                                            "fn": "booleanEquals",
139                                            "argv": [
140                                                true,
141                                                {
142                                                    "fn": "getAttr",
143                                                    "argv": [
144                                                        {
145                                                            "ref": "PartitionResult"
146                                                        },
147                                                        "supportsFIPS"
148                                                    ]
149                                                }
150                                            ]
151                                        },
152                                        {
153                                            "fn": "booleanEquals",
154                                            "argv": [
155                                                true,
156                                                {
157                                                    "fn": "getAttr",
158                                                    "argv": [
159                                                        {
160                                                            "ref": "PartitionResult"
161                                                        },
162                                                        "supportsDualStack"
163                                                    ]
164                                                }
165                                            ]
166                                        }
167                                    ],
168                                    "rules": [
169                                        {
170                                            "conditions": [],
171                                            "endpoint": {
172                                                "url": "https://pinpoint-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
173                                                "properties": {},
174                                                "headers": {}
175                                            },
176                                            "type": "endpoint"
177                                        }
178                                    ],
179                                    "type": "tree"
180                                },
181                                {
182                                    "conditions": [],
183                                    "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
184                                    "type": "error"
185                                }
186                            ],
187                            "type": "tree"
188                        },
189                        {
190                            "conditions": [
191                                {
192                                    "fn": "booleanEquals",
193                                    "argv": [
194                                        {
195                                            "ref": "UseFIPS"
196                                        },
197                                        true
198                                    ]
199                                }
200                            ],
201                            "rules": [
202                                {
203                                    "conditions": [
204                                        {
205                                            "fn": "booleanEquals",
206                                            "argv": [
207                                                {
208                                                    "fn": "getAttr",
209                                                    "argv": [
210                                                        {
211                                                            "ref": "PartitionResult"
212                                                        },
213                                                        "supportsFIPS"
214                                                    ]
215                                                },
216                                                true
217                                            ]
218                                        }
219                                    ],
220                                    "rules": [
221                                        {
222                                            "conditions": [],
223                                            "endpoint": {
224                                                "url": "https://pinpoint-fips.{Region}.{PartitionResult#dnsSuffix}",
225                                                "properties": {},
226                                                "headers": {}
227                                            },
228                                            "type": "endpoint"
229                                        }
230                                    ],
231                                    "type": "tree"
232                                },
233                                {
234                                    "conditions": [],
235                                    "error": "FIPS is enabled but this partition does not support FIPS",
236                                    "type": "error"
237                                }
238                            ],
239                            "type": "tree"
240                        },
241                        {
242                            "conditions": [
243                                {
244                                    "fn": "booleanEquals",
245                                    "argv": [
246                                        {
247                                            "ref": "UseDualStack"
248                                        },
249                                        true
250                                    ]
251                                }
252                            ],
253                            "rules": [
254                                {
255                                    "conditions": [
256                                        {
257                                            "fn": "booleanEquals",
258                                            "argv": [
259                                                true,
260                                                {
261                                                    "fn": "getAttr",
262                                                    "argv": [
263                                                        {
264                                                            "ref": "PartitionResult"
265                                                        },
266                                                        "supportsDualStack"
267                                                    ]
268                                                }
269                                            ]
270                                        }
271                                    ],
272                                    "rules": [
273                                        {
274                                            "conditions": [],
275                                            "endpoint": {
276                                                "url": "https://pinpoint.{Region}.{PartitionResult#dualStackDnsSuffix}",
277                                                "properties": {},
278                                                "headers": {}
279                                            },
280                                            "type": "endpoint"
281                                        }
282                                    ],
283                                    "type": "tree"
284                                },
285                                {
286                                    "conditions": [],
287                                    "error": "DualStack is enabled but this partition does not support DualStack",
288                                    "type": "error"
289                                }
290                            ],
291                            "type": "tree"
292                        },
293                        {
294                            "conditions": [
295                                {
296                                    "fn": "stringEquals",
297                                    "argv": [
298                                        {
299                                            "ref": "Region"
300                                        },
301                                        "us-east-1"
302                                    ]
303                                }
304                            ],
305                            "endpoint": {
306                                "url": "https://pinpoint.us-east-1.amazonaws.com",
307                                "properties": {},
308                                "headers": {}
309                            },
310                            "type": "endpoint"
311                        },
312                        {
313                            "conditions": [
314                                {
315                                    "fn": "stringEquals",
316                                    "argv": [
317                                        {
318                                            "ref": "Region"
319                                        },
320                                        "us-west-2"
321                                    ]
322                                }
323                            ],
324                            "endpoint": {
325                                "url": "https://pinpoint.us-west-2.amazonaws.com",
326                                "properties": {},
327                                "headers": {}
328                            },
329                            "type": "endpoint"
330                        },
331                        {
332                            "conditions": [
333                                {
334                                    "fn": "stringEquals",
335                                    "argv": [
336                                        {
337                                            "ref": "Region"
338                                        },
339                                        "us-gov-west-1"
340                                    ]
341                                }
342                            ],
343                            "endpoint": {
344                                "url": "https://pinpoint.us-gov-west-1.amazonaws.com",
345                                "properties": {},
346                                "headers": {}
347                            },
348                            "type": "endpoint"
349                        },
350                        {
351                            "conditions": [
352                                {
353                                    "fn": "stringEquals",
354                                    "argv": [
355                                        "aws",
356                                        {
357                                            "fn": "getAttr",
358                                            "argv": [
359                                                {
360                                                    "ref": "PartitionResult"
361                                                },
362                                                "name"
363                                            ]
364                                        }
365                                    ]
366                                }
367                            ],
368                            "endpoint": {
369                                "url": "https://pinpoint.{Region}.amazonaws.com",
370                                "properties": {},
371                                "headers": {}
372                            },
373                            "type": "endpoint"
374                        },
375                        {
376                            "conditions": [
377                                {
378                                    "fn": "stringEquals",
379                                    "argv": [
380                                        "aws-us-gov",
381                                        {
382                                            "fn": "getAttr",
383                                            "argv": [
384                                                {
385                                                    "ref": "PartitionResult"
386                                                },
387                                                "name"
388                                            ]
389                                        }
390                                    ]
391                                }
392                            ],
393                            "endpoint": {
394                                "url": "https://pinpoint.{Region}.amazonaws.com",
395                                "properties": {},
396                                "headers": {}
397                            },
398                            "type": "endpoint"
399                        },
400                        {
401                            "conditions": [],
402                            "endpoint": {
403                                "url": "https://pinpoint.{Region}.{PartitionResult#dnsSuffix}",
404                                "properties": {},
405                                "headers": {}
406                            },
407                            "type": "endpoint"
408                        }
409                    ],
410                    "type": "tree"
411                }
412            ],
413            "type": "tree"
414        },
415        {
416            "conditions": [],
417            "error": "Invalid Configuration: Missing Region",
418            "type": "error"
419        }
420    ]
421}