2017-06-15 52 views
0

我目前擁有自定義的AWS AMI映像,而Terraform無法在user_data節中執行腳本或內聯代碼。它適用於AWS AMI映像,但不適用於我使用自己的映像。Terraform AWS user_data不能與自定義AMI映像一起使用

data "template_file" "user_data" { 
template = "${file("sample")}" 
} 


resource "aws_launch_configuration" "test" { 
image_id = "ami-xxxxxx" 
instance_type = "t2.medium" 
security_groups = ["xxxxx", "xxxxxxx"] 
key_name = "xxxxxxx" 
} 



resource "aws_instance" "ZC1" { 
    ami = "ami-xxxxxxx" #ZC AMI IMAGE 
    instance_type = "t2.medium" 
    subnet_id = "subnet-xxxxx" 
    private_ip = "x.x.x.x" 
    key_name = "xxxxxx" 
    vpc_security_group_ids = ["xxxxx", "xxxxxxx"] 
    user_data = "${data.template_file.user_data.rendered}" 
    tags { 
    "Name" = "Terraform Script Test" 
     } 
} 
+4

當您在「user_data」部分中說「腳本或內聯代碼」時,是否指'#cloud-config'代碼段?這種配置通常由'cloud-init'軟件包進行處理,並且需要在映像上進行安裝和配置(在大多數流行的AMI上默認可用)。你可以編輯你的問題,提供更多關於AMI是如何構建或來自哪裏以及user_data是什麼樣子的信息? –

+0

試試這個https://stackoverflow.com/questions/33690287/how-to-install-aws-cfn-bootstrap-cfn-init-package-in-redhat-using-cloudformation – Gangaraju

回答

0

當設置在EC2實例user_data,AWS只是讓這些數據通過the metadata API可用實例。安裝在AMI中的軟件必須檢索這些數據並決定如何處理它。

您可以通過登錄到您的實例並運行類似下面的命令在實踐中看到這一點,假設你有curl可供選擇:

curl http://169.254.169.254/latest/user-data 

如果工作正常,你應該看到你在這裏指定的值爲user_data

最常見的方式來處理用戶數據是通過cloud-init,它被設計爲在實例啓動時運行(例如,通過systemd,初始化等)中的程序以檢索user_data並根據採取各種行動,其發現那裏。例如,如果檢索到的數據看起來像一個純shell腳本,則cloud-init將執行該腳本。

還有其他0123,的替代方案,如CoreOS Ignition。如果您有獨特需求,您也可以自由編寫自己的程序來處理啓動時配置。

在這裏啓動和運行的最簡單方法是確保cloud-init作爲AMI創建的一部分安裝並配置爲在啓動時運行。然後您將看到Amazon Linux或Ubuntu AMI的熟悉的啓動時配置行爲。

相關問題