배포된 CloudFormation 스택에서 내보낸 출력 가져오기
동일한 AWS 계정 및 리전에 여러 스택이 있으면 스택 간에 정보를 공유하는 것이 좋습니다. 이는 하나의 스택에서 생성한 리소스를 다른 스택에서 사용해야 할 때 유용합니다.
예를 들어, 서브넷 및 보안 그룹과 같은 네트워크 리소스를 생성하는 웹 서버용 스택이 하나 있을 수 있습니다. 그러면 실제 웹 서버를 생성하는 다른 스택이 첫 번째 스택에서 생성된 네트워크 리소스를 사용할 수 있습니다. 스택의 템플릿 내에서 리소스 ID를 하드 코딩하거나 리소스 ID를 입력 파라미터로 전달할 필요가 없습니다.
스택 간에 정보를 공유하려면 한 스택에서 출력값을 내보내기하고 다른 스택으로 가져오기를 합니다. 운영 방식은 다음과 같습니다.
-
첫 번째 스택의 템플릿(예: 네트워킹 스택)에서
Outputs
섹션의Export
필드를 사용하여 내보낼 특정 값을 정의합니다. 자세한 내용은 CloudFormation 템플릿에 대한 Outputs 섹션 구문 참조 단원을 참조하십시오. -
해당 스택을 생성하거나 업데이트하면 CloudFormation에서는 동일 AWS 계정 및 리전의 다른 스택에서 사용할 수 있도록 출력값을 내보냅니다.
-
다른 스택의 템플릿에서는 Fn::ImportValue 함수를 사용하여 첫 번째 스택에서 내보낸 값을 가져옵니다.
-
두 번째 스택(예: 웹 서버 스택)을 생성하거나 업데이트하면 CloudFormation에서는 첫 번째 스택에서 내보낸 값을 자동으로 검색하여 사용합니다.
연습 및 샘플 템플릿은 다른 CloudFormation 스택의 리소스 출력 참조 단원을 참조하십시오.
스택 출력값 내보내기와 중첩 스택 사용 비교
중첩 스택은 AWS::CloudFormation::Stack
리소스를 사용하여 다른 스택 내에 생성하는 스택입니다. 중첩 스택을 사용하여 단일 스택의 모든 리소스를 배포 및 관리합니다. 중첩 스택 그룹 내 스택 하나의 출력은 그룹 내 다른 스택에 대한 입력으로 사용할 수 있습니다. 이는 값을 내보내는 것과는 다릅니다.
중첩 스택 그룹 내로 정보 공유를 제한하려면 중첩 스택을 사용하는 것이 좋습니다. (중첩 스택 그룹 내에서뿐만이 아니라 해당 그룹 외부에서도) 다른 스택과 정보를 공유하려면 값을 내보냅니다. 예를 들어 서브넷을 사용해 단일 스택을 생성한 다음 이 서브넷의 ID를 내보냅니다. 다른 스택은 ID를 가져와서 해당 서브넷을 사용할 수 있습니다. 각 스택은 자체 서브넷을 생성할 필요가 없습니다. 스택이 서브넷 ID를 가져오는 한 이 ID를 변경하거나 삭제할 수 없습니다.
중첩 스택에 대한 자세한 내용은 중첩 스택을 사용하여 스택을 다른 스택 내에 포함 섹션을 참조하세요.
고려 사항
교차 스택 참조에 적용되는 제한은 다음과 같습니다.
-
각 AWS 계정의
Export
이름은 한 리전 내에서 고유해야 합니다. -
여러 리전 간에 교차 스택 참조를 생성할 수 없습니다.
Fn::ImportValue
내장 함수는 동일 리전 안에서 내보냈던 값을 가져오는 데만 사용할 수 있습니다. -
출력의 경우, 리소스에 의존하는
Name
또는Export
함수를Ref
의GetAtt
속성값으로 사용할 수 없습니다.마찬가지로
ImportValue
함수는 리소스에 의존하는Ref
또는GetAtt
함수를 포함할 수 없습니다. -
다른 스택이 출력 값을 가져오면 출력값을 내보내는 스택을 삭제하거나 내보낸 출력 값을 수정할 수 없습니다. 따라서 내보내는 스택을 삭제하거나 출력값을 수정하려면 가져오기를 모두 제거해야 합니다.
내보낸 출력값 나열
스택에서 내보낸 출력 값을 확인해야 하는 경우 다음 방법 중 하나를 사용하세요.
내보낸 출력값을 나열하려면(콘솔)
-
AWS CloudFormation 콘솔(https://console.aws.amazon.com/cloudformation
)을 엽니다. -
화면 상단의 탐색 모음에서 AWS 리전을 선택합니다.
-
왼쪽 탐색 창에서 내보내기를 선택합니다.
내보낸 출력값을 나열하려면(AWS CLI)
다음 list-exports 명령을 사용합니다. us-east-1
을 해당 AWS 리전으로 대체합니다.
aws cloudformation list-exports --region
us-east-1
출력의 예시는 다음과 같습니다.
{
"Exports": [
{
"ExportingStackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/private-vpc/99764070-b56c-xmpl-bee8-062a88d1d800",
"Name": "private-vpc-subnet-a",
"Value": "subnet-07b410xmplddcfa03"
},
{
"ExportingStackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/private-vpc/99764070-b56c-xmpl-bee8-062a88d1d800",
"Name": "private-vpc-subnet-b",
"Value": "subnet-075ed3xmplebd2fb1"
},
{
"ExportingStackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/private-vpc/99764070-b56c-xmpl-bee8-062a88d1d800",
"Name": "private-vpc-vpcid",
"Value": "vpc-011d7xmpl100e9841"
}
]
}
CloudFormation에서는 출력을 내보낸 현재 리전 및 스택에 대해 내보낸 출력의 이름 및 값을 표시합니다. 다른 스택의 템플릿에서 내보낸 출력 값을 사용하려면 내보내기 이름 및 Fn::ImportValue 함수를 사용하여 참조할 수 있습니다.
출력값을 가져오고 내보내는 스택 나열
내보낸 출력 값을 삭제하거나 변경하려면 먼저 어떤 스택이 해당 출력 값을 가져오는지 확인해야 합니다.
내보낸 출력 값을 가져오는 스택을 보려면 다음 방법 중 하나를 사용하세요.
내보낸 출력값을 가져오는 스택을 나열하려면(콘솔)
-
AWS CloudFormation 콘솔(https://console.aws.amazon.com/cloudformation
)을 엽니다. -
왼쪽 탐색 창에서 내보내기를 선택합니다.
-
지정된 내보내기 값을 가져오는 스택을 보려면 해당 내보내기 값에 대해 Export Name(내보내기 이름)을 선택합니다. CloudFormation은 값을 가져오는 모든 스택을 나열하는 내보내기 세부 정보 페이지를 표시합니다.
내보낸 출력값을 가져오는 스택을 나열하려면(AWS CLI)
list-imports 명령을 사용합니다. us-east-1
을 AWS 리전으로 바꾸고
를 내보낸 출력 값의 이름으로 바꿉니다.private-vpc-vpcid
aws cloudformation list-imports --region
us-east-1
\ --export-nameprivate-vpc-vpcid
CloudFormation에서는 값을 가져오는 스택 목록을 반환합니다.
{
"Imports": [
"my-app-stack"
]
}
어떤 스택에서 내보낸 특정 값을 가져오는지 확인한 후에는 해당 출력 값을 참조하는 Fn::ImportValue 함수를 제거하도록 스택을 수정합니다. 내보낸 출력값을 삭제 또는 수정하려면 내보낸 출력 값을 참조하는 가져오기를 모두 제거해야 합니다.