

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# VPC 연결 워크플로에 대한 인터넷 액세스
<a name="workflows-vpc-internet"></a>

 AWS HealthOmics 실행을 VPC에 연결할 때 실행은 해당 VPC 내에서 사용 가능한 리소스에만 액세스할 수 있습니다. 실행에 VPC 외부의 퍼블릭 인터넷 또는 AWS 서비스에 대한 액세스 권한을 부여하려면 적절한 네트워킹 리소스로 VPC를 구성해야 합니다.

이 주제에서는 VPC 연결 실행을 위해 서비스에 대한 인터넷 액세스 및 효율적인 연결을 제공하도록 VPC를 AWS 설정하는 방법을 설명합니다. 실행을 VPC에 연결하는 방법에 대한 자세한 내용은 섹션을 참조하세요[VPC에 HealthOmics 워크플로 연결](workflows-vpc-networking.md).

**중요**  
실행을 퍼블릭 서브넷에 연결해도 인터넷 액세스 또는 퍼블릭 IP 주소는 제공되지 않습니다. 인터넷 연결이 필요한 실행에는 항상 NAT 게이트웨이 경로와 함께 프라이빗 서브넷을 사용합니다.

**Topics**
+ [인터넷 액세스가 가능한 VPC 설정](#vpc-internet-setup)
+ [AWS 서비스에 대한 VPC 엔드포인트](#vpc-endpoints)
+ [보안 그룹 구성](#vpc-internet-security-groups)
+ [라우팅 테이블 구성](#vpc-internet-route-tables)
+ [VPC 연결 테스트](#vpc-testing-connectivity)
+ [예제](#vpc-internet-examples)
+ [모범 사례](#vpc-internet-best-practices)

## 인터넷 액세스가 가능한 VPC 설정
<a name="vpc-internet-setup"></a>

VPC에 연결된 실행에 인터넷에 대한 액세스 권한을 부여하려면 NAT 게이트웨이를 통해 아웃바운드 트래픽을 라우팅하는 프라이빗 서브넷이 있는 VPC를 생성합니다.

이 구성은 다음을 제공합니다.
+ HealthOmics 워크플로 작업을 위한 프라이빗 서브넷
+ 아웃바운드 인터넷 액세스를 위한 NAT 게이트웨이가 있는 퍼블릭 서브넷

### 지원되는 리전 및 가용 영역
<a name="vpc-internet-regions-azs"></a>

HealthOmics 워크플로는 다음 리전 및 가용 영역에서 작동합니다. VPC를 생성할 때 서브넷이 이러한 가용 영역 중 하나 이상에 있는지 확인합니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/omics/latest/dev/workflows-vpc-internet.html)

1. Amazon VPC 콘솔에서 **VPC 생성을** 선택합니다.

1. 퍼블릭 및 프라이빗 서브넷이 있는 **VPC를 자동으로 생성하려면 VPC 이상을** 선택합니다.

1. 다음 설정을 구성합니다.
   + **가용 영역 수**: 2개 이상
   + **퍼블릭 서브넷 수**: AZ당 1개. 이 예제에서는 2
   + **프라이빗 서브넷 수**: AZ당 1개. 이 예제에서는 2
   + **NAT 게이트웨이**: AZ당 1개(프로덕션용) 또는 1개(개발/테스트용)
   + **VPC 엔드포인트**: S3 Gateway 엔드포인트(선택 사항 - 리전 내 Amazon S3 트래픽은 기본적으로 HealthOmics 서비스 VPC를 통해 라우팅됨)

HealthOmics VPC 구성을 생성할 때 프라이빗 서브넷을 지정합니다. 실행은 퍼블릭 서브넷의 NAT 게이트웨이를 사용하여 인터넷에 연결합니다.

## AWS 서비스에 대한 VPC 엔드포인트
<a name="vpc-endpoints"></a>

가 퍼블릭 인터넷을 통과하지 않고 AWS 서비스에 액세스할 수 있도록 VPC 엔드포인트를 구성할 수 있습니다. 이렇게 하면 보안이 향상되고 데이터 전송 비용이 절감될 수 있습니다.

**참고**  
리전 내 Amazon S3 트래픽은 기본적으로 HealthOmics 서비스 VPC를 통해 라우팅됩니다. Amazon S3 인터페이스 엔드포인트를 구성하면 트래픽이 대신 VPC를 통해 라우팅됩니다. 최상의 성능과 비용 최적화를 위해 Amazon S3 게이트웨이 엔드포인트를 사용하는 것이 좋습니다. 자세한 내용은 *AWS PrivateLink 가이드*의 [ Amazon S3용 게이트웨이 엔드포인트](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html)를 참조하세요.

다음 표에는 HealthOmics 실행에 일반적으로 사용되는 VPC 엔드포인트가 나열되어 있습니다.


| 서비스 | 엔드포인트 유형 | 엔드포인트 이름 | 
| --- | --- | --- | 
| Amazon S3 | Gateway | com.amazonaws.region.s3 | 
| Amazon ECR(API) | 인터페이스 | com.amazonaws.region.ecr.api | 
| Amazon ECR(Docker) | 인터페이스 | com.amazonaws.region.ecr.dkr | 
| SSM | 인터페이스 | com.amazonaws.region.ssm | 
| CloudWatch Logs | 인터페이스 | com.amazonaws.region.logs | 

### NAT 게이트웨이 요구 사항
<a name="vpc-nat-gateway-requirements"></a>

퍼블릭 인터넷 액세스가 필요한 실행의 경우:
+ NAT 게이트웨이는 퍼블릭 서브넷에 배포해야 합니다.
+ 퍼블릭 서브넷에는 인터넷 게이트웨이에 대한 경로가 있어야 합니다.
+ 프라이빗 서브넷(실행 실행 위치)에는 NAT 게이트웨이에 대한 경로가 있어야 합니다.

**참고**  
NAT 게이트웨이에는 시간당 요금 및 데이터 처리 요금이 부과됩니다. 비용 최적화를 위해 NAT 게이트웨이를 통해 라우팅하는 대신 AWS 서비스 액세스에 VPC 엔드포인트를 사용하는 것이 좋습니다.

## 보안 그룹 구성
<a name="vpc-internet-security-groups"></a>

실행에서 액세스해야 하는 대상으로의 아웃바운드 트래픽을 허용하도록 보안 그룹을 구성합니다.
+ **퍼블릭 인터넷 액세스** - 아웃바운드 HTTPS(포트 443) 트래픽을 허용합니다. 필요에 따라 HTTP(포트 80)와 같은 다른 프로토콜에 대한 규칙을 추가합니다.
+ **특정 서비스** - 요구 사항에 따라 규칙을 구성합니다.
+ **온프레미스 리소스 -** VPN 또는 CIDR 범위로의 트래픽을 허용합니다.

다음 예제에서는 퍼블릭 인터넷 액세스를 위한 보안 그룹 규칙을 보여줍니다.


| Type | 프로토콜 | 포트 범위 | Destination | 설명 | 
| --- | --- | --- | --- | --- | 
| HTTPS | TCP | 443 | 0.0.0.0/0 | HTTPS가 인터넷에 연결되도록 허용 | 

## 라우팅 테이블 구성
<a name="vpc-internet-route-tables"></a>

프라이빗 서브넷에 인터넷 바인딩 트래픽을 NAT 게이트웨이로 보내는 라우팅 테이블 항목이 있는지 확인합니다.


| Destination | 대상 | 
| --- | --- | 
| 10.0.0.0/16 | 로컬 | 
| 0.0.0.0/0 | nat-xxxxxxxxx | 

온프레미스 리소스에 액세스하려면 가상 프라이빗 게이트웨이 또는 게이트웨이에 대한 경로를 구성합니다.

## VPC 연결 테스트
<a name="vpc-testing-connectivity"></a>

프로덕션 워크플로를 실행하기 전에 VPC 구성이 필요한 외부 서비스에 대한 연결을 허용하는지 확인합니다.

### 테스트 워크플로 생성
<a name="vpc-test-workflow"></a>

외부 서비스에 대한 연결을 테스트하는 간단한 워크플로를 생성합니다. 예를 들어 대상 서비스 엔드포인트에 대한 TCP 연결을 시도하는 워크플로를 생성합니다.

### 테스트 실행
<a name="vpc-run-test"></a>

```
aws omics start-run \
  --workflow-id test-workflow-id \
  --role-arn role-arn \
  --output-uri s3://bucket-name/test-outputs/ \
  --networking-mode VPC \
  --configuration-name configuration-name \
  --parameters file://test-parameters.json
```

### 결과 확인
<a name="vpc-verify-results"></a>

워크플로 출력을 확인하여 성공적인 연결을 확인합니다.

```
{
  "connectivity_test.result": "Testing connection to external service...\nSUCCESS: Connection successful!\nTest completed"
}
```

테스트가 실패하면 다음을 확인합니다.
+ 보안 그룹 규칙은 필요한 포트 및 대상으로의 아웃바운드 트래픽을 허용합니다.
+ 라우팅 테이블은 인터넷 액세스를 위해 트래픽을 NAT 게이트웨이로 보냅니다.
+ 외부 서비스는 네트워크에서 액세스할 수 있습니다.
+ 계정에서 충분한 ENIs 사용할 수 있습니다.
+ NAT 게이트웨이는 인터넷 게이트웨이로 가는 경로가 있는 퍼블릭 서브넷에 있습니다.

**참고**  
네트워크 처리량은 ENI당 10Gbps에서 시작되며 지속적인 트래픽으로 60분 동안 최대 100Gbps까지 확장됩니다. 즉각적인 처리량이 높은 요구 사항이 있는 워크플로는 Support에 문의 AWS 하세요.

## 예제
<a name="vpc-internet-examples"></a>

### API 인증을 사용하여 NCBI 데이터 액세스
<a name="vpc-example-ncbi"></a>

이 예제에서는 인증과 함께 NCBI 데이터 세트 API를 사용하여 NCBI 데이터에 액세스하는 방법을 보여줍니다.

**NCBI 리소스 액세스 모범 사례**  
고객은 가능한 경우 REST API를 사용하고 NCBI에서 제공하는 API 키를 사용해야 합니다. 퍼블릭 데이터에 대한 HTTP 및 FTP 요청과 같은 NCBI 리소스에 대한 액세스 요청은 HealthOmics에서 가져오며 NCBI에서 설정한 타사 요금으로 제한됩니다. 사용량이 가장 많은 동안 조절 오류로 인해 실행 실패가 발생할 수 있습니다. 사용자는 자체 NCBI API 키를 얻고 특수 APIs 활용하여 동시성을 높이고 개발 환경을 개선하는 것이 좋습니다.

NCBI API 키를 가져오려면 [ NCBI API 키 설명서를](https://www.ncbi.nlm.nih.gov/datasets/docs/v2/api/api-keys/) 참조하십시오.

**워크플로 정의 예:**

```
version 1.0
#WORKFLOW DEFINITION

# Meant to be used as integration test for public internet access via VPC tunnel
workflow TestFlow {
    input {
        String ncbi_api_url = "https://api.ncbi.nlm.nih.gov/datasets/v2/gene/accession/NM_021803.4?api_key=<YOUR_API_KEY>"
    }

    call DataProcessTask{
        input:
            ncbi_api_url = ncbi_api_url,
    }

    output {
        File output_file = DataProcessTask.output_file
    }

}

#Task Definitions
task DataProcessTask {
    input {
        String ncbi_api_url
    }

    command <<<
        set -eu
        # Download file from NCBI Datasets API with API key
        curl -fsSL "~{ncbi_api_url}" -o gene_data.json

        # Add data processing task here
        cat gene_data.json > processed_data.json

        # Echo the content to output file
        cat processed_data.json > outfile.txt
    >>>

    output {
        File output_file = "outfile.txt"
    }
}
```

**요점:**
+ 를 실제 NCBI API 키`<YOUR_API_KEY>`로 바꿉니다.
+ 워크플로는 HTTPS를 사용하여 NCBI 데이터 세트 API에 액세스합니다.
+ API 키는 URL 파라미터로 전달됩니다.
+ 이 접근 방식은 인증되지 않은 액세스(초당 요청 5개)에 비해 더 높은 속도 제한(초당 요청 10개)을 제공합니다.

NCBI API 키 및 속도 제한에 대한 자세한 내용은 [NCBI 데이터 세트 API 설명서를 참조하세요](https://www.ncbi.nlm.nih.gov/datasets/docs/v2/api/api-keys/).

## 모범 사례
<a name="vpc-internet-best-practices"></a>

1. ** AWS 서비스에 VPC 엔드포인트를 사용합니다.** Amazon S3, Amazon ECR 및 기타 AWS 서비스에 대한 VPC 엔드포인트를 구성하여 NAT 게이트웨이 비용을 줄이고 성능을 개선합니다. 자세한 내용은 [AWS 서비스에 대한 VPC 엔드포인트](#vpc-endpoints) 단원을 참조하십시오.

1. **네트워크 비용을 모니터링합니다.** VPC 네트워킹에는 NAT 게이트웨이, 데이터 전송 및 ENIs에 대한 비용이 발생합니다. AWS Cost Explorer를 사용하여 사용량을 모니터링합니다.

1. **가용 영역을 계획합니다.** 워크플로 배치를 지원하기 위해 HealthOmics가 작동하는 가용 영역에 서브넷이 걸쳐 있는지 확인합니다.

1. **각 AZ에서 NAT 게이트웨이를 사용합니다.** 프로덕션 워크로드의 경우 각 가용 영역에 NAT 게이트웨이를 배포하여 중복성을 제공합니다.