2012-06-14 74 views

回答

4

注意:雖然這樣做有效,但@btucker指出它允許任何Heroku託管的應用程序訪問您的ElastiCache羣集。我不建議使用此解決方案。

是的,你可以。該設置類似於Heroku在Amazon RDS上的指南。

  1. 按照「Get Started with Amazon ElastiCache」嚮導來創建緩存集羣和節點
  2. 安裝ElastiCache Command Line Toolkit
  3. 允許Heroku的服務器進入到您的ElastiCache集羣像RDS導解釋說:那不同的是這樣的步驟但elasticache-那些更換rds-命令:

    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的配置Y值我們的生產應用與您的集羣主機名:

    heroku config:set MEMCACHE_SERVERS=elasticachehostname.amazonaws.com 
    

之後,按照Memcache Rails setup,和你設置。

+1

謝謝 - 這完美的作品。 – alpheus

+0

對不起,如果我只是劫持這個評論,但你可能想使用私人地址不收取所有的流量?我們試圖用我們的EC2實例做到這一點,但它沒有奏效,但聽說它可以與Elasticache合作 – nambrot

+0

你在哪裏找到私人地址@nambrot?我使用AWS控制檯中列出的「端點」,但尚未收到ElastiCache流量的費用。 –

6

不,建議您不要使用Elasticache,因爲它沒有認證機制。因此,任何人都可以訪問您的緩存!這通常很好,因爲您會使用AWS安全規則來限制哪些機器可以將其訪問給您的機器。然而,這顯然不適用於Heroku,因爲您的應用程序是在隨機選擇的Herokus機器上運行的。

您可以在EC2計算機上使用SASL身份驗證自行部署memcache。 ElastiCache並沒有給你任何東西,而是一個預裝了memcache的EC2機器。

還有另一種選擇:MemCachier

(全部免責聲明,我對MemCachier工作)。

Heroku上還有另一個memcache提供程序,它比membase提供的memcache提供程序便宜得多。它被稱爲MemCachier,插件主頁是here

它的價格可以與ElasticCache相媲美,具體取決於您的緩存大小,以及是否使用保留實例(在非常大的緩存大小ElatiCache更便宜時)。

更新(2013年6月):membase memcache插件已關閉,因此MemCachier是Heroku上Memcache的唯一提供者。

即使您使用ElastiCache,如果您需要任何幫助,請與我聯繫。

+0

很酷。我看過文檔,但只是爲了澄清 - 如果我目前在Heroku上使用membase插件,除了將gem'memcachier'添加到我的Gemfile中,是否還有其他更改需要切換到你的系統? – alpheus

+0

@alpheus,是的,你所需要做的就是添加'memcachier' gem和其他一切應該工作的東西。讓我們知道您是否有問題:[email protected]。 (完全免責聲明:我也在MemCachier上工作)。 – alexlod

3

值得注意的是,儘管@ ssorallen的回答如上所述,但它也允許ANY heroku部署的應用程序訪問您的memcached服務器。因此,如果您存儲任何保密信息,或者您擔心其他人使用您的ElatiCache羣集,請不要這樣做。在RDS環境中,您擁有內置到數據庫中的訪問控制,但memcached沒有ElastiCache支持的此類身份驗證。因此,向所有Heroku開放安全組是一個相當大的風險。

+1

這是一個很好的觀點。鑑於ElastiCache不使用身份驗證,有沒有辦法來防止這種情況?通過隱瞞主機名安全性幾乎沒有安全性。 –

+0

@ssorallen,不幸的是,我知道ElastiCache沒有辦法解決這個問題。還有一些支持認證的memcached發行版,但你需要在ec2實例上自己運行它。 – btucker

+0

剛剛討論過這個話題,一個可能的解決方案是讓heroku上的代碼與AWS API交談,並向ElasticCache安全組添加一條規則,以處理來自當前Dyno的流量。我*想*可能會工作。它只需要在memcache客戶端嘗試連接到ElastiCache之前運行。 – btucker