

# AMI 허용 인스턴스 유형
<a name="ami-allowed-instance-types"></a>

AMI 소유자는 AMI가 지원하거나 지원하지 않는 인스턴스 유형을 지정할 수 있습니다. 이렇게 하면 호환되지 않는 인스턴스 유형이 시작되지 않습니다. Amazon EC2는 시작 시 허용되는 인스턴스 유형을 적용합니다.

예를 들어 AMI에 GPU 하드웨어가 필요한 경우 GPU 인스턴스 유형으로만 제한할 수 있습니다. AMI가 특정 인스턴스 패밀리와 호환되지 않는 경우 허용되는 인스턴스 유형에서 해당 패밀리를 제외할 수 있습니다.

**Topics**
+ [허용되는 인스턴스 유형 작동 방식](#ami-allowed-instance-types-how-it-works)
+ [AMI에 허용되는 인스턴스 유형 설정](#ami-allowed-instance-types-set)
+ [AMI에 허용되는 인스턴스 유형 보기](#ami-allowed-instance-types-view)
+ [허용되는 인스턴스 유형을 사용한 시작 동작](#ami-allowed-instance-types-launch-behavior)
+ [고려 사항](#ami-allowed-instance-types-considerations)

## 허용되는 인스턴스 유형 작동 방식
<a name="ami-allowed-instance-types-how-it-works"></a>

AMI의 `InstanceTypeSpecification` 속성을 통해 허용되는 인스턴스 유형을 제어합니다. 이 속성에는 두 개의 목록이 포함되어 있습니다.
+ `SupportedInstanceTypes` – AMI가 지원하는 인스턴스 유형입니다. 이러한 인스턴스 유형만 AMI를 사용하여 시작할 수 있습니다.
+ `UnsupportedInstanceTypes` – AMI가 지원하지 않는 인스턴스 유형입니다. 다른 모든 인스턴스 유형은 AMI를 사용하여 시작할 수 있습니다.

Amazon EC2는 다음 로직을 사용하여 사양을 평가합니다.
+ `InstanceTypeSpecification`이 설정되지 않은 경우 Amazon EC2는 모든 인스턴스 유형을 허용합니다. 이는 기본 설정 동작입니다.
+ `SupportedInstanceTypes`만 설정된 경우 지정된 인스턴스 유형만 허용됩니다. Amazon EC2는 다른 모든 인스턴스 유형을 차단합니다.
+ `UnsupportedInstanceTypes`만 설정된 경우 Amazon EC2는 지정된 인스턴스 유형을 제외한 모든 인스턴스 유형을 허용합니다.
+ 두 목록이 모두 설정된 경우 인스턴스 유형은 `SupportedInstanceTypes`에 포함되어야 하고 `UnsupportedInstanceTypes`에 포함되지 않아야 합니다.

### 와일드카드 지원
<a name="ami-allowed-instance-types-wildcards"></a>

두 목록 모두 `*` 문자를 사용하는 와일드카드 패턴을 지원합니다. 와일드카드를 사용하면 각 인스턴스 유형을 개별적으로 나열하지 않고도 여러 인스턴스 유형을 일치시킬 수 있습니다.

다음 표에는 와일드카드 패턴의 예가 나와 있습니다.


| 패턴 | 일치 항목 | 
| --- | --- | 
| t3.\* | t3 인스턴스 패밀리 내의 모든 크기(예: t3.micro, t3.small, t3.large) | 
| p4d.\* | p4d 인스턴스 패밀리 내의 모든 크기 | 
| g5.\* | g5 인스턴스 패밀리 내의 모든 크기 | 
| \*xlarge | 모든 인스턴스 패밀리에서 xlarge 이상인 모든 인스턴스 유형 | 
| \*.12xlarge | 모든 인스턴스 패밀리에서 모든 12xlarge 인스턴스 유형 | 

## AMI에 허용되는 인스턴스 유형 설정
<a name="ami-allowed-instance-types-set"></a>

Amazon EC2 콘솔 또는 AWS Command Line Interface(AWS CLI)를 사용하여 AMI에 허용되는 인스턴스 유형을 설정하거나 변경할 수 있습니다. 이 절차를 수행하려면 AMI 소유자여야 합니다.

------
#### [ Console ]

**AMI에 허용되는 인스턴스 유형을 설정하려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **AMI**를 선택합니다.

1. AMI를 선택한 다음 **작업**, **인스턴스 유형 사양 관리**를 차례로 선택합니다.

1. **지원되는 인스턴스 유형** 또는 **지원되지 않는 인스턴스 유형**에서 **추가**를 선택합니다.

1. 인스턴스 유형을 선택합니다.

1. **저장‭**‬을 선택합니다.

------
#### [ AWS CLI ]

**AMI에 대해 지원되는 인스턴스 유형을 설정하려면**  
[replace-image-instance-type-specification](https://docs.aws.amazon.com/cli/latest/reference/ec2/replace-image-instance-type-specification.html) 명령을 사용합니다. 다음 예제에서는 `t3.micro`를 제외한 모든 `t3` 및 `a2` 인스턴스 유형을 허용합니다.

```
aws ec2 replace-image-instance-type-specification \
    --image-id {{ami-1234567890abcdef0}} \
    --instance-type-specification '{"SupportedInstanceTypes": ["t3.*", "a2.*"], "UnsupportedInstanceTypes": ["t3.micro"]}'
```

**AMI에 대해 지원되지 않는 인스턴스 유형만 설정하려면**  
다음 명령을 사용하여 다른 모든 인스턴스 유형을 허용하면서 특정 인스턴스 유형을 차단합니다.

```
aws ec2 replace-image-instance-type-specification \
    --image-id {{ami-1234567890abcdef0}} \
    --instance-type-specification '{"UnsupportedInstanceTypes": ["t3.micro", "t3.nano"]}'
```

**AMI에서 인스턴스 유형 사양을 제거하려면**  
`--instance-type-specification`을 지정하지 않고 다음 명령을 사용하여 제한을 제거하고 모든 인스턴스 유형을 허용합니다.

```
aws ec2 replace-image-instance-type-specification \
    --image-id {{ami-1234567890abcdef0}}
```

------

## AMI에 허용되는 인스턴스 유형 보기
<a name="ami-allowed-instance-types-view"></a>

Amazon EC2 콘솔 또는 AWS CLI를 사용하여 AMI의 인스턴스 유형 사양을 볼 수 있습니다.

------
#### [ Console ]

**AMI에 허용되는 인스턴스 유형을 보려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **AMI**를 선택합니다.

1. AMI를 선택합니다.

1. **세부 정보** 탭에서 지원되는 인스턴스 유형과 지원되지 않는 인스턴스 유형을 확인합니다.

------
#### [ AWS CLI ]

**AMI의 인스턴스 유형 사양을 보려면**  
[describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 명령을 사용합니다. AMI에 인스턴스 유형 사양이 있는 경우 응답에 `InstanceTypeSpecification` 필드가 포함됩니다.

```
aws ec2 describe-images \
    --image-ids {{ami-1234567890abcdef0}}
```

다음은 인스턴스 유형 사양이 있는 AMI의 예제 출력입니다.

```
{
    "Images": [
        {
            "ImageId": "ami-1234567890abcdef0",
            ...
            "InstanceTypeSpecification": {
                "SupportedInstanceTypes": [
                    {
                        "InstanceType": "t3.*"
                    },
                    {
                        "InstanceType": "a2.*"
                    }
                ],
                "UnsupportedInstanceTypes": [
                    {
                        "InstanceType": "t3.micro"
                    }
                ]
            }
        }
    ]
}
```

------

## 허용되는 인스턴스 유형을 사용한 시작 동작
<a name="ami-allowed-instance-types-launch-behavior"></a>

인스턴스를 시작할 때 Amazon EC2는 지정된 인스턴스 유형이 AMI의 인스턴스 유형 사양과 호환되는지 확인합니다. 인스턴스 유형이 허용되지 않는 경우 Amazon EC2는 시작을 차단하고 오류를 반환합니다.

**예: 차단된 시작**  
다음 명령은 `t3.micro`를 지원하지 않는 AMI를 사용하여 `t3.micro` 인스턴스를 시작하려고 시도합니다.

```
aws ec2 run-instances \
    --image-id {{ami-1234567890abcdef0}} \
    --instance-type t3.micro
```

Amazon EC2는 다음 오류를 반환합니다.

```
An error occurred (InvalidParameterCombination) when calling the RunInstances operation: This AMI does not support the specified instance type. Check DescribeImages for InstanceTypeSpecification, and try again.
```

이 오류를 해결하려면 AMI가 지원하는 인스턴스 유형을 선택합니다. `describe-images` 명령을 사용하여 AMI의 인스턴스 유형 사양을 봅니다.

## 고려 사항
<a name="ami-allowed-instance-types-considerations"></a>

허용되는 인스턴스 유형을 사용할 때는 다음 정보를 염두에 두세요.
+ 기본적으로 AMI에는 인스턴스 유형 사양이 없습니다. 사양을 명시적으로 설정할 때까지 Amazon EC2는 모든 인스턴스 유형을 허용합니다.
+ AMI 소유자만 인스턴스 유형 사양을 설정하거나 변경할 수 있습니다.
+ `CopyImage`를 사용하여 AMI를 복사하면 Amazon EC2는 새 AMI에 인스턴스 유형 사양을 유지합니다.
+ Amazon EC2는 인스턴스 유형 사양을 하드 블록으로 적용합니다. 해당 인스턴스 유형이 허용되지 않으면 시작이 실패하고 `InvalidParameterCombination` 오류가 발생합니다.
+ 사양은 기존 인스턴스에 영향을 주지 않습니다. 새로 시작하는 인스턴스에만 적용됩니다.
+ 인스턴스 유형 사양이 있는 AMI를 참조하는 시작 템플릿 및 Auto Scaling 그룹은 구성된 인스턴스 유형이 허용되지 않는 경우 실패할 수 있습니다. 공유 AMI에서 사양을 설정하기 전에 호환성을 확인하는 것이 좋습니다.
+ `ReplaceImageInstanceTypeSpecification` 작업은 전체 사양을 대체합니다. 개별 인스턴스 유형을 추가 또는 제거하려면 요청에 업데이트된 전체 사양을 포함해야 합니다.