Могу ли я использовать Amazon Elasticache на Heroku?

В настоящее время я использую Memcached от Heroku в приложении на Rails 3 и хотел бы перейти на Elasticache, потому что цены намного выгоднее. Это возможно? Конфигурация относительно проста? Что-нибудь, о чем я должен знать относительно работы?

5 ответов

Решение

Примечание. Хотя это работает, @btucker отметил, что оно позволяет любому приложению, размещенному на Heroku, получать доступ к вашему кластеру ElastiCache. Я не рекомендую использовать это решение.

Да, ты можешь. Настройка похожа на руководство Heroku по Amazon RDS. Шаги, которые отличаются, идут следующим образом:

  1. Следуйте руководству " Начало работы с Amazon ElastiCache ", чтобы создать кластер и узел кэша.
  2. Установите инструментарий командной строки ElastiCache
  3. Разрешите доступ серверов Heroku к вашему кластеру ElastiCache, как описано в руководстве по RDS, но замените rds- команды с elasticache- из них:

    elasticache-authorize-cache-security-group-ingress \
      --cache-security-group-name default \ 
      --ec2-security-group-name default \
      --ec2-security-group-owner-id 098166147350 \
    
      # If your AWS_CREDENTIAL_FILE environment setting is configured,
      # this option is not necessary.
      --aws-credential-file ../credential-file-path.template
    
  4. Установите значение конфигурации Heroku для вашего производственного приложения с именем хоста вашего кластера:

    heroku config:set MEMCACHE_SERVERS=elasticachehostname.amazonaws.com
    

После этого следуйте настройке Memcache Rails, и все готово.

Нет, не рекомендуется использовать Elasticache, так как с ним нет механизма аутентификации. Таким образом, любой может получить доступ к вашему кешу! Обычно это нормально, так как вы используете правила безопасности AWS, чтобы ограничить доступ компьютеров к нему. Однако это очевидно не работает с Heroku, так как ваше приложение запускается на случайно выбранной машине Herokus.

Вы можете развернуть memcache самостоятельно с аутентификацией SASL на машине EC2. ElastiCache на самом деле не дает вам ничего, кроме машины EC2 с предварительно установленной memcache.

Есть еще один вариант: MemCachier

(Полный отказ от ответственности, я работаю на MemCachier).

На Heroku есть еще один провайдер memcache, который значительно дешевле, чем тот, который был у мембраны. Он называется MemCachier, домашняя страница аддона здесь.

Это сопоставимо по цене с ElasticCache в зависимости от размера кеша и от того, используете ли вы зарезервированные экземпляры или нет (при очень больших размерах кеша ElatiCache дешевле).

Обновление (июнь 2013 г.): Дополнение memcache в memase отключено, поэтому MemCachier является единственным поставщиком Memcache на Heroku.

Пожалуйста, свяжитесь со мной, если вам нужна помощь, даже если вы используете ElastiCache.

Стоит отметить, что хотя ответ @ ssorallen, приведенный выше, будет работать, как описано, он также позволяет ЛЮБОМУ приложенному герою доступу к вашему memcached серверу. Поэтому, если вы храните что-либо в тайне или беспокоитесь о том, что другие люди используют ваш кластер ElatiCache, не делайте этого. В контексте RDS у вас есть контроль доступа, встроенный в базу данных, но у memcached нет такой аутентификации, поддерживаемой ElastiCache. Поэтому открытие группы безопасности для всего Heroku - довольно большой риск.

Есть несколько дополнений Heroku, которые решат эту проблему. Они предоставляют SOCKS5-прокси статический IP-адрес, который вы можете внести в белый список.

Вы также можете сделать это самостоятельно, настроив собственный прокси SOCKS5 на ec2.

Обратите внимание на предостережения здесь: http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/Access.Outside.html

Он медленнее, не зашифрован, и для того, чтобы заставить его работать, потребуется какой-нибудь NAT-обезьянник.

Если вы используете частные пространства Heroku, то это можно сделать с помощью пиринга VPC. Следуйте приведенным здесь инструкциям, чтобы ваши VPC AWS и Heroku VPC могли получать доступ к ресурсам друг друга:https://devcenter.heroku.com/articles/private-space-peering

После того, как описанная выше настройка заработает, просто создайте кластер эластичного кеша в AWS VPC и разрешите доступ из диапазонов динамического CIDR в группе безопасности AWS или к полному CIDR Heroku VPC, и ваши динамометры смогут получить доступ к URL-адресам эластичного кеша. Мне удалось получить работающую настройку для Redis, и она должна работать для любого другого ресурса в AWS VPC.

Другие вопросы по тегам