2016-12-03 20 views
1

连接厨师供应者我不能让terraform的SSH通过私人AWS密钥对的厨师供应连接 - 错误看起来只是一个超时:Terraform不能使用ssh

aws_instance.app (chef): Connecting to remote host via SSH... 
aws_instance.app (chef): Host: 96.175.120.236:32: 
aws_instance.app (chef): User: ubuntu 
aws_instance.app (chef): Password: false 
aws_instance.app (chef): Private key: true 
aws_instance.app (chef): SSH Agent: true 
aws_instance.app: Still creating... (5m30s elapsed) 
Error applying plan: 

1 error(s) occurred: 

* dial tcp 96.175.120.236:32: i/o timeout 

Terraform does not automatically rollback in the face of errors. 
Instead, your Terraform state file has been partially updated with 
any resources that successfully completed. Please address the error 
above and apply again to incrementally change your infrastructure. 

这里是我的terraform计划 - 注意SSH设置..在KEY_NAME设置为我的AWS密钥对名称和ssh_for_chef.pem是私钥

variable "AWS_ACCESS_KEY" {} 
variable "AWS_SECRET_KEY" {} 

provider "aws" { 
    region = "us-east-1" 
    access_key = "${var.AWS_ACCESS_KEY}" 
    secret_key = "${var.AWS_SECRET_KEY}" 
} 

resource "aws_instance" "app" { 
    ami = "ami-88aa1ce0" 
    count = "1" 
    instance_type = "t1.micro" 
    key_name = "ssh_for_chef" 
    security_groups = ["sg-c43490e1"] 
    subnet_id = "subnet-75dd96e2" 
    associate_public_ip_address = true 


    provisioner "chef" { 
    server_url = "https://api.chef.io/organizations/xxxxxxx" 
    validation_client_name = "xxxxxxx-validator" 
    validation_key = "/home/user01/Documents/Devel/chef-repo/.chef/xxxxxxxx-validator.pem" 
    node_name = "dubba_u_7" 
    run_list = [ "motd_rhel" ] 
    user_name = "user01" 
    user_key = "/home/user01/Documents/Devel/chef-repo/.chef/user01.pem" 
    ssl_verify_mode = "false" 
    } 
    connection { 
     type = "ssh" 
     user = "ubuntu" 
     private_key = "${file("/home/user01/Documents/Devel/ssh_for_chef.pem")}" 
    } 
} 

任何想法?

+0

您的安全组允许进入的端口22访问? – StephenKing

+0

是允许端口22进/出。所有AWS值都在测试厨房中工作,所以我必须在我的缺失计划中遇到问题。 – TyMac

+0

看起来像我需要弄清楚如何分配一个弹性ip – TyMac

回答

1

我不确定我们是否有同样的问题,因为您没有指定是否能够ssh到实例。
就我而言,我从VPC内运行terraform,并且允许连接一个安全组,但不能与公共IP一起使用。
解决方案很简单(但你将不得不使用terraform v.0.8.0的新的条件插值) -

这个变量 - variable use_public_ip { default = true }

然后,厨师供应方的连接部分内,添加以下行 -
host = "${var.use_public_ip ? aws_instance.instance.public_ip : aws_instance.instance.private_ip}"

如果您希望使用公共IP,请将变量设置为true,否则将其设置为false。

我用这个AWS - connection { user = "ubuntu" host = "${var.use_public_ip ? aws_instance.instance.public_ip : aws_instance.instance.private_ip}"," }

+0

不是同样的问题,但您的情况可能会在未来派上用场!感谢您分享此信息 :) – TyMac