웹사이트 검색

CloudFormation 템플릿으로 AWS 리소스를 자동화하는 방법


이 페이지에서

  1. 전제 조건
  2. 첫 번째 스택 만들기
  3. CloudFormation 스택 삭제
  4. 결론

AWS CloudFormation은 시스템 관리자가 단일 명령문에서 구성, 종속성 및 상호 관계를 포함하여 전체 AWS 리소스 모음을 설정하고 관리할 수 있는 서비스입니다. 또한 위에서 실행 중인 애플리케이션을 중지하거나 재배포하지 않고도 기존 인프라를 변경할 수 있습니다.

AWS Cloudformation을 사용하면 인프라를 코드로 구성할 수 있습니다. 기본적으로 클라우드에서 작동하고 사용자가 컴퓨팅, 스토리지 및 기타 리소스를 프로비저닝하고 관리하는 데 도움이 되는 코드 엔진으로서의 인프라입니다. CloudFormation 템플릿은 AWS 리소스를 생성하거나 업데이트하는 방법에 대한 지침이 포함된 JSON 파일입니다. AWS CLI, boto3와 같은 AWS SDK 또는 AWS CloudFormation 서비스를 사용하여 템플릿을 생성할 수 있습니다.

CloudFormation은 다음과 같은 많은 이점을 제공합니다.

  • 사용 편의성: CloudFormation은 모든 AWS 리소스 속성 및 관계를 한 곳에서 설명할 수 있는 템플릿 형식을 사용합니다.\n
  • 시장 진출 민첩성: CloudFormation을 사용하면 AWS 리소스를 코드로 구축하고 배포할 수 있습니다.\n
  • 높은 수준의 자동화: CloudFormation은 높은 수준의 코드를 AWS 리소스를 생성하거나 업데이트하는 데 사용할 수 있는 간단한 템플릿 세트로 변환합니다.\n

AWS에서 워크로드 배포를 자동화하려는 경우 CloudFormation을 사용하는 것이 가장 좋은 방법 중 하나입니다.

이 기사에서는 CloudFormation에 대한 부드러운 소개를 보여주고 CloudFormation을 사용하여 AWS 리소스를 자동화합니다. 이 가이드는 시연을 위해 S3 리소스를 사용합니다. 이 자습서를 마치면 CloudFormation을 사용하여 여러 AWS 리소스를 생성, 업데이트 및 삭제할 수 있습니다. 자체 CloudFormation 템플릿 생성을 시작하는 방법도 배울 수 있습니다.

전제 조건

이 자습서를 따르려면 다음 전제 조건이 필요합니다.

  • 버전 1.6.1 이상 버전의 로컬 시스템에 AWS CLI가 설치되고 기본 리전으로 구성됩니다. Python 2.6 또는 3+에 대해서도 동일한 버전을 구성해야 합니다.\n
  • AWS 서비스에 대한 기본적인 이해와 AWS 콘솔에 대한 약간의 경험.\n

첫 번째 스택 만들기

이제 전제 조건이 준비되었으므로 첫 번째 스택을 구성하고 생성하여 시작하겠습니다.

1. 즐겨찾는 브라우저를 엽니다. 이 GitHub 저장소로 이동하여 3개의 파일을 로컬 하드 디스크 드라이브에 다운로드합니다.

  • createstack.json
  • updatestack1.json
  • updatestack2.json

2. 이제 AWS Console ---> CloudFormation으로 이동합니다.

3. 다음 화면이 나타납니다. 스택 생성 ---> 새 리소스 사용을 클릭합니다.

4. 다음 화면이 나타납니다. 템플릿 준비됨 ---> 템플릿 파일 업로드 ---> 파일 선택 ----> cr

새 스택을 생성할 때 스택에 대한 템플릿을 제공해야 합니다. 세 가지 방법으로 이 작업을 수행할 수 있습니다.

  • 템플릿이 준비되었습니다. 이미 템플릿이 있는 경우 이 옵션을 선택하십시오. 그렇지 않은 경우 다음 옵션으로 이동합니다.\n
  • 샘플 템플릿 사용: 이 옵션을 사용하여 템플릿을 만드는 데 유리하게 시작할 수 있습니다. AWS 사용 설명서는 CloudFormation 템플릿의 몇 가지 예를 제공합니다.\n
  • Designer에서 템플릿 생성: AWS CloudFormation Designer는 스택을 생성하는 최신 방법입니다. Sharepoint와 같이 널리 사용되는 다른 도구와 유사한 끌어서 놓기 인터페이스를 사용하여 템플릿을 만들 수 있습니다.\n

이 데모에서는 첫 번째 옵션인 "템플릿이 준비됨"을 사용합니다. 템플릿이 이미 준비되어 있기 때문입니다(디스크에 다운로드한 파일).

편집기에서 createstack.json 파일을 열어서 살펴볼 수 있습니다. createstack.json 파일에 다음 줄이 표시됩니다.

  • "Resources": {는 AWS CloudFormation이 생성하는 섹션입니다. 생성할 모든 물리적 리소스를 그룹화한 것입니다.\n
  • "catpics": 유형이 S3 버킷인 논리적 리소스입니다.\n
  • "Type": "AWS::S3::Bucket"은 AWS CloudFormation이 생성할 물리적 리소스입니다.\n

5. 다음 화면에서 스택 이름(htf)을 제공하고 다음을 클릭합니다. 모든 스택에는 서로 다를 수 있도록 AWS 리전 내에서 고유한 이름이 필요합니다. 여기에는 특수 문자를 사용할 수 없으며 문자, 숫자 및 밑줄(공백 없음)만 사용할 수 있습니다. AWS는 쉽게 식별할 수 있도록 고유한 스택 ID를 자동으로 생성합니다.

6. 다음 화면에서 기본값을 유지하고 다음을 클릭합니다.

7. 다음 화면에서 기본값을 유지하고 스택 만들기를 클릭합니다.

이 시점에서 AWS CloudFormation은 템플릿을 로드하고 스택을 생성합니다. CloudFormation은 템플릿의 모든 섹션을 살펴보고 해당하는 물리적 리소스를 생성합니다. 경우에 따라 AWS CloudFormation은 모든 것이 제자리에 있는지 확인하기 위해 템플릿에서 여러 검사를 수행합니다. 잘못된 것이 발견되면 문제가 무엇이고 해결 방법을 설명하는 오류 메시지가 표시됩니다.

생성 프로세스는 생성하는 데 약 4-5분 정도 걸립니다. 아래와 같이 CloudFormation 대시보드에서 스택 상태를 확인하여 진행 상황을 확인할 수 있습니다. 왼쪽에서 catpics 논리적 리소스를 볼 수 있으며 이러한 각 리소스에서 AWS CloudFormation이 생성하는 물리적 리소스(CREATE_IN_PROGRESS)를 볼 수 있습니다.

리소스 탭으로 이동하여 이 스택에 대해 생성 중인 물리적 리소스를 볼 수 있습니다. 이 경우에는 아래와 같이 물리적 리소스 ID가 htf-catpics-1roqn54xwm3of인 catpics라는 이름의 S3 버킷입니다.

8. 이제 S3 대시보드로 이동합니다. S3 대시보드에서 버킷에 생성되는 객체를 볼 수 있습니다. 이 경우 S3 버킷의 스택 이름은 아래에서 볼 수 있듯이 htf-catpics-1roqn54xwm3of입니다.

버킷 이름이 스택 이름(htf)-논리 스택 이름(catpics)-임의의 문자열(1roqn54xwm3of) 패턴을 따르는 것을 볼 수 있습니다. 이 패턴은 당신이 알아야 할 매우 중요합니다. 템플릿에서 물리적 리소스 ID를 지정하지 않으면 AWS CloudFormation은 이 패턴을 사용하여 리소스의 이름을 생성합니다. 이것의 장점은 이제 동일한 템플릿을 사용하여 여러 스택을 생성할 수 있다는 것입니다. AWS CloudFormation은 고유한 이름 지정을 자동으로 처리합니다!

S3와 같은 서비스의 경우 고유한 이름이 매우 중요합니다. 버킷의 이름은 데이터를 저장할 수 있도록 전역적으로 고유해야 합니다. 버킷 이름은 같을 수 없습니다. 동일한 이름으로 이름을 지정하려고 하면 객체를 버킷으로 푸시하지 못합니다.

이것이 중요한 이유를 이해하는 것이 중요합니다. CloudFormation을 사용하면 템플릿에서 물리적 리소스 ID의 이름을 명시적으로 지정하지 않는 것이 좋습니다. 대신 AWS CloudFormation에서 자동으로 생성하도록 하십시오. 즉, 이름 충돌에 대한 걱정 없이 템플릿을 재사용하여 리소스가 다른 여러 스택을 생성할 수 있습니다. 템플릿을 한 번, 열 번 또는 백 번 사용할 수 있으며 그에 따라 CloudFormation이 이름 변경을 처리합니다.

스택 업데이트

이제 AWS CloudFormation을 사용하여 첫 번째 스택을 생성했으므로 스택을 업데이트하는 방법을 살펴보겠습니다. 스택을 업데이트하는 방법은 프로덕션 사용 또는 시험 모두에서 이해해야 할 매우 중요한 개념입니다. 시험에서 템플릿에서 무언가를 변경하라는 요청을 받거나 스택에서 무언가를 업데이트해야 할 수도 있습니다.

이 섹션에서는 몇 가지 템플릿을 변경하고 업데이트된 템플릿을 사용하여 스택을 업데이트하고 리소스에 어떤 변경 사항이 있는지 평가합니다.

일반적으로 CloudFormation에서 스택을 업데이트할 때. 스택을 생성하고 새 리소스를 추가하거나, 기존 리소스를 업데이트하거나, 기존 리소스를 제거하는 데 사용한 템플릿을 가져옵니다.

1. 편집기에서 이전에 다운로드한 updatestack1.json 파일을 열면 다음 코드 블록이 표시됩니다. 이 템플릿을 이전에 사용한 createstack.json 템플릿과 비교해 보겠습니다. dogpics라는 추가 논리 리소스를 추가할 것임을 알 수 있습니다. 더 중요한 것은 기존 catpics인 기존 논리적 리소스에 변경 사항이 없다는 것입니다. catpics 리소스는 변경되거나 제거되지 않았습니다. 추가 논리 리소스인 dogpics만 추가하겠습니다.

2. CloudFormation 대시보드로 이동합니다. 스택(htf)을 선택하고 업데이트를 클릭합니다.

3. 다음 화면에서 현재 템플릿 교체 ---> 템플릿 파일 업로드 ---> 파일 선택 ---> updatestack1.json 파일 선택 ---> 다음을 선택합니다.

4. 다음 화면에서 아래와 같이 다음 ---> 다음 ---> 스택 업데이트를 클릭합니다. CloudFormation이 변경 사항을 표시하는 것을 볼 수 있습니다. 이 경우에는 dogpics라는 논리 ID를 추가했습니다. CloudFormation은 또한 수행될 작업(추가)과 논리적 리소스 유형(AWS::S3::Bucket)을 보여줍니다. 교체 열이 비어 있습니다.

스택을 생성할 때와 마찬가지로 스택 페이지에서 업데이트 이벤트를 볼 수 있습니다. 모든 업데이트는 CloudFormation에서 수행됩니다. 이 경우 추가 논리 리소스 ID인 dogpics를 전달했습니다.

업데이트 프로세스가 완료되면 스택에 catpics 및 dogpics 리소스가 모두 있음을 아래에서 확인할 수 있습니다.

S3 대시보드로 이동하면 htf-dogpics-4qesklu84ugq라는 추가 dogpics 버킷이 생성된 것을 볼 수 있습니다. 동일한 패턴을 사용하는 버킷의 네이밍이 스택 이름-논리적 스택 이름-랜덤 문자열을 따르는 것을 볼 수 있습니다.

이 시점에서 리소스에 새 논리 리소스만 추가하면 매우 간단하고 위험이 낮습니다. 이제 스택에서 리소스를 제거하는 방법을 보여드리겠습니다.

스택에서 dogpics 리소스를 제거합니다. 리소스를 삭제하면 스택이 손상될 수 있으므로 추가하는 것보다 위험합니다. 아직 배우는 중이므로 dogpics 리소스를 삭제하여 어떤 일이 발생하는지 확인하여 연습해 보겠습니다.

5. CloudFormation 대시보드로 이동합니다. htf 스택을 선택하고 업데이트 ---> 현재 템플릿 교체 ---> 파일 선택 ---> 이번에는 createstack.json 파일을 다시 선택 ---> 다음 --을 클릭합니다. -> 다음 ---> 다음.

6. 다음 화면에서 스택 업데이트를 클릭합니다. 변경 세트 미리보기에서 이제 조치 열이 제거됨을 볼 수 있습니다. 이 경우 CloudFormation은 dogpics 리소스와 해당 물리적 리소스(htf-dogpics-4qesklu84ugq)를 제거합니다.

S3 대시보드로 이동하면 이제 S3 대시보드에서 dogpics 버킷이 사라진 것을 확인할 수 있습니다.

스택 이벤트에서 DELETE_COMPLETE 이벤트가 발생합니다.

논리적 리소스를 제거하는 것은 항목을 삭제할 수 있기 때문에 약간 위험하지만 그 위험은 템플릿에서 제거한 논리적 리소스(dogpics 리소스)에만 연결됩니다. 지금까지 우리는 catpics 리소스와 같은 다른 기존 논리 리소스를 변경하지 않았습니다. 따라서 catpics 물리적 리소스는 스택 업데이트의 영향을 받을 수 없습니다. 스택을 업데이트하는 또 다른 옵션이 있습니다. 이 옵션을 사용하여 기존 논리적 리소스에 대한 구성을 변경할 수 있습니다.

7. 이전에 편집기에서 다운로드한 updatestack2.json 파일을 열면 다음 코드 블록이 표시됩니다.

updatestack2.json 파일은 두 가지 주요 차이점을 제외하고 이전에 사용한 createstack.json 템플릿과 매우 유사합니다. 두 번째 논리적 리소스인 dogpics를 다시 추가합니다. 그러나 우리는 또한 catpics를 변경했습니다.

속성이라고 하는 구성의 추가 섹션을 추가했습니다. 여기에서 지정된 논리적 리소스에 대한 추가 속성을 정의할 수 있습니다. 이 경우 S3 버킷을 생성합니다. 물리적 리소스의 버킷 이름을 catsareawesome-howtoforge로 명시적으로 설정합니다.

8. CloudFormation 대시보드로 이동합니다. htf 스택을 선택하고 업데이트 ---> 현재 템플릿 바꾸기 ---> 파일 선택 --->을 클릭합니다. 이번에는 updatestack2를 선택합니다. json 파일 ---> 다음 ---> 다음 ---> 다음.

9. 다음 화면에서 스택 업데이트를 클릭합니다. 변경 세트 미리보기 패널에서 이 업데이트의 효과를 확인할 수 있습니다.

첫 번째 변화는 친숙해 보입니다. S3 버킷이 될 dogpics에 대한 추가 논리적 리소스를 추가하려고 했습니다. 그러나 수정 작업도 볼 수 있습니다. 수정은 실제로 CloudFormation 스택에 수행할 수 있는 가장 위험한 작업입니다.

그 이유는 제자리에 있고 잠재적으로 다른 환경에서 사용 중인 기존 리소스가 스택 업데이트에 의해 변경될 수 있기 때문입니다. 따라서 기존 논리 리소스를 수정하는 것은 잠재적으로 사용하기에 더 위험합니다.

이러한 방식으로 스택을 업데이트하면 물리적 리소스가 영향을 받을 가능성이 세 가지 있습니다. 첫 번째 가능성은 서비스 중단 없이 리소스가 업데이트되는 것입니다.

두 번째 가능성은 리소스가 업데이트되고 일정 수준의 중단으로 인해 서비스가 중단되는 것입니다. 예를 들어 EC2 인스턴스 크기를 변경하기 위해 스택을 업데이트하는 경우입니다. 이렇게 하면 EC2 인스턴스를 수동으로 재부팅해야 합니다. 새 AMI가 시작되고 약간의 다운타임이 발생할 수 있습니다. 그러나 새 AMI가 시작되면 서비스를 즉시 사용할 수 있습니다.

마지막 가능성은 업데이트가 기존 물리적 리소스 전체를 삭제하고 새 리소스로 대체(교체)하는 것입니다. 이것은 CloudFormation 스택을 업데이트할 때 가장 위험한 가능성입니다. 할 때 정말 주의를 기울여야 합니다. 이러한 종류의 교체가 발생하면 아래 스크린샷과 같이 교체 열이 True가 됩니다.

CloudFormation Stacks 대시보드에서 "요청한 업데이트에는 새로운 물리적 리소스를 생성해야 하므로 생성해야 합니다."라고 표시되는 것을 볼 수 있습니다. 따라서 CloudFormation은 기존 리소스를 삭제하고 새 리소스를 생성합니다.

S3 대시보드로 이동하면 이제 catpics 버킷이 사라지고 새 버킷인 catsareawesome-howtoforge가 생성된 것을 볼 수 있습니다. CloudFormation 템플릿 내의 리소스에 대한 물리적 이름(catsareawesome-howtoforge)을 명시적으로 제공하지만 리소스 이름에 임의의 문자를 적용하지 않습니다.

문제는 이 템플릿을 사용하여 다른 CloudFormation 스택을 생성하는 경우 정확히 동일한 이름으로 다른 버킷을 생성하려고 시도하기 때문에 실패한다는 것입니다. 그리고 어떤 AWS 계정에도 같은 이름을 가진 2개의 버킷을 가질 수 없습니다. 정확히 같은 이름으로 다른 버킷을 만들려고 하면 다음 오류가 발생합니다.

CloudFormation 스택 삭제

이제 템플릿을 변경하고 스택을 업데이트했으므로 작업을 완료한 후 스택을 삭제해야 합니다. 사용하지 않는 스택을 삭제하지 않으면 CloudFormation 스택 대시보드에 무기한 남아 있게 됩니다. 수동으로 들어가서 삭제해야 합니다.

CloudFormation 대시보드에서 스택을 선택한 다음 삭제를 선택합니다. CloudFormation이 스택을 삭제할 때 해당 스택 내의 모든 리소스도 삭제합니다. S3 버킷이나 EC2 인스턴스와 같은 리소스 하나만 삭제할 수 있는 방법은 없습니다. 이 작업은 의도적으로 수행됩니다.

결론

이 가이드에서는 CloudFormation 스택이 어떻게 생성되고 변경되는지 살펴보았습니다. 템플릿을 변경하는 몇 가지 방법과 기존 스택을 업데이트하는 방법을 살펴보았습니다. 그런 다음 스택 업데이트와 관련된 몇 가지 가능성을 살펴보았습니다. 마지막으로 작업을 마친 후 CloudFormation 스택을 삭제하는 방법을 살펴보았습니다.

질문이나 제안 사항이 있으면 아래에 의견을 남겨주십시오. 읽어 주셔서 감사합니다!