Тут в DeletionPolicy указываем удаление корзины при удалении стека, а в WebsiteConfiguration — указываем на то, что корзина будет использоваться для хостинга сайта.
В имени корзины используем имя домена, которое будет использоваться для доступа к сайту — site.azinchenko.com.
Добавляем ещё один ресурс — AWS::S3::BucketPolicy, в котором описываем доступ к корзине — разрешаем метод s3:GetObject ко всем объектам в корзине, и делаем её таким образом Publicly accessible:
Сертификат не будет являться частью стека, делаем его вручную, обязательно в регионе N. Virginia (us-east-1), что бы его можно было использовать в CloudFront:
AWS::CloudFront::Distribution
И последним добавляем ресурс CDN distribution.
Из интересного в его параметрах:
TargetOriginId — через Ref указываем ID ресурса S3 корзины
ViewerProtocolPolicy — редиректим HTTP запросы на HTTPS
Aliases — в алиасе (поле CNAME в CloudFront distribution) указываем DNS имя, которое используем для сайта, в этом примере это site.azinchenko.com, как и имя корзины
Origins — тут формируем URL корзины в виде имя-корзины-s3-website.eu-west-1.amazonaws.com, используя Fn::Join и Ref
ViewerCertificate — указываем SSL ARN, который создали выше