

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

# `Fn::ImportValue`
<a name="intrinsic-function-reference-importvalue"></a>

내장 함수 `Fn::ImportValue`는 다른 스택에서 내보낸 출력의 값을 반환합니다. 일반적으로 이 함수를 사용하여 교차 스택 참조를 생성합니다. 자세한 내용은 *AWS CloudFormation 사용 설명서*의 [다른 CloudFormation 스택의 리소스 출력 참조](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/walkthrough-crossstackref.html) 섹션을 참조하세요.

다음 예제 템플릿 조각에서 스택 A는 VPC 보안 그룹 값을 내보내고 스택 B는 이 값을 가져옵니다.

**참고**  
교차 스택 참조에 적용되는 제한은 다음과 같습니다.  
각 AWS 계정의 `Export` 이름은 한 리전 내에서 고유해야 합니다.
여러 리전 간에 교차 스택 참조를 생성할 수 없습니다. `Fn::ImportValue` 내장 함수는 동일 리전 안에서 내보냈던 값을 가져오는 데만 사용할 수 있습니다.
출력의 경우, 리소스에 의존하는 `Name` 또는 `Export` 함수를 `Ref`의 `GetAtt` 속성값으로 사용할 수 없습니다.  
마찬가지로 `ImportValue` 함수는 리소스에 의존하는 `Ref` 또는 `GetAtt` 함수를 포함할 수 없습니다.
다른 스택이 출력 값을 가져오면 출력값을 내보내는 스택을 삭제하거나 내보낸 출력 값을 수정할 수 없습니다. 따라서 내보내는 스택을 삭제하거나 출력값을 수정하려면 가져오기를 모두 제거해야 합니다.

## JSON
<a name="intrinsic-function-reference-importvalue-export.json"></a>

스택 A 내보내기

```
"Outputs" : {
  "PublicSubnet" : {
    "Description" : "The subnet ID to use for public web servers",
    "Value" :  { "Ref" : "PublicSubnet" },
    "Export" : { "Name" : {"Fn::Sub": "${AWS::StackName}-SubnetID" }}
  },
  "WebServerSecurityGroup" : {
    "Description" : "The security group ID to use for public web servers",
    "Value" :  { "Fn::GetAtt" : ["WebServerSecurityGroup", "GroupId"] },
    "Export" : { "Name" : {"Fn::Sub": "${AWS::StackName}-SecurityGroupID" }}
  }
}
```

## YAML
<a name="intrinsic-function-reference-importvalue-export.yaml"></a>

스택 A 내보내기

```
Outputs:
  PublicSubnet:
    Description: The subnet ID to use for public web servers
    Value:
      Ref: PublicSubnet
    Export:
      Name:
        'Fn::Sub': '${AWS::StackName}-SubnetID'
  WebServerSecurityGroup:
    Description: The security group ID to use for public web servers
    Value:
      'Fn::GetAtt':
        - WebServerSecurityGroup
        - GroupId
    Export:
      Name:
        'Fn::Sub': '${AWS::StackName}-SecurityGroupID'
```

## JSON
<a name="intrinsic-function-reference-importvalue-import.json"></a>

스택 B 가져오기

```
"Resources" : {
  "WebServerInstance" : {
    "Type" : "AWS::EC2::Instance",
    "Properties" : {
      "InstanceType" : "t2.micro",
      "ImageId" : "ami-a1b23456",
      "NetworkInterfaces" : [{
        "GroupSet" : [{"Fn::ImportValue" : {"Fn::Sub" : "${NetworkStackNameParameter}-SecurityGroupID"}}],
        "AssociatePublicIpAddress" : "true",
        "DeviceIndex" : "0",
        "DeleteOnTermination" : "true",
        "SubnetId" : {"Fn::ImportValue" : {"Fn::Sub" : "${NetworkStackNameParameter}-SubnetID"}}
      }]
    }
  }
}
```

## YAML
<a name="intrinsic-function-reference-importvalue-import.yaml"></a>

스택 B 가져오기

```
Resources:
  WebServerInstance:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t2.micro
      ImageId: ami-a1b23456
      NetworkInterfaces:
        - GroupSet:
            - Fn::ImportValue: 
              'Fn::Sub': '${NetworkStackNameParameter}-SecurityGroupID'
          AssociatePublicIpAddress: 'true'
          DeviceIndex: '0'
          DeleteOnTermination: 'true'
          SubnetId: Fn::ImportValue: 
            'Fn::Sub': '${NetworkStackNameParameter}-SubnetID'
```

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

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

```
{ "Fn::ImportValue" : sharedValueToImport }
```

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

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

```
Fn::ImportValue: sharedValueToImport
```

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

```
!ImportValue sharedValueToImport
```

**중요**  
`!Sub`의 짧은 형식이 포함되면 `!ImportValue`의 짧은 형식을 사용할 수 없습니다.  

```
# do not use
!ImportValue
  !Sub '${NetworkStack}-SubnetID'
```
대신, 다음과 같은 전체 함수 이름을 사용해야 합니다.  

```
Fn::ImportValue:
  !Sub "${NetworkStack}-SubnetID"
```

## Parameters
<a name="w2aac24c43c13"></a>

sharedValueToImport  
가져올 스택 출력 값입니다.

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

스택 출력 값입니다.

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

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

```
{ "Fn::ImportValue" : {"Fn::Sub": "${NetworkStackNameParameter}-SubnetID" } }
```

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

```
Fn::ImportValue:
  !Sub "${NetworkStackName}-SecurityGroupID"
```

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

`Fn::ImportValue` 함수에서 다음과 같은 함수를 사용할 수 있습니다. 이러한 함수의 값은 리소스에 의존할 수 없습니다.
+ `Fn::Base64`
+ `Fn::FindInMap`
+ `Fn::If`
+ `Fn::Join`
+ `Fn::Select`
+ `Fn::Sub`
+ `Ref`