2017-12-03 245 views
-3

我的需求是我需要使用terraform創建3個aws實例並在其中運行3個不同的bash腳本。所有文件都在同一臺服務器上。如何將linux bash腳本文件添加到terraform代碼中?

我已經有terraform代碼來創建一個基礎架構和3 bash腳本準備使用。

resource "aws_instance" "master" { 
    instance_type = "t2.xlarge" 
    ami = "${data.aws_ami.ubuntu.id}" 
    key_name = "${aws_key_pair.auth.id}" 
    vpc_security_group_ids = ["${aws_security_group.public.id}"] 
    subnet_id = "${aws_subnet.public1.id}" 
} 

這是我terraform代碼來創建一個AWS實例

,但我不知道我怎麼可以整合兩者。

我也可以使用Aws實例IP值作爲Linux bash腳本中的變量值嗎?如果是的話,我該如何將這個ip值傳遞給我的一個linux bash腳本變量? 謝謝

+0

你嘗試過這麼遠嗎?你能包含你的代碼嗎? – Vandal

+0

terraform中的本地執行但它沒有工作。 –

+1

您是否在使用多個帳戶來編輯相同的帖子?不是最好的主意,現在你的編輯必須經過審查。 –

回答

1

如果您只需要運行腳本一次;那麼與AWS'user-data scripts搭配就完美了。

將您的腳本放入文件templates/user_data.tpl,使用template provider來創建模板。然後,您只需要將呈現的腳本傳遞給aws_instance資源的user_data參數。

根據需要進行修改。

模板/ user_data.tpl

#!/bin/bash 
echo ${master_ip} 

terraform_file.tf

resource "aws_instance" "master" { 
    instance_type   = "t2.xlarge" 
    ami     = "${data.aws_ami.ubuntu.id}" 
    key_name    = "${aws_key_pair.auth.id}" 
    vpc_security_group_ids = ["${aws_security_group.public.id}"] 
    subnet_id    = "${aws_subnet.public1.id}" 
} 

resource "aws_instance" "slave" { 
    instance_type   = "t2.xlarge" 
    ami     = "${data.aws_ami.ubuntu.id}" 
    key_name    = "${aws_key_pair.auth.id}" 
    vpc_security_group_ids = ["${aws_security_group.public.id}"] 
    subnet_id    = "${aws_subnet.public1.id}" 

    user_data = "${data.template.user_data.rendered}" 
} 

data "template" "user_data" { 
    template = "${file("templates/user_data.tpl")}" 

    vars { 
    master_ip = "${aws_instance.master.private_ip}" 
    } 
} 
+0

這正是我需要..謝謝 –

相關問題