

새로운 *CloudFormation 템플릿 참조 안내서*입니다. 북마크와 링크를 업데이트하세요. CloudFormation을 시작하는 데 도움이 필요한 경우 [AWS CloudFormation 사용 설명서](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)를 참조하세요.

# `Fn::GetStackOutput`
<a name="intrinsic-function-reference-getstackoutput"></a>

내장 함수 `Fn::GetStackOutput`은 다른 스택의 출력 값을 반환합니다. 이 함수는 `Fn::ImportValue`와 달리 출력 값을 명시적으로 내보내는 데 참조된 스택이 필요하지 않습니다. 또한 이 함수는 교차 계정 및 교차 리전 참조를 지원합니다.

이 함수는 AWS 계정 또는 리전 간에 스택 출력을 참조해야 하는 경우, 또는 명시적 내보내기를 관리하지 않고 출력을 참조하고자 하는 경우 사용하세요.

**참고**  
`Fn::GetStackOutput`은 약한 참조를 생성합니다. 참조된 값은 스택 생성 또는 업데이트 시 확인됩니다. 참조된 스택 또는 출력이 나중에 삭제되거나 수정되는 경우, 소비 스택이 자동으로 업데이트되거나 알림을 받지 않습니다. 일관성을 보장하기 위해 참조된 스택 및 출력이 의도치 않게 변경되지 않도록 보호하세요.

**참고**  
`Fn::GetStackOutput`은 교차 파티션 참조를 지원하지 않습니다.

## 선언
<a name="w2aac24c43c11"></a>

### JSON
<a name="intrinsic-function-reference-getstackoutput-syntax.json"></a>

```
{
  "Fn::GetStackOutput": {
    "StackName": "{{stack-name}}",
    "OutputName": "{{output-name}}",
    "Region": "{{region}}",
    "RoleArn": "{{role-arn}}"
  }
}
```

### YAML
<a name="intrinsic-function-reference-getstackoutput-syntax.yaml"></a>

전체 함수 이름을 사용할 수 있습니다.

```
Fn::GetStackOutput:
  StackName: {{stack-name}}
  OutputName: {{output-name}}
  Region: {{region}}
  RoleArn: {{role-arn}}
```

또는 짧은 형식을 사용할 수 있습니다.

```
!GetStackOutput
  StackName: {{stack-name}}
  OutputName: {{output-name}}
  Region: {{region}}
  RoleArn: {{role-arn}}
```

**중요**  
`!Sub` 또는 `!Ref`와 같은 다른 짧은 형식 함수를 파라미터 값으로 포함하는 경우, `!GetStackOutput`의 짧은 형식을 사용할 수 없습니다. 그런 경우, 전체 함수 이름을 사용합니다.  

```
# Do not use
!GetStackOutput
  StackName: !Ref MyStackNameParam
  OutputName: VpcId

# Use this instead
Fn::GetStackOutput:
  StackName: !Ref MyStackNameParam
  OutputName: VpcId
```

## 파라미터
<a name="w2aac24c43c13"></a>

StackName  
참조하려는 출력을 포함하는 스택의 이름입니다.  
*필수 항목 여부:* 예

OutputName  
참조할 출력의 논리적 ID입니다. 이것이 참조된 스택의 템플릿 출력 섹션에서 정의된 키입니다.  
*필수 항목 여부:* 예

리전  
참조된 스택이 배포된 AWS 리전입니다. 기본적으로 생성되거나 업데이트되는 스택의 리전으로 설정됩니다.  
*필수 항목 여부*: 아니요

RoleArn  
참조된 스택에 대한 `cloudformation:DescribeStacks` 권한이 있는 IAM 역할의 ARN입니다. 생성되거나 업데이트되는 스택의 실행 역할이 이 역할을 맡아야 합니다. 기본적으로 현재 스택의 실행 역할로 설정됩니다. 이 파라미터는 다른 AWS 계정에 있는 스택을 참조할 때 사용하세요.  
*필수 항목 여부*: 아니요

## 반환 값
<a name="w2aac24c43c15"></a>

참조된 스택의 지정된 출력 값입니다.

## 예제
<a name="w2aac24c43c17"></a>

### 동일 계정, 동일 리전
<a name="intrinsic-function-reference-getstackoutput-example-same-account-region"></a>

다음 예제는 동일한 계정 및 리전에서 이름이 `ProducerStack`인 스택의 `VpcId` 출력을 참조합니다. `Region` 또는 `RoleArn`이 지정되지 않았기 때문에 CloudFormation은 현재 스택의 리전 및 실행 역할을 사용합니다.

#### JSON
<a name="intrinsic-function-reference-getstackoutput-example-same.json"></a>

```
{
  "Fn::GetStackOutput": {
    "StackName": "ProducerStack",
    "OutputName": "VpcId"
  }
}
```

#### YAML
<a name="intrinsic-function-reference-getstackoutput-example-same.yaml"></a>

```
Fn::GetStackOutput:
  StackName: ProducerStack
  OutputName: VpcId
```

### 동일한 계정, 다른 리전
<a name="intrinsic-function-reference-getstackoutput-example-cross-region"></a>

다음 예제는 `us-west-2`에 배포된 `ProducerStack`의 `VpcId` 출력을 참조하며, 소비 스택은 다른 리전에 있습니다. `Region` 파라미터가 CloudFormation에 `us-west-2`에서 참조된 값을 조회하도록 지시합니다.

#### JSON
<a name="intrinsic-function-reference-getstackoutput-example-cross-region.json"></a>

```
{
  "Fn::GetStackOutput": {
    "StackName": "ProducerStack",
    "OutputName": "VpcId",
    "Region": "us-west-2"
  }
}
```

#### YAML
<a name="intrinsic-function-reference-getstackoutput-example-cross-region.yaml"></a>

```
Fn::GetStackOutput:
  StackName: ProducerStack
  OutputName: VpcId
  Region: us-west-2
```

### 교차 계정
<a name="intrinsic-function-reference-getstackoutput-example-cross-account"></a>

다음 예제는 계정 `111111111111`에 있는 `ProducerStack`의 `VpcId` 출력을 참조합니다. 소비 스택은 계정 `222222222222`에 있습니다. `RoleArn`은 계정 `111111111111`에 있고 `cloudformation:DescribeStacks` 권한이 있는 역할을 지정하며, 이 역할을 소비 스택의 실행 역할이 맡을 수 있어야만 합니다.

#### JSON
<a name="intrinsic-function-reference-getstackoutput-example-cross-account.json"></a>

```
{
  "Fn::GetStackOutput": {
    "StackName": "ProducerStack",
    "OutputName": "VpcId",
    "RoleArn": "arn:aws:iam::111111111111:role/GetStackOutputRole"
  }
}
```

#### YAML
<a name="intrinsic-function-reference-getstackoutput-example-cross-account.yaml"></a>

```
Fn::GetStackOutput:
  StackName: ProducerStack
  OutputName: VpcId
  RoleArn: arn:aws:iam::111111111111:role/GetStackOutputRole
```

### 교차 계정 및 교차 리전
<a name="intrinsic-function-reference-getstackoutput-example-cross-account-region"></a>

다음 예제는 다른 계정과 다른 리전에 있는 스택의 출력을 참조합니다. `RoleArn` 및 `Region` 파라미터가 둘 다 지정되어 있습니다.

#### JSON
<a name="intrinsic-function-reference-getstackoutput-example-cross-account-region.json"></a>

```
{
  "Fn::GetStackOutput": {
    "StackName": "ProducerStack",
    "OutputName": "VpcId",
    "RoleArn": "arn:aws:iam::111111111111:role/GetStackOutputRole",
    "Region": "us-west-2"
  }
}
```

#### YAML
<a name="intrinsic-function-reference-getstackoutput-example-cross-account-region.yaml"></a>

```
Fn::GetStackOutput:
  StackName: ProducerStack
  OutputName: VpcId
  RoleArn: arn:aws:iam::111111111111:role/GetStackOutputRole
  Region: us-west-2
```

## IAM 역할 구성
<a name="intrinsic-function-reference-getstackoutput-iam"></a>

교차 계정 참조에 `RoleArn` 파라미터를 사용할 때는 IAM 역할에 참조된 스택을 포함하는 계정에 속한 스택을 설명할 권한이 있어야 합니다.

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "cloudformation:DescribeStacks"
      ],
      "Resource": "*"
    }
  ]
}
```

**작은 정보**  
좀 더 제한적인 정책의 경우, `Resource`의 범위를 참조하려는 스택 ARN으로 지정하세요.

역할에 소비 스택의 실행 역할에 대한 `AssumeRole` 권한을 부여하는 신뢰 정책이 있어야 합니다.

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::222222222222:role/CloudFormationExecutionRole"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

## 지원되는 함수
<a name="w2aac24c43c21"></a>

다음 함수를 파라미터 값 `Fn::GetStackOutput` 이내에서 사용할 수 있습니다(예를 들어 `StackName` 또는 `RoleArn` 구성을 위해). 이러한 함수의 값은 리소스에 의존할 수 없습니다.
+ `Fn::Base64`
+ `Fn::FindInMap`
+ `Fn::If`
+ `Fn::Join`
+ `Fn::Select`
+ `Fn::Sub`
+ `Ref`

`Fn::GetStackOutput` 자체는 다음 템플릿 위치에서 사용할 수 있습니다.
+ 직접 리소스 속성 값
+ `Fn::Join` 내부
+ `Fn::If` 내부
+ `Fn::Select` 내부

아래의 [알려진 제한 사항](#intrinsic-function-reference-getstackoutput-limitations)에서 아직 지원되지 않는 위치를 참조하세요.

예를 들어 `Ref`를 사용하여 파라미터 값을 스택 이름으로 전달할 수 있습니다.

```
Parameters:
  SourceStackName:
    Type: String

Resources:
  MyResource:
    Type: AWS::EC2::Instance
    Properties:
      SubnetId:
        Fn::GetStackOutput:
          StackName: !Ref SourceStackName
          OutputName: SubnetId
```

## 알려진 제한 사항
<a name="intrinsic-function-reference-getstackoutput-limitations"></a>

이 릴리스에서는 다음 사용량 패턴이 지원되지 않습니다. 모두 `InternalFailure` 오류를 반환합니다. 이러한 패턴에 대한 지원은 향후 업데이트에 추가될 예정입니다.
+ `Fn::Sub` 변수 맵 값 안의 `Fn::GetStackOutput`
+ `Fn::Base64` 내부의 `Fn::GetStackOutput`
+ 직접 `Outputs` 섹션 값으로서의 `Fn::GetStackOutput`
+ `Conditions` 섹션에 있는 `Fn::Equals` 내부의 `Fn::GetStackOutput`
+ `Fn::ImportValue` 내부의 `Fn::GetStackOutput`

`Fn::GetStackOutput`을 직접 리소스 속성 값으로 사용하거나 `Fn::Join`, `Fn::If` 또는 `Fn::Select` 내부로 래핑합니다.

## 오류 처리
<a name="intrinsic-function-reference-getstackoutput-errors"></a>

CloudFormation은 스택 생성 또는 업데이트 작업 중에 `Fn::GetStackOutput` 참조를 검증합니다. 발생 가능한 일반적인 오류는 다음과 같습니다.
+ *IAM 역할 맡을 수 없음* – 스택 작업이 실패하고 액세스 거부 오류가 발생합니다. 소비 스택의 실행 역할이 해당 역할을 맡을 수 있는지 확인하세요.
+ *IAM 역할에 DescribeStacks 권한 없음* – 스택 작업이 실패하고 액세스 거부 오류가 발생합니다. 역할의 권한 정칙이 `cloudformation:DescribeStacks`를 포함하는지 확인하세요.
+ *참조된 스택 존재하지 않음* – 스택 작업이 실패하고 스택을 찾을 수 없다고 표시되는 검증 오류가 발생합니다. `Region` 파라미터를 포함한 경우, 이것이 참조하려는 스택의 정확한 리전인지 확인하세요.
+ *출력 키가 참조된 스택에 존재하지 않음* – 스택 작업이 실패하고 출력을 찾을 수 없다고 표시되는 검증 오류가 발생합니다.
+ *참조된 스택이 대상 계정에 대하여 활성화되지 않은 리전에 있음* – 스택 작업이 실패합니다. 참조된 스택을 소유하는 계정에서 대상 리전이 활성화되어 있어야 합니다.
+ *참조된 리전이 잘못됨* – 스택 작업이 실패하고 검증 오류가 발생합니다.

### us-east-1과 옵트인 리전 간 참조
<a name="intrinsic-function-reference-getstackoutput-errors-optin"></a>

`us-east-1` 리전과 옵트인 리전 간에 참조를 구현할 때 오류가 발생할 수 있습니다. 이러한 오류를 방지하려면 [이 가이드에 따라 글로벌 STS 엔드포인트의 토큰 호환성을 업데이트하세요](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html).

## Fn::GetStackOutput을 AWS Cloud Development Kit (AWS CDK)과 함께 사용
<a name="intrinsic-function-reference-getstackoutput-cdk"></a>

AWS Cloud Development Kit (AWS CDK)(CDK)는 `Fn.getStackOutput()` 메서드를 통해 `Fn::GetStackOutput`을 지원합니다. CDK 스택 간에 교차 리전 또는 교차 계정 참조가 있는 경우, 이제 CDK가 SSM 파라미터를 사용하여 사용자 지정 리소스를 생성하지 않고 그 대신 `Fn::GetStackOutput`을 기본적으로 사용할 수 있습니다. 이렇게 하면 합성된 템플릿이 간소화되고 이전의 `crossRegionReferences` 해결 방법이 필요하지 않게 됩니다.

자세한 내용은 [ CDK API 참조](https://docs.aws.amazon.com/cdk/api/v2/)를 참조하세요.

## Fn::ImportValue와의 비교
<a name="intrinsic-function-reference-getstackoutput-comparison"></a>


| 기능 | `Fn::ImportValue` | `Fn::GetStackOutput` | 
| --- | --- | --- | 
| 동일 계정, 동일 리전 | 지원됨 | 지원됨 | 
| 교차 계정 | 지원되지 않음 | 지원됨 | 
| 교차 리전 | 지원되지 않음 | 지원됨 | 
| 명시적 내보내기 필요 | 예 | 아니요 | 
| 참조 유형 | 강함(내보내는 스택의 삭제 차단) | 약함(배포 시 확인됨) | 
| 참조 무결성 | 예 | 아니요 | 

동일한 계정 및 리전 안에서 강력한 참조 무결성이 필요한 경우 `Fn::ImportValue`를 사용합니다. `Fn::GetStackOutput`은 교차 계정 또는 교차 리전 참조가 필요할 때, 또는 명시적 내보내기 관리를 피하려고 할 때 사용합니다.

## 모범 사례
<a name="intrinsic-function-reference-getstackoutput-best-practices"></a>
+ *참조된 스택 및 출력을 보호하세요.* `Fn::GetStackOutput`은 약한 참조를 생성하기 때문에 참조된 스택을 삭제해도 소비 스택이 생성 또는 업데이트되지 않도록 방지되지 않습니다. 단, 해당 참조를 다시 확인하는 이후의 작업은 실패하게 됩니다. 참조된 스택이 우발적으로 삭제되지 않도록 스택 정책, 삭제 보호 또는 IAM 정책을 사용하세요.
+ *IAM 역할의 범위를 좁게 지정하세요.* 교차 계정 액세스를 위해 `RoleArn`을 구성할 때, 되도록 특정 스택 ARN에 대한 `DescribeStacks` 권한을 제한합니다.
+ *확인 타이밍에 유의하세요.* 참조된 값은 스택 생성 또는 업데이트 시 확인됩니다. 소스 값이 변경되어도 소비 스택이 자동으로 업데이트되지 않습니다. 변경 사항을 적용하려면 소비 스택에서 업데이트를 수행합니다.