使用CloudFormation在VPC中创建AWS缓存集群

时间:2013-03-31 14:55:21

标签: amazon-web-services amazon-cloudformation amazon-elasticache amazon-vpc

我正在使用CloudFormation在VPC内创建AWS栈,并且需要在其上创建ElastiCache集群。我已经调查过,CloudFormation不支持在VPC中创建缓存集群。 我们的“解决方法”是使用CloudInit和AWS AmazonElastiCacheCli工具(elasticache-create-cache-subnet-group,elasticache-create-cache-cluster)在一些“固定”实例(例如堡垒)引导时创建缓存集群。然后,当前端机器引导程序(我们使用自动扩展)时,它们使用elasticache-describe-cache-clusters来获取缓存集群节点并更新配置。

我想知道你是否对这个问题有不同的解决方案。

3 个答案:

答案 0 :(得分:5)

您的解决方法是合理的(并且表明您似乎已经掌控了您的AWS操作)。

您最终可以通过专用的CustomResource类型来改进自定义解决方案,这些类型是特殊的AWS CloudFormation资源,为模板开发人员提供了一种在AWS CloudFormation堆栈中包含资源的方法。由Amazon Web Services以外的其他来源提供。 - AWS CloudFormation Custom Resource Walkthrough可以很好地概述这是什么,它是如何工作的以及实现自己需要什么。

将此外观用于自定义资源(即您的案例中的Amazon ElastiCache群集)的好处是,它的整个生命周期(创建/更新/删除)可以像任何类似和受控的方式处理官方支持CloudFormation资源类型,例如资源创建失败将从整个堆栈的角度透明地处理。

但是,对于手头的用例,您实际上可能只是想等待官方支持变得可用:

  • AWS在最近的主要Amazon EC2 Update - Virtual Private Clouds for Everyone!的背景下宣布了对ElastiCache的VPC支持,其归结为(几乎)所有人的默认VPC

    < / p>

      

    我们希望每个EC2用户都能够从我上面概述的Amazon VPC的高级网络和其他功能中受益。为了实现这一目标,即将开始,新AWS客户(以及在新区域中启动的现有客户)的实例将启动到“EC2-VPC”平台。 [...]

         

    您无需事先创建VPC - 只需启动EC2即可   实例或提供Elastic Load Balancers,RDS数据库,或   ElastiCache集群就像你在EC2-Classic中那样,我们将创建一个   VPC为您免费提供。我们会将您的资源用于此   VPC [...] [强调我的]

  •   
  • 这种更新意味着任何新服务都可能在VPC中立即可用(否则新的 EC2-VPC 平台将不会像预想的那样自动为新客户工作)。
  •   
  因此,我希望CloudFormation团队能够效仿并完成/修改他们对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方法看起来更精致,但需要一个我没有的端点。如果你可以把一个端点放在一起,那就像是要走的路。