Skip to content

Commit f4854cf

Browse files
docs(changelog): record the AWS::ServiceDiscovery resource family (#166)
1 parent f5220fd commit f4854cf

1 file changed

Lines changed: 44 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)