2017-12-03 293 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

这正是我需要..谢谢 –

相关问题