Terraform 스크롤을 사용하여 EC2 업데이트

이 게시물은 @endofcake'sarticle의 실현일 뿐이다.EC2에서 스크롤 업데이트 기술을 사용하는 방법에 대한 실제 사례를 보여 드리겠습니다.스크롤 업데이트와 파란색/녹색 사이의 차이에 대해 더 많은 배경 정보를 알고 싶으면 그의 댓글을 보십시오.


🚨경고🚨


극한 스크롤 기술이 앞서다.조작을 조심하다.



Terraform은 로컬에서 파란색/연한 파란색을 만들 수 있습니다. lifecycle blockcreate_before_destroy = true만 추가하면 Terraform은 파란색/녹색으로 자원을 만들 수 있습니다.
resource "azurerm_resource_group" "example" {
  # ...

  lifecycle {
    create_before_destroy = true
  }
}
그림 1 - 라이프 사이클 블록의 예입니다.
이 업데이트를 보여주기 위해서, 나는 Packer를 사용하여 매우 간단한 웹 페이지를 만들어서 그림을 만들기로 결정했다.

Packer를 사용하여 속도 향상


terraform을 사용하여 스크롤 업데이트를 만드는 방법을 깊이 연구하기 전에 Packer에 대해 이야기합시다.
HashiCorpPacker는 자동화된 기계 이미지를 구축하는 데 목적을 둔다. 이것은 우리가 스크립트를 만들어서 응용 프로그램 내부의 이미지를 설정하고 응용 프로그램을 설치하는 데 필요한 모든 의존 항목을 설정할 수 있다는 것을 의미한다.
우리의 예시에서 우리는 Packer를 사용하여 매우 간단한 HTTP 서버를 구축했다.간단한 스크립트를 만들었습니다. 아파치 웹 서버를 설치하고 특정한 배경색을 가진 웹 페이지를 만들 것입니다. (색을 선택할 수 있지 않습니까?)

프로그램의 "버전"을 업데이트하려면 색 변수를 원하는 색으로 변경하십시오.우리 웹 페이지의 기본 색상은 빨간색입니다


variable "color" {
  default = "red"
}

변수.pkr.염산

이 글에서 저는 Packer를 상세하게 소개하지 않겠지만 기본적으로 Packer는 EC2 실례를 만들어서 그 중에서 실행scripts/basic-website.sh하고 이 실례의 스냅샷을 찍어서 rolling_update_{{timestamp}}로 저장합니다.이 스크립트의 실행은 provisioner 블록에서 설명합니다





이것은 좋은 강좌가 아니라는 것을 알지만, 지금은 이미 충분한 포장이다



Rolling Update with Terraform


그래, 재미있는 건.Terraform은 이 점을 할 수 없습니다



Terraform은 응용 프로그램이 활성 상태인지 알 수 없고 현재 버전이 무엇인지 확인할 수 없습니다.왜냐하면 그것은 이 목적을 위해 만들어진 것이 아니기 때문이다


우리는 목표 그룹과 자동 축소 그룹에 건강 검사를 설정할 수 있지만, Terraform은 응용 프로그램이 응용 단계를 마친 후에 건강한지 신경 쓰지 않는다


다른 한편, Terraform을 사용하여 스크롤 업데이트를 만들기 위해 작은 기술을 사용합니다...CloudFormation



CloudFormation은 자동 축소 그룹에 매우 멋진 기능을 제공합니다. 즉, UpdatePolicy입니다.이것은 ASG가 업데이트될 때마다 발생하는 정책입니다. 이것은 우리가 새 버전의 시작 템플릿을 시작하면 ASG가 그 실례를 업데이트할 수 있음을 의미합니다


우리는 이런 클라우드 정보 자동화를 이용하여 지형에 융합시킬 수 있다



그래, 르카스, @endofcake 이미 우리에게 이 모든 것을 설명했어


말을 적게 하고 코드를 많이 주세요



우선, 이git 저장소 복제:




souzaxx / Rolling-Update-Terraform


Code example for RollingUpdate with Terraform and Packer




packer 폴더에 우리의 첫 번째 AMI


cd packer
packer build .

Wait until the AMI is created



이후 저장소의 루트로 돌아가 지형을 적용합니다


cd ..
terraform init
terraform apply

웹 페이지가 시작되고 실행 중인지 확인하려면 Terraform 출력terraform output lb_dns에서 LoadBalancer DNS를 가져와 가장 좋아하는 브라우저에서 열거나 롤업curl $(terraform output lb_dns)


Update the Image


업데이트 진행 상황을 확인하기 위해 다른 터미널에서 이 순환을 실행하십시오:


while true; do
curl $(terraform output lb_dns)
sleep 1
done

이제 색상을 선택하여 응용 프로그램의 새 버전을 만듭니다.패커 CLI로 전달-var 'color=green'의 기본 변수를 덮어쓸 수 있습니다


cd packer
packer build -var 'color=green' .

완성을 기다리고 지형을 다시 적용합니다:


cd ..
terraform apply

우리는 lauchconfigurationcloudformation 자원이 변경되었는지 확인할 수 있습니다



적용 확인 및 롤러 순환을 확인하여 변경 사항을 실시간으로 확인합니다



Conclusion


저는 이 문장이 Terraform에서의 학습에 유용하길 바랍니다. 제 다음 문장에서 저는 이 과정을 진실한 응용 프로그램으로 보여주고 싶습니다. 예를 들어Consult


Clean up


terraform destroy --auto-approve

Packer가 생성한 모든 AMI:
제거


당신의 시간과

감사합니다.

좋은 웹페이지 즐겨찾기