将 ElastiCache 集群添加到 Elastic Beanstalk 应用程序

将 ElastiCache 集群添加到 Elastic Beanstalk 应用程序

我有一个利用 docker 平台设置的 Elastic Beanstalk 应用程序。一切运行顺利,我可以使用eb deploycli 命令重新部署该应用程序。该应用程序设置在自定义 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 中列出,在那里我发现权限是问题所在。

相关内容