2013-10-07 47 views
1

我在生產中的幾個ec2實例上運行我的ruby on rails電子商務應用程序。自從我們進行持續集成之後,我還沒有啓用自動擴展功能,我們在需要時進行部署。我爲所有原因使用廚師。我想弄清楚如何使用廚師將代碼自動部署到多個ec2實例並進行手動干預。我試圖在初始ec2實例工作正常的時候部署代碼。但我的問題是如何在自動縮放模式下執行此操作,以便實例從github或bit bucket中提取最新的代碼,並在更新包和更新之後部署itseld。使用廚師的自動部署

回答

6

不夠公平。這是我做的,它工作正常:

我已經創建了一個AMI有以下設置:

  1. 安裝chef client

  2. 從廚師工作站創建/etc/chef目錄

  3. 複製your_company-validator.pem到AMI at /etc/chef/validation.pem
  4. 創建/etc/chef/client.rb如下。

如果您使用廚師獨奏,請相應地進行更改。

cat >> /etc/chef/client.rb <EF 
log_level  :auto 
log_location  STDOUT 
chef_server_url "https://api.opscode.com/organizations/your_company" 
validation_client_name "you_company-validator" 
EF 

現在,您已經在AMI中爲廚師引導配置了以上所有東西。

當您啓動AMI(使用自動縮放或任何其他方式)時,請提供user-data其中將在其中運行您選擇的run_list的廚師客戶端。我在下面提供的用戶數據:

#!/bin/bash 
cat > /etc/chef/firstboot.json << EOL 
{"run_list": ["recipe[java::oracle]"]} 
EOL 
chef-client -j /etc/chef/firstboot.json > /tmp/initialize_client.log 2>&1 

基本上,我創建一個以.json文件,在那裏我會指定配方/角色/ run_list我想運行。一旦你提供了用戶數據,它將在第一次啓動時執行,並且chef-client將與run_list一起運行。

我想這就是你要找的。 這樣總結:

  1. 與創建AMI預裝chef-client, client.rb and validation.pem
  2. ,然後在實例啓動時提供user-data

這對我來說非常合適。讓我知道這個設置是否會給你帶來麻煩。我一直在使用它很長一段時間。

因此,當我使用自動縮放啓動我的實例時,它會自動隨着我選擇的食譜自動啓動廚師。

假設: 在完成此操作之前,您已擁有在廚師服務器上創建的所有食譜/角色。否則引導程序最終會失敗。

+0

你好@slayedbylucifer聽起來很神奇!我會盡快嘗試,並保持更新 –

+0

嗨我嘗試了你建議的過程,但啓動ec2實例後,它會拋出一個錯誤無法驗證廚師服務器(HTTP 401)。 服務器響應: ---------------- 無法驗證爲'ip-10-128-94-138.ap-southeast-1.compute.internal'。確保您的node_name和客戶端密鑰是正確的。 如果這些設置正確,您的client_key可能無效。 我該如何調試它,以及會出現什麼問題。 –

+1

當主廚客戶端第一次運行時,它會自己創建client.pem。在任何之前的廚師客戶端運行中,您的映像中是否有客戶端.pem?另外,您是否在節點上覆制了validation.pem密鑰? – slayedbylucifer