我正在使用CloudFormation在VPC内创建AWS堆栈,并且需要在其上创建ElastiCache集群 . 我已经调查过,CloudFormation不支持在VPC中创建缓存集群 . 我们的“解决方法”是使用CloudInit和AWS AmazonElastiCacheCli工具(elasticache-create-cache-subnet-group,elasticache-create-cache-cluster)在一些“固定”实例(例如堡垒)引导时创建缓存集群 . 然后,当前端机器引导程序(我们使用自动扩展)时,它们使用elasticache-describe-cache-clusters来获取缓存集群节点并更新配置 .
我想知道你是否有不同的解决方案来解决这个问题 .
3 回答
您的解决方法是合理的(并且表明您似乎已经控制了您的AWS操作) .
您最终可以通过专用的CustomResource类型来改进您的自定义解决方案,这种类型是特殊的AWS CloudFormation资源,为模板开发人员提供了一种方式,可以将资源包含在由Amazon Web Services以外的源提供的AWS CloudFormation堆栈中 . - AWS CloudFormation Custom Resource Walkthrough提供了一个很好的概述,这是什么,它是如何工作的以及实现自己需要什么 .
将此Facade用于自定义资源(例如,在您的情况下为Amazon ElastiCache集群)的好处是,它的整个生命周期(创建/更新/删除)可以像任何官方支持的CloudFormation资源类型一样以类似和受控的方式处理,例如:从整个堆栈的角度来看,资源创建失败将被透明地处理 .
但是,对于手头的用例,您可能实际上只是想等待官方支持变得可用:
因此,我希望CloudFormation团队能够效仿并完成/修改他们对VPC部署的支持 .
现在已在Cloudformation模板中为Elasticache添加了VPC支持 .
要在您的VPC中启动
AWS::ElastiCache::CacheCluster
,请创建一个AWS::ElastiCache::SubnetGroup,用于定义您想要Elasticache的VPC中的哪个子网,并将其分配给AWS::ElastiCache::CacheCluster
的CacheSubnetGroupName属性 .我的解决方案是拥有一个轮询消息队列的控制器进程,该消息队列订阅了我通知CloudFormation事件的SNS主题(当您创建CloudFormation堆栈以向SNS主题发送通知时,单击控制台中的高级) .
我将所需的参数作为标记传递给AWS :: EC2 :: Subnet,并在创建子网时让控制器选择它们 . 我在创建AWS :: CloudFormation :: WaitConditionHandle时执行设置,并使用PhysicalResourceId与pUT进行cURL以满足AWS :: CloudFormation :: WaitCondition .
它有点工作,但不处理ElastiCache中的资源删除,因为没有AWS :: CloudFormation :: WaitCondition模拟用于堆栈删除 . 这是我的方法的手动操作程序 .
CustomResource方法看起来更精致,但需要一个我没有的 endpoints . 如果你可以把 endpoints 放在一起,那就像是要走的路 .