5

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

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

4

3 回答 3

7

现在已在 Cloudformation 模板中为 Elasticache 添加了 VPC 支持。

要在您的 VPC 中启动 a AWS::ElastiCache::CacheCluster,请创建一个AWS::ElastiCache::SubnetGroup定义您想要 Elasticache 在您的 VPC 中的哪个子网并将其分配 CacheSubnetGroupNameAWS::ElastiCache::CacheCluster.

于 2014-10-23T07:01:44.117 回答
6

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

您最终可以通过专用的CustomResource类型改进您的自定义解决方案,这些类型是特殊的 AWS CloudFormation 资源,为模板开发人员提供了一种将资源包含在 AWS CloudFormation 堆栈中的方法,这些资源由 Amazon Web Services 以外的源提供。- AWS CloudFormation 自定义资源演练很好地概述了这一切的内容、工作原理以及实施您自己的资源所需的条件。

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

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

  • AWS 在最近的主要Amazon EC2 更新 - 适合所有人的虚拟私有云的背景下宣布了对 ElastiCache 的 VPC 支持!,归结为(几乎)每个人的默认 VPC

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

    您无需事先创建 VPC - 只需像在 EC2-Classic 中一样启动 EC2 实例或预置 Elastic Load Balancer、RDS 数据库或 ElastiCache 集群,我们将免费为您创建 VPC。我们会将您的资源启动到该 VPC [...] [强调我的]

  • 这种更新有点暗示任何新服务也可能会立即在 VPC 中可用(否则新的EC2-VPC平台不会像预想的那样自动为新客户工作)。
因此,我希望 CloudFormation 团队也能效仿并完成/修改他们对部署到 VPC 的支持。

于 2013-04-01T16:00:47.527 回答
0

我的解决方案是有一个控制器进程来轮询消息队列,该消息队列订阅了我通知 CloudFormation 事件的 SNS 主题(当您创建 CloudFormation 堆栈以向 SNS 主题发送通知时单击控制台中的高级) .

我将所需的参数作为标签传递给 AWS::EC2::Subnet 并让控制器在创建子网时拾取它们。我在创建 AWS::CloudFormation::WaitConditionHandle 时执行设置,并使用 PhysicalResourceId 通过 PUT 卷曲以满足 AWS::CloudFormation::WaitCondition。

它有些工作,但不处理 ElastiCache 中的资源删除,因为没有用于堆栈删除的 AWS::CloudFormation::WaitCondition 类似物。这是我的方法的手动操作程序。

CustomResource 方法看起来更精致,但需要一个端点,而我没有。如果您可以将端点放在一起,那看起来就是要走的路。

于 2013-05-08T17:29:50.747 回答