【问题标题】:(AWS Opsworks) Terraform Chef provisioning: ERROR: Failed to authenticate(AWS Opsworks) Terraform Chef 预置:错误:无法进行身份验证
【发布时间】:2018-04-04 11:32:36
【问题描述】:

Terraform 新手,我正在尝试在创建实例后将节点引导至主厨。

这是文件:

resource "aws_instance" "jenkinsNode" {

provisioner "remote-exec" {
connection {
  user = "ubuntu"
  private_key = "${file("~/key/mykey.pem")}"
  host = "${aws_instance.jenkinsNode.public_ip}" 
}

inline = [
  "sudo mkdir -p /etc/chef/trusted_certs",
  "sudo curl --silent --show-error --retry 3 --location --output 
\"/etc/chef/trusted_certs/opsworks-cm-ca-2016-root.pem\" 
\"https://opsworks-cm-us-assets.s3.amazonaws.com/misc/opsworks-cm-ca-2016-root.pem\""
 ]
}

provisioner "chef" {

environment     = "_default"
run_list        = ["android-aws-nodes::updateAndroidSdk"]
node_name       = "jenkinsNodeOnDemandUpdate"
secret_key      = "${file("~/chef/mobile-chef-aws/.chef/private.pem")}"
server_url      = "https://my-opsworks-server.io/organizations/default"
recreate_client = true
user_name       = "delivery"
user_key        = "${file("~/chef/mobile-chef-aws/.chef/private.pem")}"
version         = "12.8.1"
}

connection {
user = "ubuntu"
private_key = "${file("~/key/jenkins-main.pem")}"
}

 count = 1
 instance_type = "c4.8xlarge"
 ami = "ami-0000000"
 key_name = "mykey"
 subnet_id = "subnet-00000000"
 vpc_security_group_ids = ["sg-00000000"]
}

我在尝试应用上述代码时运行时收到以下错误。我连接并启动了引导过程,但它一直抱怨它找不到私有的(我相信它是在运行“客户端创建”时创建的。我 ssh 进入了实例,但我没有看到 ubuntu.pem /etc/chef/ 目录:

已更新 aws_instance.jenkinsNode(厨师):错误:无法通过密钥 /etc/chef/delivery.pem 验证 https://mobile-b9oer25dyrts1qor.us-east-1.opsworks-cm.io/organizations/default/ 作为交付 aws_instance.jenkinsNode(厨师):响应:用户或客户端“交付”的签名无效 aws_instance.jenkinsNode(厨师):清理用户密钥...

Error applying plan:

1 error(s) occurred:

* aws_instance.jenkinsNode: 1 error(s) occurred:

* Command "sudo knife client create jenkinsNodeOnDemandUpdate -d -f /etc/chef/client.pem -c /etc/chef/client.rb -u ubuntu --key /etc/chef/ubuntu.pem" exited with non-zero exit status: 100

【问题讨论】:

    标签: amazon-web-services chef-infra terraform aws-opsworks


    【解决方案1】:

    登录时没有密钥,因为引导失败后立即被删除

    aws_instance.jenkinsNode (chef): Cleanup user key...
    

    仔细检查运行 Terraform 的机器上的密钥 (~/key/mykey.pem) 是否格式正确。它也应该加载$file 或作为字符串:

    user_key        = "${file("~/key/mykey.pem")}"
    

    请仔细检查 Terraform 是否支持 ~

    【讨论】:

    • 我更新了代码以引用密钥,但现在我收到以下错误:“aws_instance.jenkinsNode (chef): ERROR: Failed to authenticate to chef-server-cm.io/organizations/default as delivery with key /etc/ chef/delivery.pem aws_instance.jenkinsNode(厨师):响应:用户或客户端“交付”的签名无效
    • “delivery”是我运行“knife user list”时得到的用户
    • 您是否使用了正确的delivery 用户密钥?您可以使用此密钥进行身份验证并创建客户端/节点吗?
    • 好的,根据您的回复找到了。我使用 AWS Opsworks 创建了这个厨师环境,它会自动创建 node_name,这也是 user_name。关键在于在 Opsworks 中创建实例时必须下载的套件。
    猜你喜欢
    • 2011-08-04
    • 2019-09-14
    • 2016-05-16
    • 1970-01-01
    • 2013-02-15
    • 2018-04-18
    • 2016-01-11
    • 2020-01-24
    • 2016-09-20
    相关资源
    最近更新 更多