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