

# 고객이 간접적으로 호출할 수 있도록 HTTP API 게시
<a name="http-api-publish"></a>

스테이지 및 사용자 지정 도메인 이름을 사용하여 클라이언트가 호출할 수 있도록 API를 게시할 수 있습니다.

API 스테이지는 API의 수명 주기 상태에 대한 논리적 참조(예: `dev`, `prod`, `beta`, `v2`)입니다. 각 스테이지는 API 배포에 대한 명명된 참조이며, 클라이언트 애플리케이션 프로그램에서 호출을 하는 데 사용할 수 있습니다. API의 각 스테이지에 대해 통합 및 설정을 서로 다르게 구성할 수 있습니다.

사용자 지정 도메인 이름을 사용하여 클라이언트가 API를 호출할 수 있도록 기본 URL인 `https://api-id.execute-api.region.amazonaws.com/stage` 보다 더 간단하고 직관적인 URL을 제공할 수 있습니다.

**참고**  
API Gateway API의 보안을 강화하기 위해 `execute-api.{region}.amazonaws.com` 도메인은 [PSL(Public Suffix List)](https://publicsuffix.org/)에 등록됩니다. 보안 강화를 위해 API Gateway API 기본 도메인 이름에 민감한 쿠키를 설정해야 하는 경우 `__Host-` 접두사가 있는 쿠키를 사용하는 것이 좋습니다. 이렇게 쿠키를 설정하면 교차 사이트 요청 위조 시도(CSRF)로부터 도메인을 보호하는 데 도움이 됩니다. 자세한 내용은 Mozilla 개발자 네트워크의 [Set-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes) 페이지를 참조하십시오.

**Topics**
+ [API Gateway의 HTTP API에 대한 스테이지](http-api-stages.md)
+ [API Gateway의 HTTP API 보안 정책](http-api-ciphers.md)
+ [API Gateway의 HTTP API에 대한 사용자 지정 도메인 이름](http-api-custom-domain-names.md)

# API Gateway의 HTTP API에 대한 스테이지
<a name="http-api-stages"></a>

API 스테이지는 API의 수명 주기 상태에 대한 논리적 참조(예: `dev`, `prod`, `beta`, `v2`)입니다. API 스테이지는 API ID 및 스테이지 이름으로 식별되며, API를 호출하는 데 사용하는 URL에 포함됩니다. 각 스테이지는 API 배포에 대한 명명된 참조이며, 클라이언트 애플리케이션 프로그램에서 호출을 하는 데 사용할 수 있습니다.

API의 URL 기반에서 제공되는 `$default` 스테이지를 생성할 수 있습니다(예: `https://{api_id}.execute-api.{region}.amazonaws.com/`). 이 URL을 사용하여 API 단계를 호출합니다.

배포는 API 구성의 스냅샷입니다. 단계에 API를 배포한 후에는 클라이언트가 API를 호출할 수 있습니다. 변경 사항을 적용하려면 API를 배포해야 합니다. 자동 배포를 활성화하면 API에 대한 변경 사항이 자동으로 릴리스됩니다.

# API Gateway에서 HTTP API용 스테이지 변수 사용
<a name="http-api-stages.stage-variables"></a>

스테이지 변수는 HTTP API의 스테이지에 대해 정의할 수 있는 키-값 페어입니다. 환경 변수와 비슷한 역할을 하며, API 설정에 사용할 수 있습니다.

단계 변수는 자격 증명과 같은 중요한 데이터에 사용할 수 없습니다. 중요한 데이터를 통합에 전달하려면 AWS Lambda 권한 부여자를 사용합니다. Lambda 권한 부여자의 출력에서 중요한 데이터를 통합에 전달할 수 있습니다. 자세한 내용은 [Lambda 권한 부여자 응답 형식](http-api-lambda-authorizer.md#http-api-lambda-authorizer.payload-format-response) 단원을 참조하십시오.

## 예 - 스테이지 변수를 사용하여 HTTP 통합 엔드포인트 사용자 지정
<a name="http-api-stages.stage-variables-examples"></a>

예를 들어 스테이지 변수를 정의한 다음, 해당 값을 HTTP 프록시 통합을 위한 HTTP 엔드포인트로서 설정할 수 있습니다. 또한 추후에 연결된 스테이지 변수 이름을 사용하여 엔드포인트를 참조할 수 있습니다. 이렇게 하면 각 스테이지의 서로 다른 엔드포인트에서 동일한 API 설정을 사용할 수 있습니다. 마찬가지로 스테이지 변수를 사용하여 API의 각 스테이지에 대해 서로 다른 AWS Lambda 함수 통합을 지정할 수 있습니다.

스테이지 변수를 사용하여 HTTP 통합 엔드포인트를 사용자 지정하려면 먼저 스테이지(예: `url`)의 이름과 값을 `example.com`로 설정해야 합니다. 그런 다음 HTTP 프록시 통합을 설정합니다. 엔드포인트의 URL을 입력하는 대신, 단계 변수 값인 **http://\$1\$1stageVariables.url\$1**을 사용하도록 API Gateway에 지시할 수 있습니다. 이 값은 API의 스테이지에 따라 실행 시간에 스테이지 변수 `${}`을 대체하도록 API Gateway에 지시합니다.

비슷한 방법으로 스테이지 변수를 참조하여 Lambda 함수 이름이나 AWS 역할 ARN을 지정할 수 있습니다.

Lambda 함수 이름을 단계 변수 값으로 지정할 때는 Lambda 함수에 대한 권한을 수동으로 구성해야 합니다. 다음 [add-permission](https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html) 명령은 Lambda 함수에 대한 권한을 구성합니다.

```
aws lambda add-permission --function-name arn:aws:lambda:XXXXXX:your-lambda-function-name --source-arn arn:aws:execute-api:us-east-1:YOUR_ACCOUNT_ID:api_id/*/HTTP_METHOD/resource --principal apigateway.amazonaws.com --statement-id apigateway-access --action lambda:InvokeFunction
```

# API Gateway의 HTTP API에 대한 API Gateway의 스테이지 변수 참조
<a name="http-api-stages.stage-variables-reference"></a>

다음과 같은 경우에 HTTP API에 API Gateway 스테이지 변수를 사용할 수 있습니다.

## HTTP 통합 URI
<a name="http-api-stages.stage-variables-in-integration-HTTP-uris"></a>

다음 예제에서 보듯 스테이지 변수를 HTTP 통합 URI의 일부로 사용할 수 있습니다.
+ 프로토콜이 없는 전체 URI - `http://${stageVariables.<variable_name>}`
+ 전체 도메인 - `http://${stageVariables.<variable_name>}/resource/operation`
+ 하위 도메인 - `http://${stageVariables.<variable_name>}.example.com/resource/operation`
+ 경로 - `http://example.com/${stageVariables.<variable_name>}/bar`
+ 쿼리 문자열 - `http://example.com/foo?q=${stageVariables.<variable_name>}` 

## Lambda 함수
<a name="http-api-stages.stage-variables-in-integration-lambda-functions"></a>

 다음 예제와 같이 Lambda 함수 통합 이름이나 별칭 대신 스테이지 변수를 사용할 수 있습니다.
+ `arn:aws:apigateway:<region>:lambda:path/2015-03-31/functions/arn:aws:lambda:<region>:<account_id>:function:${stageVariables.<function_variable_name>}/invocations`
+ `arn:aws:apigateway:<region>:lambda:path/2015-03-31/functions/arn:aws:lambda:<region>:<account_id>:function:<function_name>:${stageVariables.<version_variable_name>}/invocations`

**참고**  
Lambda 함수에 대해 단계 변수를 사용하려면 함수가 API와 동일한 계정에 있어야 합니다. 단계 변수는 교차 계정 Lambda 함수를 지원하지 않습니다.

## AWS 통합 자격 증명
<a name="http-api-stages.stage-variables-in-integration-aws-credentials"></a>

 다음 예제와 같이 스테이지 변수를 AWS 사용자 또는 역할 자격 증명 ARN의 일부로 사용할 수 있습니다.
+  `arn:aws:iam::<account_id>:${stageVariables.<variable_name>}` 

# API Gateway의 HTTP API 보안 정책
<a name="http-api-ciphers"></a>

API Gateway는 모든 HTTP API 엔드포인트에 대한 보안 정책 `TLS_1_2`를 적용합니다.

보안 정책은 Amazon API Gateway가 제공하는 최소 TLS 버전과 암호 제품군의 사전 정의된 조합입니다.** TLS 프로토콜은 클라이언트와 서버 간의 변조 및 도청과 같은 네트워크 보안 문제를 해결합니다. 클라이언트가 사용자 지정의 도메인을 통해 API에 TLS 핸드셰이크를 설정하면 보안 정책은 클라이언트가 선택할 수 있는 TLS 버전 및 암호 제품군 옵션을 적용합니다. 이 보안 정책은 TLS 1.2 및 TLS 1.3 트래픽을 허용하고 TLS 1.0 트래픽은 거부합니다.

## HTTP APIs에 지원되는 TLS 프로토콜 및 암호.
<a name="http-api-ciphers-list"></a>

다음 표에서는 HTTP API에 지원되는 TLS 프로토콜을 설명합니다.


| **TLS 프로토콜** | **TLS\$11\$12 보안 정책** | 
| --- | --- | 
| TLSv1.3 | ![\[alt text not found\]](http://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/images/success_icon.svg) 예 | 
| TLSv1.2 | ![\[alt text not found\]](http://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/images/success_icon.svg) 예 | 

다음 표에서는 HTTP API에 대한 TLS 1\$12 보안 정책에 사용할 수 있는 TLS 암호를 설명합니다.


| **TLS 싸이퍼** | **TLS\$11\$12 보안 정책** | 
| --- | --- | 
| TLS-AES-128-GCM-SHA256 | ![\[alt text not found\]](http://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/images/success_icon.svg) 예 | 
| TLS-AES-256-GCM-SHA384 | ![\[alt text not found\]](http://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/images/success_icon.svg) 예 | 
| TLS-CHACHA20-POLY1305-SHA256 | ![\[alt text not found\]](http://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/images/success_icon.svg) 예 | 
| ECDHE-ECDSA-AES128-GCM-SHA256 | ![\[alt text not found\]](http://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/images/success_icon.svg) 예 | 
| ECDHE-RSA-AES128-GCM-SHA256 | ![\[alt text not found\]](http://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/images/success_icon.svg) 예 | 
| ECDHE-ECDSA-AES128-SHA256 | ![\[alt text not found\]](http://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/images/success_icon.svg) 예 | 
| ECDHE-RSA-AES128-SHA256 | ![\[alt text not found\]](http://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/images/success_icon.svg) 예 | 
| ECDHE-ECDSA-AES256-GCM-SHA384 | ![\[alt text not found\]](http://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/images/success_icon.svg) 예 | 
| ECDHE-RSA-AES256-GCM-SHA384 | ![\[alt text not found\]](http://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/images/success_icon.svg) 예 | 
| ECDHE-ECDSA-AES256-SHA384 | ![\[alt text not found\]](http://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/images/success_icon.svg) 예 | 
| ECDHE-RSA-AES256-SHA384 | ![\[alt text not found\]](http://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/images/success_icon.svg) 예 | 
| AES128-GCM-SHA256 | ![\[alt text not found\]](http://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/images/success_icon.svg) 예 | 
| AES128-SHA256 | ![\[alt text not found\]](http://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/images/success_icon.svg) 예 | 
| AES256-GCM-SHA384 | ![\[alt text not found\]](http://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/images/success_icon.svg) 예 | 
| AES256-SHA256 | ![\[alt text not found\]](http://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/images/success_icon.svg) 예 | 

## OpenSSL 및 RFC 암호 이름
<a name="apigateway-secure-connections-openssl-rfc-cipher-names-http"></a>

OpenSSL 및 IETF RFC 5246은 동일한 암호에 대해 서로 다른 이름을 사용합니다. 암호 이름 목록은 [OpenSSL 및 RFC 암호 이름](apigateway-security-policies-list.md#apigateway-secure-connections-openssl-rfc-cipher-names) 단원을 참조합니다.

## REST API 및 WebSocket API에 대한 정보
<a name="apigateway-http-additional-apis"></a>

REST APIs 및 WebSocket API에 대한 자세한 내용은 [API Gateway에서 사용자 지정 도메인에 대한 보안 정책 선택](apigateway-custom-domain-tls-version.md) 및 [API Gateway의 WebSocket API 보안 정책](websocket-api-ciphers.md)를 참조합니다.

# API Gateway의 HTTP API에 대한 사용자 지정 도메인 이름
<a name="http-api-custom-domain-names"></a>

*사용자 지정 도메인 이름*은 API 사용자에게 제공할 수 있는 더 간단하고 직관적인 URL입니다.

API를 배포한 후 사용자 및 사용자 고객은 다음 형식의 기본 URL을 사용하여 API를 호출할 수 있습니다.

```
https://api-id.execute-api.region.amazonaws.com/stage
```

여기서 *api-id*는 API Gateway에서 생성되고 *region*은 AWS 리전이며 *stage*는 API를 배포할 때 사용자가 지정합니다.

URL의 호스트 이름 부분(즉, `api-id.execute-api.region.amazonaws.com`)은 API 엔드포인트를 가리킵니다. 기본 API 엔드포인트는 임의로 생성되므로 기억하기가 어려우며 사용자 친화적이지 않습니다.

사용자 지정 도메인 이름을 사용하면 API의 호스트 이름을 설정하고 기본 경로(예: `myservice`)를 선택하여 대체 URL을 API에 매핑할 수 있습니다. 예를 들어, 더 사용자 친화적인 API 기본 URL은 다음과 같습니다.

```
https://api.example.com/myservice
```

## 고려 사항
<a name="http-api-custom-domain-name-considerations"></a>

다음 고려 사항은 사용자 지정 도메인 이름 사용에 영향을 미칠 수 있습니다.
+ 리전 사용자 지정 도메인 이름은 REST API 및 HTTP API와 연결될 수 있습니다. API Gateway 버전 2 API를 사용하여 REST API에 대한 리전 사용자 지정 도메인 이름을 생성하고 관리할 수 있습니다.
+ 최소 TLS 버전의 경우 TLS 1.2만 지원됩니다.
+ DNS 공급자의 리소스 레코드를 생성하거나 업데이트하여 API 엔드포인트에 매핑해야 합니다. 이렇게 매핑하지 않으면 사용자 지정 도메인 이름이 목적지인 API 요청은 API Gateway에 도달할 수 없습니다.
+ 와일드카드 인증서를 사용하면 기본 할당량을 초과하지 않고 거의 무제한 수의 도메인 이름을 지원할 수 있습니다. 자세한 내용은 [와일드카드 사용자 정의 도메인 이름](#http-wildcard-custom-domain-names) 섹션을 참조하세요.

## 사전 조건
<a name="http-api-custom-domain-names-prerequisites"></a>

사용자 지정 도메인 이름을 생성하기 위한 사전 요구 사항은 다음과 같습니다.

### 도메인 이름 등록
<a name="http-api-custom-domain-names-register"></a>

API에 대한 사용자 지정 도메인 이름을 설정하려면 등록된 인터넷 도메인 이름이 있어야 합니다. [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/)를 사용하거나 사용자가 선택한 서드 파티 도메인 등록자를 사용하여 인터넷 도메인을 등록할 수 있습니다. 사용자 지정 도메인 이름은 하위 도메인의 이름이거나 등록된 인터넷 도메인의 루트 도메인("zone apex"라고도 함) 이름일 수 있습니다.

도메인 이름은 [RFC 1035](https://tools.ietf.org/html/rfc1035#section-2.3.4) 사양을 따라야 하며 라벨당 최대 63옥텟, 총 255옥텝을 포함할 수 있습니다.

### 사용자 지정 도메인 이름에 대한 인증서
<a name="http-api-custom-domain-names-certificates"></a>

API에 대한 사용자 지정 도메인 이름을 설정하기 전에 ACM에서 SSL/TLS 인증서를 준비해야 합니다. 사용자 지정 도메인 이름을 생성하는 AWS 리전에서 ACM을 사용할 수 없는 경우 해당 리전의 API Gateway로 인증서를 가져와야 합니다.

SSL/TLS 인증서를 가져오려면 PEM 형식의 SSL/TLS 인증서 본문, 해당하는 프라이빗 키 및 사용자 지정 도메인 이름에 대한 인증서 체인을 제공해야 합니다.

ACM에 저장된 각 인증서는 ARN으로 식별됩니다. ACM에서 발행한 인증서를 사용하면 프라이빗 키 같은 민감한 인증서 세부 정보의 공개를 걱정할 필요가 없습니다. 해당 ARN을 참조하기만 하면 도메인 이름에 대해 AWS에서 관리하는 인증서를 사용할 수 있습니다.

애플리케이션에서 ACM 인증서를 고정하기 위해 인증서 고정(SSL 고정)을 사용하는 경우, AWS가 인증서를 갱신한 후 애플리케이션이 도메인에 연결하지 못하게 될 수 있습니다. 자세한 내용은 *AWS Certificate Manager 사용 설명서*의 [인증서 고정 문제](https://docs.aws.amazon.com/acm/latest/userguide/troubleshooting-pinning.html)를 참조하세요.

## 와일드카드 사용자 정의 도메인 이름
<a name="http-wildcard-custom-domain-names"></a>

와일드카드 사용자 지정 도메인 이름을 사용하면 [기본 할당량](limits.md)을 초과하지 않고 거의 무제한 수의 도메인 이름을 지원할 수 있습니다. 예를 들어 각 고객에게 고유한 도메인 이름인 `customername.api.example.com`을 제공할 수 있습니다.

와일드카드 사용자 지정 도메인 이름을 생성하려면, 와일드카드(`*`)를 루트 도메인의 가능한 모든 하위 도메인을 나타내는 사용자 지정 도메인의 첫 번째 하위 도메인으로 지정할 수 있습니다.

예를 들어 와일드카드 사용자 정의 도메인 이름 `*.example.com`을 사용하면 `a.example.com`, `b.example.com` 및 `c.example.com` 같은 하위 도메인이 모두 동일한 도메인으로 라우팅됩니다.

와일드카드 사용자 지정 도메인 이름은 API Gateway의 표준 사용자 지정 도메인 이름과 별개의 구성을 지원합니다. 예를 들어, 단일 AWS 계정에서 `*.example.com`과 `a.example.com`가 다르게 동작하도록 구성할 수 있습니다.

와일드카드 사용자 지정 도메인 이름을 생성하려면 DNS 또는 이메일 검증 방법을 사용하여 검증한 ACM에서 발급한 인증서를 제공해야 합니다.

**참고**  
다른 AWS 계정에서 와일드카드 사용자 지정 도메인 이름과 충돌하는 사용자 지정 도메인 이름을 만든 경우에는 와일드카드 사용자 지정 도메인 이름을 생성할 수 없습니다. 예를 들어 계정 A에서 `a.example.com`가 생성된 경우, 계정 B는 와일드카드 사용자 지정 도메인 이름 `*.example.com`을 생성할 수 없습니다.  
계정 A와 계정 B가 한 소유자를 공유하는 경우 [AWS 지원 센터](https://console.aws.amazon.com/support/home#/)에 문의하여 예외를 요청할 수 있습니다.

## 사용자 지정 도메인 이름에 대한 다음 단계
<a name="http-api-custom-domain-names-next-steps"></a>

HTTP API에 대한 사용자 지정 도메인 이름을 설정하려면 API Gateway 개발자 안내서의 REST API 섹션에 있는 설명서를 사용하세요.

우선 사용자 지정 도메인 이름에 대한 인증서를 지정합니다. 자세한 내용은 [AWS Certificate Manager에서 인증서 준비](how-to-specify-certificate-for-custom-domain-name.md) 섹션을 참조하세요. 다음으로 리전 사용자 지정 도메인 이름을 생성합니다. 자세한 내용은 [API Gateway에서 리전 사용자 지정 도메인 이름 설정](apigateway-regional-api-custom-domain-create.md) 섹션을 참조하세요.

# API 스테이지를 HTTP API에 대한 사용자 지정 도메인 이름에 매핑
<a name="http-api-mappings"></a>

API 매핑을 사용하여 API 스테이지를 사용자 지정 도메인 이름에 연결합니다. 도메인 이름을 생성하고 DNS 레코드를 구성한 후에는 API 매핑을 사용하여 사용자 지정 도메인 이름을 통해 API로 트래픽을 보냅니다.

API 매핑은 API, 스테이지 및 매핑에 사용할 경로(선택 사항)를 지정합니다. 예를 들어 API의 `production` 스테이지를 `https://api.example.com/orders`에 매핑할 수 있습니다.

HTTP 및 REST API 스테이지를 동일한 사용자 지정 도메인 이름에 매핑할 수 있습니다.

API 매핑을 생성하기 전에 API, 스테이지 및 사용자 지정 도메인 이름이 있어야 합니다. 사용자 지정 도메인 이름 생성에 대한 자세한 내용은 ‭[API Gateway에서 리전 사용자 지정 도메인 이름 설정](apigateway-regional-api-custom-domain-create.md)‬ 단원을 참조하세요.

## API 요청 라우팅
<a name="http-api-mappings-evalutation"></a>

여러 수준(예: `orders/v1/items` 및 `orders/v2/items`)으로 API 매핑을 구성할 수 있습니다.

여러 수준 API 매핑의 경우 API Gateway는 일치하는 경로가 가장 긴 API 매핑으로 요청을 라우팅합니다. API Gateway는 호출할 API를 선택하기 위해 API 경로가 아닌 API 매핑에 대해 구성된 경로만 고려합니다. 요청과 일치하는 경로가 없으면 API Gateway는 빈 경로 `(none)`에 매핑한 API로 요청을 보냅니다.

여러 수준 API 매핑을 사용하는 사용자 지정 도메인 이름의 경우 API Gateway는 일치하는 경로가 가장 긴 API 매핑으로 요청을 라우팅합니다.

예를 들어 다음 API 매핑이 있는 사용자 지정 도메인 이름 `https://api.example.com`을(를) 살펴보겠습니다.

1. `(none)`이(가) API 1에 매핑됩니다.

1. `orders`이(가) API 2에 매핑됩니다.

1. `orders/v1/items`이(가) API 3에 매핑됩니다.

1. `orders/v2/items`이(가) API 4에 매핑됩니다.

1. `orders/v2/items/categories`이(가) API 5에 매핑됩니다.


| 요청 | 선택한 API | 설명 | 
| --- | --- | --- | 
|  `https://api.example.com/orders`  |  `API 2`  |  요청은 이 API 매핑과 정확히 일치합니다.  | 
|  `https://api.example.com/orders/v1/items`  |  `API 3`  |  요청은 이 API 매핑과 정확히 일치합니다.  | 
|  `https://api.example.com/orders/v2/items`  |  `API 4`  |  요청은 이 API 매핑과 정확히 일치합니다.  | 
|  `https://api.example.com/orders/v1/items/123`  |  `API 3`  |  API Gateway는 일치하는 경로가 가장 긴 매핑을 선택합니다. 요청 끝에 있는 `123`은(는) 선택 항목에 영향을 주지 않습니다.  | 
|  `https://api.example.com/orders/v2/items/categories/5`  |  `API 5`  |  API Gateway는 일치하는 경로가 가장 긴 매핑을 선택합니다.  | 
|  `https://api.example.com/customers`  |  `API 1`  |  API Gateway는 빈 매핑을 캐치 올(catch-all)로 사용합니다.  | 
|  `https://api.example.com/ordersandmore`  |  `API 2`  |  API Gateway는 일치하는 접두사가 가장 긴 매핑을 선택합니다. 단일 수준 매핑으로 구성된 사용자 지정 도메인 이름(예: 단지 `https://api.example.com/orders` 및 `https://api.example.com/`)의 경우 `ordersandmore`와 일치하는 경로가 없으므로 API Gateway는 `API 1`을 선택합니다.  | 

## 제한 사항
<a name="http-api-mappings-restrictions"></a>
+ API 매핑에서 사용자 지정 도메인 이름과 매핑된 API는 동일한 AWS 계정에 있어야 합니다.
+ API 매핑에는 문자, 숫자 및 문자 `$-_.+!*'()/`만 포함해야 합니다.
+ API 매핑에서 경로의 최대 길이는 300자입니다.
+ 각 도메인 이름에 대해 여러 수준의 API 매핑이 200개 있을 수 있습니다. 이 제한에는 `/prod`와 같은 단일 수준의 API 매핑은 포함되지 않습니다.
+ TLS 1.2 보안 정책을 사용하여 HTTP API를 리전별 사용자 지정 도메인 이름에만 매핑할 수 있습니다.
+ WebSocket API를 HTTP API 또는 REST API와 동일한 사용자 지정 도메인 이름에 매핑할 수 없습니다.
+ 여러 레벨로 API 매핑을 생성하는 경우 API Gateway는 모든 헤더 이름을 소문자로 변환합니다.

## API 매핑 생성
<a name="http-api-mappings-examples"></a>

API 매핑을 생성하려면 먼저 사용자 지정 도메인 이름, API 및 스테이지를 생성해야 합니다. 사용자 지정 도메인 이름 생성에 대한 자세한 내용은 [API Gateway에서 리전 사용자 지정 도메인 이름 설정](apigateway-regional-api-custom-domain-create.md) 단원을 참조하세요.

예를 들어 모든 리소스를 생성하는 AWS Serverless Application Model 템플릿에 대해서는 GitHub의 [SAM 세션](https://github.com/aws-samples/sessions-with-aws-sam/tree/master/custom-domains)을 참조하세요.

------
#### [ AWS Management Console ]

**API 매핑 생성**

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)에서 API Gateway 콘솔에 로그인합니다.

1. **사용자 지정 도메인 이름**을 선택합니다.

1. 이미 생성한 사용자 지정 도메인 이름을 선택합니다.

1. **API 매핑**을 선택합니다.

1. **API 매핑 구성**을 선택합니다.

1. **새 매핑 추가**를 선택합니다.

1. **API**, **스테이지** 및 **경로**(선택 사항)를 입력합니다.

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

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

다음 [create-api-mapping](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-api.html) 명령은 API 매핑을 생성합니다. 이 예에서 API Gateway는 지정된 API 및 스테이지로 `api.example.com/v1/orders` 요청을 보냅니다.

```
aws apigatewayv2 create-api-mapping \
    --domain-name api.example.com \
    --api-mapping-key v1/orders \
    --api-id a1b2c3d4 \
    --stage test
```

------
#### [ CloudFormation ]

다음 CloudFormation 예에서는 API 매핑을 생성합니다.

```
MyApiMapping:
  Type: 'AWS::ApiGatewayV2::ApiMapping'
  Properties:
    DomainName: api.example.com
    ApiMappingKey: 'orders/v2/items'
    ApiId: !Ref MyApi
    Stage: !Ref MyStage
```

------

# HTTP API의 기본 엔드포인트 비활성화
<a name="http-api-disable-default-endpoint"></a>

기본적으로 클라이언트는 API에 대해 API Gateway가 생성하는 `execute-api` 엔드포인트를 사용하여 API를 호출할 수 있습니다. 클라이언트가 사용자 지정 도메인 이름을 사용해야만 API에 액세스할 수 있도록 하려면 기본 `execute-api` 엔드포인트를 비활성화합니다. 기본 엔드포인트를 비활성화하면 API의 모든 스테이지에 영향이 미칩니다.

다음 절차는 HTTP API의 기본 엔드포인트를 비활성화하는 방법을 보여 줍니다.

------
#### [ AWS Management Console ]

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)에서 API Gateway 콘솔에 로그인합니다.

1. HTTP API를 선택합니다.

1. API ID를 선택하여 **API 세부 정보** 페이지를 엽니다.

1. **API 세부 정보** 탭에서 **편집**을 선택합니다.

1. **기본 엔드포인트**에서 **비활성화**를 선택합니다.

1. **Save**(저장)를 선택합니다.

   스테이지에 자동 배포를 활성화하는 경우 변경 사항을 적용하기 위해 API를 재배포하지 않아도 됩니다. 그밖에는 API를 재배포해야 합니다.

1. (선택 사항) **배포**를 선택한 다음, 변경 사항을 적용하려면 API를 재배포하거나 새 스테이지를 생성하세요.

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

다음 [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-domain-name.html) 명령은 HTTP API의 기본 엔드포인트를 비활성화합니다.

```
aws apigatewayv2 update-api \
    --api-id abcdef123 \
    --disable-execute-api-endpoint
```

기본 엔드포인트를 비활성화한 후 자동 배포를 활성화하지 않는 한 변경 사항을 적용하려면 API를 배포해야 합니다.

다음 [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-deployment.html) 명령을 사용하면 배포가 생성됩니다.

```
aws apigatewayv2 create-deployment \
    --api-id abcdef123 \
    --stage-name dev
```

------

# HTTP API의 사용자 지정 도메인 이름에 대한 IP 주소 유형
<a name="http-api-custom-domain-names-ip-address-type"></a>

API를 만들 때 도메인을 간접적으로 호출할 수 있는 IP 주소 유형을 지정합니다. IPv4를 선택하여 IPv4 주소가 도메인을 간접적으로 호출하도록 확인하거나, 듀얼 스택을 선택하여 IPv4 및 IPv6 주소가 모두 도메인을 간접적으로 호출하도록 허용할 수 있습니다. IP 공간 소진을 완화하기 위해 또는 보안 태세를 위해 IP 주소 유형을 듀얼 스택으로 설정하는 것이 좋습니다. 듀얼 스택 IP 주소 유형의 이점에 대한 자세한 내용은 [IPv6 on AWS](https://docs.aws.amazon.com/whitepapers/latest/ipv6-on-aws/internet-protocol-version-6.html)를 참조하세요.

## IP 주소 유형에 대한 고려 사항
<a name="http-ip-address-type-considerations"></a>

다음 고려 사항은 IP 주소 유형 사용에 영향을 미칠 수 있습니다.
+ API Gateway 사용자 지정 도메인 이름의 기본 IP 주소 유형은 IPv4입니다.
+ 사용자 지정 도메인 이름은 여기에 매핑된 모든 API에 대해 동일한 IP 주소 유형을 가질 필요가 없습니다. 기본 API 엔드포인트를 비활성화하면 직접 호출자가 API를 간접적으로 호출하는 방법에 영향을 미칠 수 있습니다.

## 사용자 지정 도메인 이름의 IP 주소 유형 변경
<a name="http-api-custom-domain-names-ip-address-type-change"></a>

도메인의 엔드포인트 구성을 업데이트하여 IP 주소 유형을 변경할 수 있습니다. AWS Management Console, AWS CLI, CloudFormation 또는 AWS SDK를 사용하여 도메인의 엔드포인트 구성을 업데이트할 수 있습니다.

------
#### [ AWS Management Console ]

**사용자 지정 도메인 이름의 IP 주소 유형을 변경하려면**

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)에서 API Gateway 콘솔에 로그인합니다.

1. 퍼블릭 사용자 지정 도메인 이름을 선택합니다.

1. **엔드포인트 구성**을 선택합니다.

1. IP 주소 유형에서 **IPv4** 또는 **듀얼 스택**을 선택합니다.

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

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

다음 [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-domain-name.html) 명령은 IP 주소 유형이 듀얼 스택이 되도록 API를 업데이트합니다.

```
aws apigatewayv2 update-domain-name \
   --domain-name dualstack.example.com \
   --domain-name-configurations CertificateArn=arn:aws:acm:us-east-1:111122223333:certificate/abcd1234-5678-abc,IpAddressType=dualstack
```

출력은 다음과 같습니다.

```
{
    "ApiMappingSelectionExpression": "$request.basepath",
    "DomainName": "dualstack.example.com",
    "DomainNameConfigurations": [
        {
            "ApiGatewayDomainName": "d-abcd1234.execute-api.us-east-1.amazonaws.com",
            "CertificateArn": "arn:aws:acm:us-east-1:111122223333:certificate/abcd1234-5678-abc",
            "DomainNameStatus": "AVAILABLE",
            "EndpointType": "REGIONAL",
            "HostedZoneId": "Z3LQWSYCGH4ADY",
            "SecurityPolicy": "TLS_1_2",
            "IpAddressType": "dualstack"
        }
    ],
    "Tags": {}
}
```

------