@@ -61,6 +61,50 @@ formae agent.
6161 the resource family still typed as a plain string, which forced the image to
6262 be pinned by hand and re-pinned on every rebuild.
6363
64+ - ` AWS::ServiceDiscovery::PrivateDnsNamespace ` and ` AWS::ServiceDiscovery::Service `
65+ support (AWS Cloud Map). A workload can now be registered for service discovery
66+ from a forma: declare a private DNS namespace, declare a service in it, and
67+ reference that service's ` res.arn ` from an ECS service's
68+ ` serviceRegistries[].registryArn ` . ECS then registers each task's address as
69+ the task starts and deregisters it as the task stops, so
70+ ` <service name>.<namespace name> ` resolves to the live task addresses inside
71+ the VPC. The ECS field already accepted a reference; until now there was no
72+ resource to point it at.
73+
74+ The namespace exposes ` res.id ` , ` res.arn ` , ` res.name ` and ` res.hostedZoneId `
75+ resolvables. The hosted zone id matters because Cloud Map creates and owns a
76+ Route53 private hosted zone for the namespace, and nothing else gives you a
77+ handle on it.
78+
79+ CloudControl reports the namespace type as non-provisionable, so the plugin
80+ drives it directly through the Cloud Map API. Its create, update and delete are
81+ asynchronous operations that the plugin polls to completion. A delete that AWS
82+ rejects because the namespace still holds services is retried under a single
83+ timeout rather than failed outright, since ECS deregisters task instances
84+ asynchronously after an ECS service is deleted and a stack destroy can
85+ legitimately reach the namespace while that is still settling.
86+
87+ Two limitations to know about before adopting this. The namespace's ` vpc ` is
88+ create-only and write-only, and the namespace is ** not extractable** : Cloud Map
89+ returns a namespace's VPC from no API and offers no way to change it, so an
90+ extract could never populate the field and a namespace created outside formae
91+ cannot be brought under management by extracting it. Discovery still lists
92+ namespaces; only extraction is unavailable. Second, a namespace name must be
93+ unique within a VPC, and a colliding create is accepted and then fails
94+ asynchronously with a hosted-zone conflict rather than being rejected up front.
95+
96+ On the service, ` dnsConfig.dnsRecords ` is replaced as a whole on update, which
97+ is what the AWS API itself does with that list. Health checking is Cloud Map's
98+ own ` healthCheckCustomConfig ` for services in a private namespace;
99+ ` healthCheckConfig ` is only valid in a public namespace and AWS rejects it
100+ otherwise.
101+
102+ Deliberately not modelled in this version: ` HttpNamespace ` ,
103+ ` PublicDnsNamespace ` , and ` Instance ` . Instances are registered and deregistered
104+ by ECS itself, and the other two namespace types are non-provisionable in the
105+ same way as the private one, so each would need its own provisioner rather than
106+ coming for free with a schema.
107+
64108### Changed
65109
66110- ** Breaking.** ` AWS::CodeBuild::ImageBuild ` is now a pure build-and-push
0 commit comments