2016-06-20 5 views
1

개인 오픈 스택 클라우드로 terraform을 실행하여 새 서버를 부트 스트랩합니다. 가장 바쁜 시간대 (평일 오후에)에 새 서버 (모든 방법 사용)를 만들려고 할 때 일반적으로 서버의 절반이 실패합니다 (그리고 이것은 terraform과 관련이 없습니다). 문제는 내가 제공하려고 시도하는 서버 중 하나가 provisioner "remote-exec" 블록을 오류없이 완료하지 못하는 경우 (내 사설 클라우드로 인해) 내 terraform apply이 중지됩니다.Terraform, 프로비저닝 중에 실패한 서버를 무시하는 방법은 무엇입니까?

terraform apply을 실행할 때 terraform이 이러한 실패한 서버를 완전히 무시하도록합니다. 따라서 20 개의 서버를 프로비저닝하고 성공적으로 1 개의 서버 만 시작하면 해당 서버는 리소스 블록에서 지정한 모든 명령을 실행합니다 .

내 리소스에 추가 할 수있는 행이 ignore_failed_resources = true 이니 terraform이 실패한 서버를 무시하고 완료된 서버를 무시합니다.

+0

TF에서 (내가 아는 한) 실제로 그렇게 할 방법이 없습니다. TF가 완료된 후 Terraform과 프로비저닝의 개별화를 시도하고 외부에서 준비 작업을 수행 할 수 있습니다. 우리는 TF를 만들어 인스턴스를 만든 다음 Aninst playbooks를 새 인스턴스와 별도로 실행하고 Jenkins를 통해 모든 인스턴스를 조정합니다. 전체에 약간의 복잡성을 추가하지만 여기에있는 것처럼 너무 단단히 결합되어 있지 않다는 것을 의미합니다. – ydaetskcoR

+0

안녕하세요. 이전 의견과 같은 생각. terraform 기반 인프라를위한 경량 제공 도구 인 [sparrowform] (https://github.com/melezhik/sparrowform)을 사용해보십시오. 이것은 테라 폼과 분리되어 있으므로 프로비저닝 오류로 케이스를 처리합니다. –

답변

0

이 작업을 수행하는 데 사용할 수있는 간단한 구성 스위치가 없습니다. "remote-exec"가 실패하는 문제에 대해 더 구체적으로 설명해 주시겠습니까?

단순히 연결을 거부하기 때문에 "remote-exec"를 "local-exec"로 전환하고 스크립트에서 명령을 랩핑하여 서버의 호스트 이름을 매개 변수로 전달할 수 있습니다. 그런 다음 스크립트는 SSH 연결 시작 및 필요한 명령 실행을 처리합니다. 테라 폼이 스크립트가 올바르게 작동한다고 생각할 수 있도록 오류가 발생하면 종료 코드 0으로 스크립트가 정상적으로 실패하는지 확인하십시오.

resource "aws_instance" "web" { 
    provisioner "local-exec" { 
     command = "./myremotecommand.sh ${aws_instance.web.private_ip}" 
    } 
}