Могу ли я использовать Amazon Elasticache на Heroku?
В настоящее время я использую Memcached от Heroku в приложении на Rails 3 и хотел бы перейти на Elasticache, потому что цены намного выгоднее. Это возможно? Конфигурация относительно проста? Что-нибудь, о чем я должен знать относительно работы?
5 ответов
Примечание. Хотя это работает, @btucker отметил, что оно позволяет любому приложению, размещенному на Heroku, получать доступ к вашему кластеру ElastiCache. Я не рекомендую использовать это решение.
Да, ты можешь. Настройка похожа на руководство Heroku по Amazon RDS. Шаги, которые отличаются, идут следующим образом:
- Следуйте руководству " Начало работы с Amazon ElastiCache ", чтобы создать кластер и узел кэша.
- Установите инструментарий командной строки ElastiCache
Разрешите доступ серверов 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
Установите значение конфигурации 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-адрес, который вы можете внести в белый список.
- https://elements.heroku.com/addons/proximo
- https://elements.heroku.com/addons/quotaguardstatic
- https://elements.heroku.com/addons/fixie-socks
Вы также можете сделать это самостоятельно, настроив собственный прокси 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.