연습: 다른 AWS CloudFormation 스택의 리소스 출력 참조 - AWS CloudFormation

연습: 다른 AWS CloudFormation 스택의 리소스 출력 참조

다른 AWS CloudFormation 스택으로 리소스를 내보내려면 교차 스택 참조를 생성합니다. 교차 스택 참조를 사용하면 계층형 아키텍처 또는 서비스 지향 아키텍처를 사용할 수 있습니다. 단일 스택의 모든 리소스를 포함하는 대신 별도의 스택에서 관련 AWS 리소스를 생성한 다음 다른 스택에서 필요한 리소스 출력을 참조할 수 있습니다. 교차 스택 참조를 출력으로 제한하여 다른 스택에서 참조되는 스택 부분을 제어합니다.

예를 들어, VPC, 보안 그룹 및 퍼블릭 웹 애플리케이션의 서브넷을 포함하는 네트워크 스택과 별도의 퍼블릭 웹 애플리케이션 스택이 있습니다. 웹 애플리케이션에서 네트워크 스택의 보안 그룹과 서브넷을 사용하도록 하려면 웹 애플리케이션 스택에서 네트워크 스택의 리소스 출력을 참조하도록 허용하는 교차 스택 참조를 생성합니다. 교차 스택 참조를 사용하면 웹 애플리케이션 스택 소유자가 네트워킹 규칙 또는 자산을 생성하거나 유지할 필요가 없습니다.

교차 스택 참조를 생성하려면 Export 출력 필드를 사용하여 내보낼 리소스 출력 값에 플래그를 표시합니다. 그런 다음 Fn::ImportValue 내장 함수를 사용하여 값을 가져옵니다. 자세한 내용은 결과Fn::ImportValue 단원을 참조하세요.

필수 조건

이 연습을 시작하기 전에 Amazon VPC, Amazon EC2 및 AWS CloudFormation 서비스를 모두 사용할 수 있는 AWS Identity and Access Management(IAM) 권한이 있는지 확인합니다.

참고

AWS CloudFormation은 무료 서비스입니다. 하지만 스택에 포함시키는 AWS 리소스에 대해서는 리소스별 현재 시세로 요금이 청구됩니다. AWS 요금에 대한 자세한 내용은 각 제품의 세부 정보 페이지를 참조하십시오.

교차 스택 참조에 적용되는 제한은 다음과 같습니다.

  • 각 AWS 계정의 Export 이름은 한 리전 내에서 고유해야 합니다.

  • 여러 리전 간에 교차 스택 참조를 생성할 수 없습니다. Fn::ImportValue 내장 함수는 동일 리전 안에서 내보냈던 값을 가져오는 데만 사용할 수 있습니다.

  • 출력의 경우, 리소스에 의존하는 Name 또는 Export 함수를 RefGetAtt 속성 값으로 사용할 수 없습니다.

    마찬가지로 ImportValue 함수는 리소스에 의존하는 Ref 또는 GetAtt 함수를 포함할 수 없습니다.

  • 다른 스택에서 출력을 참조 중인 스택은 삭제할 수 없습니다.

  • 다른 스택에서 참조하는 출력 값은 수정하거나 제거할 수 없습니다.

1단계: 샘플 템플릿을 사용하여 네트워크 스택 생성

네트워크 스택에는 웹 애플리케이션 스택에서 사용할 VPC, 보안 그룹 및 서브넷이 포함되어 있습니다. 이러한 리소스 외에 네트워크 스택에서는 퍼블릭 액세스를 활성화하기 위해 인터넷 게이트웨이 및 라우팅 테이블을 생성합니다.

참고

웹 애플리케이션 스택을 생성하기 전에 이 스택을 생성해야 합니다. 웹 애플리케이션 스택을 먼저 생성한 경우에는 보안 그룹 또는 서브넷이 없습니다.

네트워크 스택을 생성하려면
  1. AWS CloudFormation 콘솔을 열고 스택 생성을 선택합니다.

  2. Template is ready(템플릿 준비 완료)를 선택하고 Specify template(템플릿 지정) 섹션에서 Amazon S3 URL을 선택하십시오. 다음 URL을 복사하여 텍스트 상자에 붙여 넣습니다. https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleNetworkCrossStack.template

    링크는 네트워크 스택 템플릿의 위치를 제공합니다. 스택에서 생성되는 리소스를 보려면 링크를 선택하여 템플릿을 엽니다. 출력 섹션에서 샘플 템플릿에서 내보내는 네트워킹 리소스를 확인할 수 있습니다. 다른 스택의 네트워킹 리소스를 내보낼 경우 내보낸 리소스의 이름에 스택 이름이 접두사로 붙습니다. 사용자가 네트워킹 리소스를 가져올 때 리소스를 가져올 스택을 지정할 수 있습니다.

  3. 템플릿을 검토한 후 다음을 선택합니다.

  4. 스택 이름SampleNetworkCrossStack을 입력하고 다음을 선택합니다.

    참고

    이 스택의 이름을 기록해 둡니다. 웹 애플리케이션 스택을 시작할 때 스택 이름이 필요합니다.

  5. 다음을 선택합니다. 이 연습에서는 태그를 추가하거나 고급 설정을 지정할 필요가 없습니다.

  6. 스택 이름과 템플릿 URL이 올바른지 확인한 다음 스택 생성을 선택합니다.

    AWS CloudFormation에서 스택을 생성하는 데 몇 분 정도 걸릴 수 있습니다. 모든 리소스가 생성될 때까지 기다렸다가 웹 애플리케이션 스택 생성을 계속합니다.

  7. 진행 상황을 모니터링하려면 스택 이벤트를 확인합니다. 자세한 내용은 AWS Management Console에서 AWS CloudFormation 스택 데이터 및 리소스 보기 단원을 참조하십시오.

2단계: 샘플 템플릿을 사용하여 웹 애플리케이션 스택 생성

웹 애플리케이션 스택에서는 네트워크 스택에서 보안 그룹 및 서브넷을 사용하는 EC2 인스턴스를 생성합니다.

참고

네트워크 스택과 동일한 리전에서 이 스택을 생성해야 합니다.

웹 애플리케이션 스택을 생성하려면
  1. AWS CloudFormation 콘솔을 열고 스택 생성을 선택합니다.

  2. Template is ready(템플릿 준비 완료)를 선택하고 Specify template(템플릿 지정) 섹션에서 Amazon S3 URL을 선택하십시오. 다음 URL을 복사하여 텍스트 상자에 붙여 넣습니다. https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleWebAppCrossStack.template

    링크는 웹 애플리케이션 템플릿의 위치를 제공합니다. 스택에서 생성되는 리소스를 보려면 링크를 선택하여 템플릿을 엽니다. 리소스 섹션에서 EC2 인스턴스의 속성을 봅니다. Fn::ImportValue 함수를 사용하여 다른 스택에서 네트워킹 리소스를 가져오는 방법을 확인할 수 있습니다.

  3. 템플릿을 검토한 후 다음을 선택합니다.

  4. 스택 이름에는 SampleWebAppCrossStack을 입력합니다. 파라미터 섹션에서 NetworkStackName 파라미터에 대한 기본값을 사용한 다음 다음을 선택합니다.

    샘플 템플릿에서는 파라미터 값을 사용하여 값을 가져올 스택을 지정합니다.

  5. 다음을 선택합니다. 이 연습에서는 태그를 추가하거나 고급 설정을 지정할 필요가 없습니다.

  6. 스택 이름과 템플릿 URL이 올바른지 확인한 다음 스택 생성을 선택합니다.

    AWS CloudFormation에서 스택을 생성하는 데 몇 분 정도 걸릴 수 있습니다.

  7. 스택이 생성된 이후에 리소스를 보고 인스턴스 ID를 기록해 둡니다. 스택 리소스 보기에 대한 자세한 내용은 AWS Management Console에서 AWS CloudFormation 스택 데이터 및 리소스 보기 단원을 참조하십시오.

    인스턴스의 보안 그룹과 서브넷을 확인하려면 Amazon EC2 콘솔에서 인스턴스의 속성을 봅니다. 인스턴스에서 SampleNetworkCrossStack 스택의 보안 그룹 및 서브넷을 사용하는 경우 교차 스택 참조를 성공적으로 생성한 것입니다.

    콘솔을 사용하여 스택 출력과 예제 웹 사이트 URL을 보고 웹 애플리케이션이 실행 중인지 확인합니다. 자세한 내용은 AWS Management Console에서 AWS CloudFormation 스택 데이터 및 리소스 보기 단원을 참조하십시오.

3단계: 리소스 정리

원치 않는 서비스에 대해 요금이 청구되지 않도록 하려면 스택을 삭제합니다.

스택을 삭제하려면
  1. AWS CloudFormation 콘솔에서 SampleWebAppCrossStack 스택을 선택합니다.

  2. 작업을 선택한 다음 스택 삭제를 선택합니다.

  3. 확인 메시지에서 삭제를 선택합니다.

  4. 스택이 삭제된 후 SampleNetworkCrossStack 스택에 대해 동일한 단계를 반복합니다.

    참고

    AWS CloudFormation에서 SampleWebAppCrossStack 스택을 완전히 삭제할 때까지 기다립니다. EC2 인스턴스가 VPC에서 계속 실행 중인 경우 AWS CloudFormation은 SampleNetworkCrossStack 스택에서 VPC를 삭제하지 않습니다.

    이전에 생성한 모든 리소스가 삭제됩니다.

이 연습의 샘플 템플릿을 사용하여 자체 교차 참조 스택을 구축합니다.