使用 Elastic BeanStalk + Django 设置 ElastiCache Redis

Posted

技术标签:

【中文标题】使用 Elastic BeanStalk + Django 设置 ElastiCache Redis【英文标题】:Setting up ElastiCache Redis with Elastic BeanStalk + Django 【发布时间】:2017-08-02 11:21:19 【问题描述】:

另一个 *** answer 说您需要设置一个 elasticache.config 文件来自动使用 ElastiCache 创建 Redis 服务器。

但是,我可以在 AWS (Elasticache) 上创建一个 Redis 实例并将其端点添加到 Django 设置中吗?例如,Django-redis:

CACHES = 
    "default": 
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://<REDIS AWS ENDPOINT AND PORT HERE>",
        "OPTIONS": 
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        
    

我怀疑上述情况可能会导致多个 beanstalk 服务器实例出现问题。鉴于此,我很想使用 MemCache 而不是 Redis,因为有一个明确编写的 Django 包用于与用于 Memcache 的 AWS Elasticache 接口:django-elasticache。

谢谢, 安迪。

【问题讨论】:

【参考方案1】:

简短回答:是的。

长答案:我没有使用 Elastic Beanstalk,但是我可以确认,如果您在 ElastiCache 中创建 Redis instance(即:禁用集群模式),它将与 django-redis 一起正常工作。只需将 primary_endpoint 插入到您发布的 Django 配置中即可。

注意如果您打算使用只读副本,请按如下方式进行设置:

CACHES = 
    "default": 
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": [
            "redis://<MASTER ENDPOINT>",
            "redis://<SLAVE ENDPOINT>",
        ]
        "OPTIONS": 
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        
    

如果你启动一个 Redis 集群,你就不能使用 vanilla django-redis。您必须按照in this post 的描述使用redis-py-cluster。在此复制:

CACHES = 
  'default': 
    'BACKEND': 'django_redis.cache.RedisCache',
    'LOCATION': 'redis://XXX.YYY.ZZZ.cache.amazonaws.com/0',
    'OPTIONS': 
      'REDIS_CLIENT_CLASS': 'rediscluster.RedisCluster',
      'CONNECTION_POOL_CLASS': 'rediscluster.connection.ClusterConnectionPool',
      'CONNECTION_POOL_KWARGS': 
        'skip_full_coverage_check': True # AWS ElasticCache has disabled CONFIG commands
      
    
  

【讨论】:

以上是关于使用 Elastic BeanStalk + Django 设置 ElastiCache Redis的主要内容,如果未能解决你的问题,请参考以下文章

将 AMI 映像用于 Elastic Beanstalk

使用 Elastic Beanstalk 部署微服务

使用 Cloudflare 将 HTTPs 添加到 Elastic Beanstalk

无法使用 Elastic Beanstalk 挂载 EFS

如何使用 Terraform 为 Elastic Beanstalk 环境定义条件(每个环境)设置?

Amazon Elastic BeanStalk 错误:无法创建 AWS Elastic Beanstalk 应用程序版本