2017-05-03 85 views
1

我有terraform配置AWS結構。我已經爲配方執行準備了廚師,但問題是實例沒有任何node_name屬性,因爲它們是由Terraform使用AutoScaling Groupchef clientuser_data腳本一起安裝的。節點名稱由chef生成,我需要在每個實例上最初執行一些安裝。我試圖創建base角色,並使用所需的操作將其更新到服務器。更新成功,但沒有正在啓動實例的安裝。有沒有辦法爲每個新到的實例運行命令或分配角色?與自動調節配置實例的廚師執行配方

回答

0

謝謝你的答案。自定義AMI不是一種選擇,所以我不得不爲另一種方法進行研究。原來你可以跳過chef-service-manager部分,直接撥打chef client。要點是您可以將JSON文件作爲參數分配給chef clientJSON可以包含runlist和/或role,即使它是由Autoscaling group創建的,也可以分配給新實例。由於我已經在使用user_data,我剛剛在腳本中添加了JSON創建,並分配了中已有runlist的所需角色。這兩個答案幫助我到達那裏。現在在每個新實例中,通過user_data我創建了一個JSON的角色,最後我運行了chef client -f role_config.json,之後我致電服務創建chef-service-manager。這只是一個補丁,因爲最佳選擇不是將其創建爲服務,而是每次都使用scheduled task並調用json,因爲如果第二次調用同一實例,它將在將來的執行中被忽略。同樣從我在Chef文檔中看到的,scheduled task將是比使用該服務更好的選擇。感謝您的答案!

2

有兩個解決方案我能想到的:

  1. 添加要加載在USER_DATA的EC2s腳本aws_instance

例如屬性:

resource "aws_instance" "foo" { 
    ami   = "ami-408c7f28" 
    instance_type = "t1.micro" 
    user_data = "**your script**" 
} 
  1. 從您自己的自定義AMI啓動它們。
+0

選項1的問題是我不使用'aws_instance'資源。實例由'launch_configuration'和'Autoscaling Group'創建,所以我不能使用'provisioner'或綁定特定實例中的角色。 – Nephilimrising

1

您必須在LaunchConfig中將配置烘焙成混合的AMI和初始化腳本。 https://github.com/coderanger/octan_demo/blob/master/tf/octan_cluster/main.tf#L156-L167https://github.com/coderanger/octan_demo/blob/master/tf/octan_cluster/bootstrap.tpl是一個使用廚師獨奏的例子(很好,本地模式,因爲獨奏還不支持策略,但這是一個不同的故事),但它應該給你一個想法。您可以使用類似的腳本安裝Chef,創建配置,下載驗證密鑰(可能來自S3,使用IAM角色),然後啓動第一個chef-client運行。 https://github.com/coderanger/brix/blob/master/packer/client-bootstrap.sh是另一個更早的例子,它顯示了chef-client的這種情況,在這種情況下,它正在生成基於CloudFormation數據的配置,並且Chef install +驗證密鑰被烘焙到AMI中。