2016-02-24 65 views
1

我想知道亞馬遜網絡服務中是否有選項,兩個有兩個EC2實例正在運行,而我作爲開發人員可以直接訪問一個當兩臺服務器在同一個域中服務時,我選擇的是。在ELB下的特定EC2實例上訪問特定網站

通過訪問,我的意思是通過網絡瀏覽器經常訪問的網站(例如www.domain.com/some-post/

我希望我的網站多達繼續是和生活。我目前在www.domain.com下有一臺EC2服務器。如果我通過Elastic Load Balancer添加另一臺服務器,則無法控制負載平衡器向我發送的服務器。

我有一個WordPress的網站,我想升級它的主題,插件和核心文件,所以我只希望我有權訪問該服務器並對其進行測試。我可以打開一個服務器並在一個公共IP上測試它,我做到了,並且它沒有像預期的那樣工作,所以我需要在原始地址下運行它,以確保如果它運行正常,它會運行好吧活着。

我認爲這樣做的唯一方法是創建一個服務器映像,創建一個EC2實例,使用不同的域名,限制對我的IP地址訪問服務器,將數據庫更改爲新的域名,而不是一切正常後,將域更改回原始狀態,並將彈性IP指向新服務器。

回答

2

不,你不能用ELB實現這種行爲。這完全違背了ELB的目的 - 誰的目的是在與其關聯的實例之間平均分配流量。

通過它的聲音,你正在尋找一個測試階段,你可以用它來測試新的更新等,而不會損壞現場。

您可以隨時在您的測試階段爲您的域名設置DNS名稱 - 例如「alpha.mysite.com」。

對於像這樣的用例,使用環境變量是很常見的做法。你可能在產品上設置了環境變量,例如:stage = prod,在你的測試階段可能是stage = test。然後在你的代碼中,你可以得到這個環境變量,根據代碼運行的階段做一些不同的事情。例如,使用prod/development數據庫。

這可能是一個想法,開始使用Code Deploy推送您的代碼。這樣,您可以讓部署鉤子在每個實例上設置您的環境 - 安裝依賴關係,加載代碼,啓動應用程序等。然後使用已部署到的實例上的環境變量,您的代碼將執行正確的操作。

我想你可以把測試階段放在你的prod機器上的不同端口上,這樣你可以使用相同的域名,但這是一個非常糟糕的主意。我認爲要獲得安全,容錯和可擴展的解決方案,您將需要額外的DNS名稱。而且你絕對不應該使用相同的ELB。如果你想測試你的測試應用程序的負載平衡,你應該使用額外的ELB。

事實上,有些人甚至用不同的AWS賬戶來管理測試環境。

您可能也有興趣Code Pipeline來幫助您。

1

如果我理解正確,您會在單個ELB後面運行多個實例,並希望能夠訪問其中一個實例以測試升級。我認爲,在性能和測試升級的同時,您不希望其他用戶訪問該實例。

我可以想到一些方法來實現這一點。以下是兩個實用的實例:
1.使用AWS控制檯或CLI從負載平衡器中移除實例。沒有任何要求ELB的請求會進入這個實例。 直接在自己的地址上訪問要升級的實例。爲此,必須將實例上的安全組配置爲允許來自外部的HTTP連接。例如,您可以只允許從您自己的IP和負載平衡器訪問。
2.創建另一個ELB用於測試目的。確保您要升級的實例只響應測試ELB,而不響應生產ELB。有兩種方法可以完成此任務:或者手動將其從生產ELB中刪除,或者對實例的ELB運行狀況檢查失敗。 (在後一種情況下,測試和生產elb需要不同的健康檢查)。

我的建議:當成本是一個問題時,請選擇一個。當額外ELB的額外成本不成問題時,請選擇選項2,在升級時手動從生產ELB中移除實例,並在完成並測試後重新附加實例。

更新(我意識到我沒有完全回答你的問題):爲了在不改變數據庫中的域的情況下工作,你需要將你正在測試的機器指向正確的主機。 有兩種選擇:
1.當直接http連接到實例時,請確保該實例具有外部IP。將該域放入主機文件並將其指向ip。
2.當需要額外的測試elb時,請將hosts文件中的域指向其中一個ELB ip,或者運行一個本地dns服務器,該服務器將具有CNAME域的記錄記錄到ELB主機名。

+1

問題是我想在同一個域上測試它。這是因爲緩存插件,數據庫中配置站點的方式,即.htaccess規則。有很多事情需要改變,我想確切地知道,如果我升級並運行,它肯定能夠正常運行。 –

+0

是的,我剛剛意識到這一點,現在正在編輯我的答案,堅持;-) –

1

雖然驗證單個生產節點的正確升級是有效的用例,但在這種情況下,您最好在不同的域上創建單獨的測試環境。
這樣,您可以單獨測試所有更改/升級。
爲了獲得最佳結果,您需要定期將數據庫從生產轉移到測試環境。您可以編寫數據庫腳本,這些腳本會自動更改數據庫中的域,以便您可以(部分或完全)自動執行生產到測試數據庫還原過程。

+0

似乎現在有辦法做到這一點,這是我首先想到的,儘管我發佈了一個問題也許有人將會提出解決這個問題的創造性方法。 –