cloud-gov / cf-cdn-service-broker

A Cloud Foundry service broker for CloudFront and Let's Encrypt
Other
10 stars 13 forks source link

Minimal downtime on migration #66

Closed jmcarp closed 7 years ago

jmcarp commented 7 years ago

If users want to transfer a custom domain from east/west to govcloud, they'll create a new instance in govcloud, set up a CNAME or ALIAS record, and wait for the broker to provision and upload a certificate. During the provisioning step, the domain will be CNAME'd to a cloudfront distribution without a matching certificate, so requests to the domain will fail. Ideally, users should be able to migrate without downtime.

Some options:

cnelson commented 7 years ago

this might be a little tricky.

Can you elaborate? I briefly looked at this and thought the manual DNS provider would make this pretty simple. What did I miss?

jmcarp commented 7 years ago

It's more likely that I missed something, but: it looks like the dns challenge Solve method calls the provider Present method, then blocks until the challenge is solved or the timeout has elapsed. I think we'd need to do some work to integrate this with the broker workflow, since we'd want to call Present, save the challenge info to the db, and wait until the user has created the text record, then finish provisioning the cert.

cnelson commented 7 years ago

~I was thinking the broker could check for the DNS entry in updateProvisioning and when we see the record exists we tell lego we are ready to solve. Thoughts?~

Just realized that's what you said above 😁

I still think this is the best approach -- while the immediate need is to help with migrations, this is going to be a problem for any customer in the future who wants to migrate an existing site to the platform so it's worth doing it right.

jmcarp commented 7 years ago

while the immediate need is to help with migrations, this is going to be a problem for any customer in the future who wants to migrate an existing site to the platform so it's worth doing it right.

Agreed. The only thing that could be annoying here is that some of the methods we might want to call are private.

jmcarp commented 7 years ago

Done.