我有一个利用 docker 平台设置的 Elastic Beanstalk 应用程序。一切运行顺利,我可以使用eb deploy
cli 命令重新部署该应用程序。该应用程序设置在自定义 VPC 上(我几乎不了解),可通过 Web 访问。
我想将 Memcached ElastiCache 集群添加到我的应用程序。我尝试通过控制台手动创建集群,但似乎无法从我的应用程序连接到它(无论我如何设置它)(我尝试从 Elastic Beanstalk 实例进行 telnet)。我已将.ebextensions
目录添加到我的应用程序,并尝试添加指令让 EB 为我创建缓存集群。我尝试使用 AWS 示例模板,但没有成功。我尝试更改设置,甚至尝试将指令简化为让 EB 创建集群所需的最少参数。我所做的一切似乎都没有用。以下是我当前的文件:
Resources:
MyElastiCache:
Type: "AWS::ElastiCache::CacheCluster"
Properties:
CacheNodeType: "cache.t2.small"
NumCacheNodes: "1"
Engine: "memcached"
VpcSecurityGroupIds:
- sg-XXXXXXXX
CacheSubnetGroupName: "subnet-XXXXXXXX"
对于VpcSecurityGroupIds
,我尝试了 EC2 安全组和 VPC 安全组。似乎都没有帮助。CacheSubnetGroupName
是我的 VPC 内子网的 ID。
这非常令人沮丧,因为每次我尝试新事物时,EB 都必须重新部署我的应用程序,因此测试最小的更改需要 5 分钟。任何帮助都将不胜感激。
编辑:这是我最近的尝试。
Resources:
MyElastiCacheSubnetGroup:
Type: "AWS::ElastiCache::SubnetGroup"
Properties:
Description: "Blah blah blah"
SubnetIds:
- subnet-XXXXXXXX
- subnet-XXXXXXXX
- subnet-XXXXXXXX
- subnet-XXXXXXXX
MyElastiCache:
Type: "AWS::ElastiCache::CacheCluster"
Properties:
CacheNodeType: "cache.t2.small"
NumCacheNodes: "1"
Engine: "memcached"
VpcSecurityGroupIds:
- sg-XXXXXXXX
CacheSubnetGroupName:
Ref: "MyElastiCacheSubnetGroup"
以及伴随而来的错误:Service:AmazonCloudFormation, Message:Stack named 'awseb-e-amyvnbtvps-stack' aborted operation. Current state: 'UPDATE_ROLLBACK_IN_PROGRESS' Reason: The following resource(s) failed to create: [MyElastiCacheSubnetGroup].
答案1
属性VpcSecurityGroupIds
是一个或多个的列表VPC 安全组将被分配给缓存集群。
确保其中一个安全组允许从 EB 应用程序的 EC2 实例的安全组或包含 EB 应用程序的 EC2 实例的 CIDR 连接端口 11211。如果没有此规则,任何连接都将失败。
这CacheSubnetGroupName
不是 VPC 子网。
在 VPC 中创建缓存集群之前,您需要创建缓存子网组。缓存子网组是 VPC 子网的集合。有关更多信息,请参阅以下内容:
http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/SubnetGroups.html
您可以在文件中创建缓存子网组资源.ebextensions
:
Resources:
MyElastiCacheSubnetGroup:
Type: "AWS::ElastiCache::SubnetGroup"
Properties:
Description: "Something informational"
SubnetIds:
- subnet-XXXXXX
MyElastiCache:
Type: "AWS::ElastiCache::CacheCluster"
Properties:
CacheNodeType: "cache.t2.small"
NumCacheNodes: "1"
Engine: "memcached"
VpcSecurityGroupIds:
- sg-XXXXXXXX
CacheSubnetGroupName:
Ref: "MyElastiCacheSubnetGroup"
答案2
后来发现,错误是管理部署的 IAM 帐户没有创建 Elasticache 服务所需的策略。一旦我向 IAM 用户授予适当的权限,它就开始工作了。不幸的是,错误在 Elastic Beanstalk 事件中定义得不太好。我发现这些事件也在 Cloudformation 中列出,在那里我发现权限是问题所在。