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            "type": "tree",
44            "rules": [
45                {
46                    "conditions": [
47                        {
48                            "fn": "booleanEquals",
49                            "argv": [
50                                {
51                                    "ref": "UseFIPS"
52                                },
53                                true
54                            ]
55                        }
56                    ],
57                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
58                    "type": "error"
59                },
60                {
61                    "conditions": [
62                        {
63                            "fn": "booleanEquals",
64                            "argv": [
65                                {
66                                    "ref": "UseDualStack"
67                                },
68                                true
69                            ]
70                        }
71                    ],
72                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
73                    "type": "error"
74                },
75                {
76                    "conditions": [],
77                    "endpoint": {
78                        "url": {
79                            "ref": "Endpoint"
80                        },
81                        "properties": {},
82                        "headers": {}
83                    },
84                    "type": "endpoint"
85                }
86            ]
87        },
88        {
89            "conditions": [
90                {
91                    "fn": "isSet",
92                    "argv": [
93                        {
94                            "ref": "Region"
95                        }
96                    ]
97                }
98            ],
99            "type": "tree",
100            "rules": [
101                {
102                    "conditions": [
103                        {
104                            "fn": "aws.partition",
105                            "argv": [
106                                {
107                                    "ref": "Region"
108                                }
109                            ],
110                            "assign": "PartitionResult"
111                        }
112                    ],
113                    "type": "tree",
114                    "rules": [
115                        {
116                            "conditions": [
117                                {
118                                    "fn": "booleanEquals",
119                                    "argv": [
120                                        {
121                                            "ref": "UseFIPS"
122                                        },
123                                        true
124                                    ]
125                                },
126                                {
127                                    "fn": "booleanEquals",
128                                    "argv": [
129                                        {
130                                            "ref": "UseDualStack"
131                                        },
132                                        true
133                                    ]
134                                }
135                            ],
136                            "type": "tree",
137                            "rules": [
138                                {
139                                    "conditions": [
140                                        {
141                                            "fn": "booleanEquals",
142                                            "argv": [
143                                                true,
144                                                {
145                                                    "fn": "getAttr",
146                                                    "argv": [
147                                                        {
148                                                            "ref": "PartitionResult"
149                                                        },
150                                                        "supportsFIPS"
151                                                    ]
152                                                }
153                                            ]
154                                        },
155                                        {
156                                            "fn": "booleanEquals",
157                                            "argv": [
158                                                true,
159                                                {
160                                                    "fn": "getAttr",
161                                                    "argv": [
162                                                        {
163                                                            "ref": "PartitionResult"
164                                                        },
165                                                        "supportsDualStack"
166                                                    ]
167                                                }
168                                            ]
169                                        }
170                                    ],
171                                    "type": "tree",
172                                    "rules": [
173                                        {
174                                            "conditions": [],
175                                            "endpoint": {
176                                                "url": "https://data-ats.iot-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
177                                                "properties": {},
178                                                "headers": {}
179                                            },
180                                            "type": "endpoint"
181                                        }
182                                    ]
183                                },
184                                {
185                                    "conditions": [],
186                                    "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
187                                    "type": "error"
188                                }
189                            ]
190                        },
191                        {
192                            "conditions": [
193                                {
194                                    "fn": "booleanEquals",
195                                    "argv": [
196                                        {
197                                            "ref": "UseFIPS"
198                                        },
199                                        true
200                                    ]
201                                }
202                            ],
203                            "type": "tree",
204                            "rules": [
205                                {
206                                    "conditions": [
207                                        {
208                                            "fn": "booleanEquals",
209                                            "argv": [
210                                                true,
211                                                {
212                                                    "fn": "getAttr",
213                                                    "argv": [
214                                                        {
215                                                            "ref": "PartitionResult"
216                                                        },
217                                                        "supportsFIPS"
218                                                    ]
219                                                }
220                                            ]
221                                        }
222                                    ],
223                                    "type": "tree",
224                                    "rules": [
225                                        {
226                                            "conditions": [
227                                                {
228                                                    "fn": "stringEquals",
229                                                    "argv": [
230                                                        {
231                                                            "ref": "Region"
232                                                        },
233                                                        "ca-central-1"
234                                                    ]
235                                                }
236                                            ],
237                                            "endpoint": {
238                                                "url": "https://data.iot-fips.ca-central-1.amazonaws.com",
239                                                "properties": {},
240                                                "headers": {}
241                                            },
242                                            "type": "endpoint"
243                                        },
244                                        {
245                                            "conditions": [
246                                                {
247                                                    "fn": "stringEquals",
248                                                    "argv": [
249                                                        {
250                                                            "ref": "Region"
251                                                        },
252                                                        "us-east-1"
253                                                    ]
254                                                }
255                                            ],
256                                            "endpoint": {
257                                                "url": "https://data.iot-fips.us-east-1.amazonaws.com",
258                                                "properties": {},
259                                                "headers": {}
260                                            },
261                                            "type": "endpoint"
262                                        },
263                                        {
264                                            "conditions": [
265                                                {
266                                                    "fn": "stringEquals",
267                                                    "argv": [
268                                                        {
269                                                            "ref": "Region"
270                                                        },
271                                                        "us-east-2"
272                                                    ]
273                                                }
274                                            ],
275                                            "endpoint": {
276                                                "url": "https://data.iot-fips.us-east-2.amazonaws.com",
277                                                "properties": {},
278                                                "headers": {}
279                                            },
280                                            "type": "endpoint"
281                                        },
282                                        {
283                                            "conditions": [
284                                                {
285                                                    "fn": "stringEquals",
286                                                    "argv": [
287                                                        {
288                                                            "ref": "Region"
289                                                        },
290                                                        "us-west-1"
291                                                    ]
292                                                }
293                                            ],
294                                            "endpoint": {
295                                                "url": "https://data.iot-fips.us-west-1.amazonaws.com",
296                                                "properties": {},
297                                                "headers": {}
298                                            },
299                                            "type": "endpoint"
300                                        },
301                                        {
302                                            "conditions": [
303                                                {
304                                                    "fn": "stringEquals",
305                                                    "argv": [
306                                                        {
307                                                            "ref": "Region"
308                                                        },
309                                                        "us-west-2"
310                                                    ]
311                                                }
312                                            ],
313                                            "endpoint": {
314                                                "url": "https://data.iot-fips.us-west-2.amazonaws.com",
315                                                "properties": {},
316                                                "headers": {}
317                                            },
318                                            "type": "endpoint"
319                                        },
320                                        {
321                                            "conditions": [
322                                                {
323                                                    "fn": "stringEquals",
324                                                    "argv": [
325                                                        {
326                                                            "ref": "Region"
327                                                        },
328                                                        "us-gov-east-1"
329                                                    ]
330                                                }
331                                            ],
332                                            "endpoint": {
333                                                "url": "https://data.iot-fips.us-gov-east-1.amazonaws.com",
334                                                "properties": {},
335                                                "headers": {}
336                                            },
337                                            "type": "endpoint"
338                                        },
339                                        {
340                                            "conditions": [
341                                                {
342                                                    "fn": "stringEquals",
343                                                    "argv": [
344                                                        {
345                                                            "ref": "Region"
346                                                        },
347                                                        "us-gov-west-1"
348                                                    ]
349                                                }
350                                            ],
351                                            "endpoint": {
352                                                "url": "https://data.iot-fips.us-gov-west-1.amazonaws.com",
353                                                "properties": {},
354                                                "headers": {}
355                                            },
356                                            "type": "endpoint"
357                                        },
358                                        {
359                                            "conditions": [],
360                                            "endpoint": {
361                                                "url": "https://data-ats.iot-fips.{Region}.{PartitionResult#dnsSuffix}",
362                                                "properties": {},
363                                                "headers": {}
364                                            },
365                                            "type": "endpoint"
366                                        }
367                                    ]
368                                },
369                                {
370                                    "conditions": [],
371                                    "error": "FIPS is enabled but this partition does not support FIPS",
372                                    "type": "error"
373                                }
374                            ]
375                        },
376                        {
377                            "conditions": [
378                                {
379                                    "fn": "booleanEquals",
380                                    "argv": [
381                                        {
382                                            "ref": "UseDualStack"
383                                        },
384                                        true
385                                    ]
386                                }
387                            ],
388                            "type": "tree",
389                            "rules": [
390                                {
391                                    "conditions": [
392                                        {
393                                            "fn": "booleanEquals",
394                                            "argv": [
395                                                true,
396                                                {
397                                                    "fn": "getAttr",
398                                                    "argv": [
399                                                        {
400                                                            "ref": "PartitionResult"
401                                                        },
402                                                        "supportsDualStack"
403                                                    ]
404                                                }
405                                            ]
406                                        }
407                                    ],
408                                    "type": "tree",
409                                    "rules": [
410                                        {
411                                            "conditions": [],
412                                            "endpoint": {
413                                                "url": "https://data-ats.iot.{Region}.{PartitionResult#dualStackDnsSuffix}",
414                                                "properties": {},
415                                                "headers": {}
416                                            },
417                                            "type": "endpoint"
418                                        }
419                                    ]
420                                },
421                                {
422                                    "conditions": [],
423                                    "error": "DualStack is enabled but this partition does not support DualStack",
424                                    "type": "error"
425                                }
426                            ]
427                        },
428                        {
429                            "conditions": [
430                                {
431                                    "fn": "stringEquals",
432                                    "argv": [
433                                        {
434                                            "ref": "Region"
435                                        },
436                                        "cn-north-1"
437                                    ]
438                                }
439                            ],
440                            "endpoint": {
441                                "url": "https://data.ats.iot.cn-north-1.amazonaws.com.cn",
442                                "properties": {},
443                                "headers": {}
444                            },
445                            "type": "endpoint"
446                        },
447                        {
448                            "conditions": [
449                                {
450                                    "fn": "stringEquals",
451                                    "argv": [
452                                        "aws",
453                                        {
454                                            "fn": "getAttr",
455                                            "argv": [
456                                                {
457                                                    "ref": "PartitionResult"
458                                                },
459                                                "name"
460                                            ]
461                                        }
462                                    ]
463                                }
464                            ],
465                            "endpoint": {
466                                "url": "https://data-ats.iot.{Region}.amazonaws.com",
467                                "properties": {},
468                                "headers": {}
469                            },
470                            "type": "endpoint"
471                        },
472                        {
473                            "conditions": [
474                                {
475                                    "fn": "stringEquals",
476                                    "argv": [
477                                        "aws-cn",
478                                        {
479                                            "fn": "getAttr",
480                                            "argv": [
481                                                {
482                                                    "ref": "PartitionResult"
483                                                },
484                                                "name"
485                                            ]
486                                        }
487                                    ]
488                                }
489                            ],
490                            "endpoint": {
491                                "url": "https://data-ats.iot.{Region}.amazonaws.com.cn",
492                                "properties": {},
493                                "headers": {}
494                            },
495                            "type": "endpoint"
496                        },
497                        {
498                            "conditions": [
499                                {
500                                    "fn": "stringEquals",
501                                    "argv": [
502                                        "aws-us-gov",
503                                        {
504                                            "fn": "getAttr",
505                                            "argv": [
506                                                {
507                                                    "ref": "PartitionResult"
508                                                },
509                                                "name"
510                                            ]
511                                        }
512                                    ]
513                                }
514                            ],
515                            "endpoint": {
516                                "url": "https://data-ats.iot.{Region}.amazonaws.com",
517                                "properties": {},
518                                "headers": {}
519                            },
520                            "type": "endpoint"
521                        },
522                        {
523                            "conditions": [],
524                            "endpoint": {
525                                "url": "https://data-ats.iot.{Region}.{PartitionResult#dnsSuffix}",
526                                "properties": {},
527                                "headers": {}
528                            },
529                            "type": "endpoint"
530                        }
531                    ]
532                }
533            ]
534        },
535        {
536            "conditions": [],
537            "error": "Invalid Configuration: Missing Region",
538            "type": "error"
539        }
540    ]
541}