program tip

CloudFormation 템플릿을 빠르고 효과적으로 디버깅하려면 어떻게해야합니까?

radiobox 2020. 11. 2. 07:49
반응형

CloudFormation 템플릿을 빠르고 효과적으로 디버깅하려면 어떻게해야합니까?


CloudFormation은 같은 같은 AWS 리소스 스택의 프로그램 만들 수있는 강력한 AWS를 제공하고 애플리케이션의 웹 티어, 고성능 컴퓨팅 클러스터, 또는 , 전체 애플리케이션 스택을 하나의 API 호출로. 엄청나게 강력합니다. 특히 Chef, Puppet 또는 cloud-init 와 결합 할 때이를 사용하는 것은 좋은 AWS 관행으로 간주됩니다 . 그것을 디버깅하면 저를 악으로 만듭니다.

프로덕션 예를 들어 보겠습니다. stock mongodb 클러스터 템플릿 이 저에게 적합하지 않습니다. 나는 특별히 이유를 모릅니다. 거의 항상 그렇듯이 간단한 일이라고 확신합니다. 내 문제는 무엇이 잘못되었는지 알아낼 수 없다는 것이 아닙니다. 스택이 실패하는 데는 20 분에서 30 분 사이가 걸리고, 리소스를 전혀 삭제한다고 가정하면 삭제하는 데 3-4 분이 더 걸립니다.

내가 무엇을 놓치고 있습니까? 나는 --disable-rollback깃발 에 대해 알고 그것을 산소처럼 사용합니다. 나는 오래 전에 출구 메시지를 감싸고 cfn-signal가라 앉는 배에서 밸러스트처럼 던지는 법을 배웠습니다 . 템플릿 디버깅 프로세스를 더 빠르게 만들 수있는 방법은 무엇입니까? 아니면 실수를 저지른 지 30 분 후에 영원히 눈치 채지 못합니까?


aws cloudformation validate-templateAWS CLI 도구에서 명령을 사용합니다 . 템플릿이 유효한 JSON 또는 YAML인지 여부 만 확인하고 키와 값이 올바른지 여부는 확인하지 않습니다 (예 : 키의 오타를 확인하지 않음).


1 년 후 또 다른 옵션은 이러한 템플릿을 대류권 과 같은 타사 라이브러리로 추상화하는 것 입니다. 이 라이브러리는 JSON 페이로드를 구성하고 그 과정에서 많은 유효성 검사를 수행합니다. 이것은 또한 "천행 JSON 파일을 관리하는 것은 정말 슬픈 일입니다" 문제를 해결합니다.


템플릿 디버깅 프로세스를 더 빠르게 만들 수있는 방법은 무엇입니까? 아니면 실수를 저지른 지 30 분 후에 영원히 눈치 채지 못합니까?

다음은 복잡한 CloudFormation 템플릿 개발의 반복 속도 향상에 특히 초점을 맞춘 몇 가지 모범 사례 제안입니다.

CloudFormation 도구를 사용하여 템플릿 및 스택 업데이트 유효성 검사

AWS는 이미 자체 모범 사례 문서 에 이러한 내용을 설명 했으므로 반복하지 않겠습니다.

이 단계의 요점은 실제로 스택 생성 / 업데이트를 수행하기 전에 명백한 구문 또는 논리적 오류를 포착하는 것입니다.

격리 된 테스트 리소스

복잡한 스택에서 개별 CloudFormation 리소스를 사용하기 전에 더 작은 독립 실행 형 스택에서 동작을 테스트하여 사용 제한 및 일반적인 시작 / 해체 시간을 포함하여 해당 리소스의 생성 / 업데이트 / 삭제 동작의 전체 범위를 철저히 이해해야합니다. 먼저.

  • 타사 사용자 지정 리소스를 개발하거나 사용하는 경우 언어 플랫폼에 적합한 라이브러리를 사용하여 단위 테스트를 작성하여 응용 프로그램 논리가 모든 사용 사례에서 예상대로 작동하는지 확인합니다.
  • 개별 리소스가 생성 / 업데이트 / 삭제하는 데 걸리는 시간은 기본 API 호출의 동작에 따라 리소스 유형마다 크게 다를 수 있습니다. 예를 들어 복잡한 AWS::CloudFront::Distribution리소스는 생성 / 업데이트 / 삭제하는 30 ~ 60 분이 걸리는 반면 AWS::EC2::SecurityGroup업데이트는 몇 초 만에 완료 될 수 있습니다.
  • 개별 리소스는 구현에 버그 / 문제 / 제한 사항이있을 수 있으며, 이는 훨씬 더 큰 스택 내에서가 아니라 격리 테스트 할 때 해결 방법을 디버깅하고 개발하기가 훨씬 쉽습니다. 개별 AWS 계정 설정에 따른 AWS 서비스 제한 또는 스택을 생성하는 리전에 따른 서비스의 리전 가용성 과 같은 제한을 염두에 두십시오 .

작은 단위로 복잡한 스택 구축

스택 생성 / 업데이트를 수행 할 때 단일 리소스에서 오류가 발생하면 스택이 전체 리소스 변경 세트를 롤백하게되며, 이로 인해 성공적으로 생성 된 다른 리소스가 불필요하게 파괴 될 수 있으며, 관련 리소스의 종속성 그래프.

이에 대한 해결책은 스택을 더 작은 업데이트 배치로 점진적으로 빌드하여 한 번에 하나 (또는 ​​몇 개) 리소스를 추가하는 것입니다. 이렇게하면 리소스 생성 / 업데이트에서 오류가 발생하는 경우 롤백으로 인해 전체 스택의 리소스가 파괴되지 않고 최신 업데이트에서 변경된 리소스 집합 만 발생합니다.

스택 업데이트 진행 상황 모니터링

생성 / 업데이트가 수행되는 동안 스택의 이벤트를 확인 하여 스택 업데이트의 진행 상황모니터링 해야합니다 . 이것은 개별 리소스와 관련된 추가 문제를 디버깅하기위한 시작점이 될 것입니다.


AWS Toolkit for Eclipse에 포함 된 AWS CloudFormation 템플릿 편집기를 보셨습니까 ? 구문 강조, 문 완성 및 AWS CloudFormation에 대한 배포가 있습니다.


파티에 늦었지만 편집자를 구성하고 배우는 데 약간의 시간을 할애하는 것이 가치가 있다고 덧붙일 수도 있습니다. 대답으로 웃기게 기본적으로 들리지만 시도해보십시오.

제 경우에는 vim을 사용하여 json 구문 플러그인을 설치하고 큰 CF 파일을 쉽게 탐색 할 수있는 폴딩 기술을 (마지막으로) 이해하면 훨씬 더 잘 수행했습니다. Mine은 이제 오타를 제안하고 (사용해서는 안되는 쉼표 등) 색상 강조 표시를 통해 명확한 시각적 단서를 제공하는 데 많은 시간을 절약 할 수 있습니다.

이렇게하면 구문 오류를 완화하는 데 도움이 될 수 있지만 템플릿 내 논리 오류는 다른 도구로 더 잘 수정됩니다. 언젠가 CF에 "미리보기"모드가 있기를 바랍니다.


JetBrains IDE (IntelliJ IDEA PhpStorm WebStorm PyCharm RubyMine AppCode CLion Gogland DataGrip Rider Android Studio) 의 경우 JSON 및 YAML CFN 템플릿의 심층 검사를 지원하는 AWS CloudFormation 플러그인이 있습니다.


EC2 머신을 다루는 경우 EC2 머신에 로그인하고 boot.log 파일 (RHEL6 / Centos의 /var/log/boot.log)을 마무리하는 것이 좋습니다. 이 파일은 모든 셸 활동 (예 : 설치, 파일 다운로드, 파일 복사 등)으로 업데이트됩니다.

또한 http://www.jsoneditoronline.org/ 와 같은 편집기를 사용 하여 JSON의 TREE 표현을 얻으십시오. 이는 JSON 요소의 순서를 확인하는 데 도움이됩니다.

그리고 파일을 업데이트 할 때 항상 http://www.git-tower.com/blog/diff-tools-mac/ 또는 실제 버전 제어 시스템 과 같은 도구를 사용 하여 실수로 스크립트를 손상시킬 수있는 내용을 변경하지 않았는지 확인하십시오.


AWS CLI aws cloudformation validate-template명령 외에도 심층적 인 검증을 수행 하는 노드 기반 cfn-check 도구가 있습니다.


AWS CloudFormation linter cfn-python-lintaws cloudformation validate-template다음을 넘어서는 추가적인 정적 분석을 제공합니다 .

https://github.com/aws-cloudformation/cfn-python-lint/

https://aws.amazon.com/blogs/mt/git-pre-commit-validation-of-aws-cloudformation-templates-with-cfn-lint/


A recent new feature added to Cloudformation this past December was the addition of additional Parameter Types. These new Types allow your templates to perform stronger data checking, and also can "fail-fast" when creating resources and nested Cloudformation stacks. You also have the ability to provide nicer human-readable custom error messages when invalid values are passed in using the new ConstraintDescription attribute.

The new types are especially helpful when dealing with various VPC resources. You can ensure that Parameters for your templates are the correct type, and are explicit about expecting a single value vs. a List.

For example:

"Parameters" : {
  "SingleGroup": { "Type": "AWS::EC2::SecurityGroup::Id", ...},
  "GroupList": {"Type": "List<AWS::EC2::SecurityGroup::Id>", ...}
}

You can also make use of the CloudFormation Designer available from amazon here: https://console.aws.amazon.com/cloudformation/designer/home?region=us-east-1

Simply paste your template (JSON) on the "Template" pane and then click on the tick symbol to validate your template. Any errors will show up in the "Error" pane.

Hope this helps.


Please checkout my cloudformation validator at https://pypi.org/project/cloudformation-validator/

This will validate the schema and then validate again a list of rules, and allow for custom rules. I also allows for easy integration with deployment tools.

참고URL : https://stackoverflow.com/questions/11854772/how-can-i-quickly-and-effectively-debug-cloudformation-templates

반응형