

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

# Managed Service for Apache Flink 애플리케이션 생성
<a name="how-creating-apps"></a>

이 주제에는 Managed Service for Apache Flink 애플리케이션을 생성하는 방법에 관한 자세한 내용이 포함되어 있습니다.

**Topics**
+ [Managed Service for Apache Flink 애플리케이션 코드 빌드](#how-creating-apps-building)
+ [Managed Service for Apache Flink 애플리케이션 생성](#how-creating-apps-creating)
+ [고객 관리형 키 사용](#how-creating-apps-use-cmk)
+ [Managed Service for Apache Flink 애플리케이션 시작](#how-creating-apps-starting)
+ [Managed Service for Apache Flink 애플리케이션 확인](#how-creating-apps-verifying)
+ [Managed Service for Apache Flink 애플리케이션의 시스템 롤백 활성화](how-system-rollbacks.md)

## Managed Service for Apache Flink 애플리케이션 코드 빌드
<a name="how-creating-apps-building"></a>

이 섹션에서는 Managed Service for Apache Flink 애플리케이션의 애플리케이션 코드를 빌드하는 데 사용하는 구성 요소에 대해 설명합니다.

지원되는 최신 버전의 Apache Flink를 애플리케이션 코드에 사용하는 것이 좋습니다. Managed Service for Apache Flink 애플리케이션 업그레이드에 대한 자세한 내용을 알아보려면 [Apache Flink에 인플레이스 버전 업그레이드 사용](how-in-place-version-upgrades.md) 섹션을 참조하십시오.

[Apache Maven](https://maven.apache.org/)을 사용하여 애플리케이션 코드를 구축합니다. Apache Maven 프로젝트는 `pom.xml` 파일을 사용하여 해당 프로젝트에서 사용하는 구성 요소의 버전을 지정합니다.

**참고**  
Managed Service for Apache Flink는 최대 512MB 크기의 JAR 파일을 지원합니다. 이보다 큰 JAR 파일을 사용하면 애플리케이션이 시작되지 않습니다.

이제 애플리케이션은 모든 Scala 버전에서 Java API를 사용할 수 있습니다. 선택한 Scala 표준 라이브러리를 Scala 애플리케이션에 번들로 제공해야 합니다.

**Apache Beam**을 사용하는 Managed Service for Apache Flink 애플리케이션을 만드는 방법에 대한 자세한 내용을 알아보려면 [Managed Service for Apache Flink 애플리케이션에서 Apache Beam을 사용합니다.](how-creating-apps-beam.md) 섹션을 참조하십시오.

### 애플리케이션의 Apache Flink 버전 지정
<a name="how-creating-apps-building-flink"></a>

Managed Service for Apache Flink 런타임 버전 1.1.0 이상을 사용하는 경우 애플리케이션을 컴파일할 때 애플리케이션에서 사용하는 Apache Flink 버전을 지정합니다. `-Dflink.version` 파라미터와 함께 Apache Flink 버전을 제공합니다. 예를 들어 Apache Flink 2.2.0을 사용하는 경우 다음을 제공합니다.

```
mvn package -Dflink.version=2.2.0
```

이전 버전의 Apache Flink를 사용하여 애플리케이션을 빌드하려면 [이전 버전](earlier.md) 섹션을 참조하세요.

## Managed Service for Apache Flink 애플리케이션 생성
<a name="how-creating-apps-creating"></a>

애플리케이션 코드를 구축한 후에는 다음을 수행하여 Managed Service for Apache Flink(Amazon MSF) 애플리케이션을 생성합니다.
+ **애플리케이션 코드 업로드**: Amazon S3 버킷에 애플리케이션 코드를 업로드합니다. 애플리케이션 코드의 S3 버킷 명칭과 객체 명칭은 애플리케이션을 생성할 때 지정합니다. 애플리케이션 코드를 업로드하는 방법을 보여주는 자습서는 [자습서: Managed Service for Apache Flink에서 DataStream API 사용 시작하기](getting-started.md) 자습서를 참조하세요.
+ **Managed Service for Apache Flink 애플리케이션 만들기**: 다음 방법 중 하나를 사용하여 Amazon MSF 애플리케이션을 생성합니다.
**참고**  
Amazon MSF는 기본적으로를 사용하여 애플리케이션을 암호화합니다 AWS 소유 키. AWS KMS 고객 관리형 키(CMKs)를 사용하여 새 애플리케이션을 생성하여 직접 키를 생성, 소유 및 관리할 수도 있습니다. CMK에 관한 자세한 내용은 [Amazon Managed Service for Apache Flink의 키 관리](key-management-flink.md) 섹션을 참조하세요.
  + ** AWS 콘솔을 사용하여 Amazon MSF 애플리케이션 생성:** AWS 콘솔을 사용하여 애플리케이션을 생성하고 구성할 수 있습니다.

    콘솔을 사용하여 애플리케이션을 생성하면 애플리케이션의 종속 리소스(예: CloudWatch Logs 스트림, IAM 역할, IAM 정책)가 자동으로 생성됩니다.

    콘솔을 사용하여 애플리케이션을 생성할 때는 **Managed Service for Apache Flink - 애플리케이션 생성** 페이지의 풀다운에서 애플리케이션을 선택하여 애플리케이션에서 사용하는 Apache Flink 버전을 지정합니다.

    콘솔을 사용하여 애플리케이션을 생성하는 방법에 대한 자습서는 [자습서: Managed Service for Apache Flink에서 DataStream API 사용 시작하기](getting-started.md) 자습서를 참조하세요.
  + ** AWS CLI를 사용하여 Amazon MSF 애플리케이션 생성:** AWS CLI를 사용하여 애플리케이션을 생성하고 구성할 수 있습니다.

    CLI를 사용하여 애플리케이션을 생성할 때는 애플리케이션의 종속 리소스(예: CloudWatch Logs 스트림, IAM 역할, IAM 정책)도 수동으로 생성해야 합니다.

    CLI를 사용하여 애플리케이션을 만들 때는 `CreateApplication` 작업의 `RuntimeEnvironment` 파라미터를 사용하여 애플리케이션에서 사용하는 Apache Flink 버전을 지정합니다.
**참고**  
기존 애플리케이션의 `RuntimeEnvironment`를 변경할 수 있습니다. 자세한 방법은 [Apache Flink에 인플레이스 버전 업그레이드 사용](how-in-place-version-upgrades.md)을 참조하세요.

## 고객 관리형 키 사용
<a name="how-creating-apps-use-cmk"></a>

Amazon MSF에서 고객 관리형 키(CMKs)는 사용자가 생성, 소유 및 관리하는 키 AWS Key Management Service ()로 애플리케이션의 데이터를 암호화할 수 있는 기능입니다AWS KMS. Amazon MSF 애플리케이션에서는 Flink [체크포인트](how-fault.md) 또는 [스냅샷](how-snapshots.md) 대상이 되는 모든 데이터가 사용자가 해당 애플리케이션용으로 정의한 CMK로 암호화된다는 의미입니다.

애플리케이션에서 CMK를 사용하려면 먼저 [새 애플리케이션을 생성](#how-creating-apps-creating)한 다음 CMK를 적용해야 합니다. CMK 사용에 관한 자세한 내용은 [Amazon Managed Service for Apache Flink의 키 관리](key-management-flink.md) 섹션을 참조하세요.

## Managed Service for Apache Flink 애플리케이션 시작
<a name="how-creating-apps-starting"></a>

애플리케이션 코드를 구축하고, S3에 업로드하고, Managed Service for Apache Flink 애플리케이션을 생성한 후 애플리케이션을 시작합니다. Managed Service for Apache Flink 애플리케이션을 시작하는 데 일반적으로 몇 분이 걸립니다.

애플리케이션을 시작하려면 다음 방법 중 하나를 사용합니다.
+ ** AWS 콘솔을 사용하여 Managed Service for Apache Flink 애플리케이션을 시작합니다.** AWS 콘솔의 애플리케이션 페이지에서 **실행**을 선택하여 애플리케이션을 실행할 수 있습니다.
+ ** AWS API를 사용하여 Managed Service for Apache Flink 애플리케이션을 시작합니다.** [StartApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_StartApplication.html) 작업을 사용하여 애플리케이션을 실행할 수 있습니다.

## Managed Service for Apache Flink 애플리케이션 확인
<a name="how-creating-apps-verifying"></a>

다음과 같은 방법으로 애플리케이션이 작동하는지 확인할 수 있습니다.
+ **CloudWatch Logs 사용:** CloudWatch Logs 및 CloudWatch Logs Insights를 사용하여 애플리케이션이 제대로 실행되고 있는지 확인할 수 있습니다. Managed Service for Apache Flink 애플리케이션과 함께 CloudWatch Logs를 사용하는 방법에 대한 자세한 내용을 알아보려면 [Amazon Managed Service for Apache Flink의 로깅 및 모니터링](monitoring-overview.md) 섹션을 참조하십시오.
+ **CloudWatch 지표 사용:** CloudWatch 지표를 사용하여 애플리케이션의 활동 또는 애플리케이션이 입력 또는 출력에 사용하는 리소스(예: Kinesis 스트림, Firehose 스트림 또는 Amazon S3 버킷)에서의 활동을 모니터링할 수 있습니다. CloudWatch 지표에 대한 자세한 내용을 알아보려면 Amazon CloudWatch 사용자 가이드의 [지표 작업](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html)을 참조하세요.
+ **출력 위치 모니터링:** 애플리케이션이 특정 위치(예: Amazon S3 버킷 또는 데이터베이스)에 출력을 기록하는 경우 해당 위치에서 기록된 데이터를 모니터링할 수 있습니다.

# Managed Service for Apache Flink 애플리케이션의 시스템 롤백 활성화
<a name="how-system-rollbacks"></a>

시스템 롤백 기능으로 Amazon Managed Service for Apache Flink에서 실행 중인 Apache Flink 애플리케이션의 가용성을 더욱 높일 수 있습니다. 이 구성을 선택하면 `UpdateApplication` 또는 `autoscaling`과 같은 작업에서 코드나 구성 버그가 발생할 경우 서비스가 애플리케이션을 이전에 실행되던 버전으로 자동으로 되돌릴 수 있습니다.

**참고**  
시스템 롤백 기능을 사용하려면 애플리케이션을 업데이트하여 옵트인해야 합니다. 기존 애플리케이션은 기본적으로 시스템 롤백을 자동으로 사용하지 않습니다.

## 작동 방식
<a name="how-rollback-works"></a>

업데이트나 스케일링 작업과 같은 애플리케이션 작업을 시작하면 Amazon Managed Service for Apache Flink는 먼저 해당 작업을 실행하려고 시도합니다. 코드 버그나 권한 부족 등으로 작업의 성공을 방해하는 문제가 감지되면 서비스는 자동으로 `RollbackApplication` 작업을 시작합니다.

롤백은 애플리케이션을 이전에 정상적으로 실행되던 버전과 그에 연관된 애플리케이션 상태로 복원하려고 시도합니다. 롤백이 성공하면 애플리케이션이 이전 버전을 사용하여 가동 중지 시간을 최소화하면서 데이터를 계속 처리합니다. 자동 롤백도 실패할 경우 Amazon Managed Service for Apache Flink는 애플리케이션을 `READY` 상태로 전환하여 오류를 수정하고 작업을 다시 시도하는 등 필요한 추가 조치를 수행할 수 있도록 합니다.

자동 시스템 롤백을 사용하려면 옵트인해야 합니다. 이 시점 이후에는 콘솔 또는 API를 사용해 애플리케이션의 모든 작업에 대해 이 기능을 활성화할 수 있습니다.

`UpdateApplication` 작업을 위한 다음 예제 요청은 애플리케이션에 대한 시스템 롤백을 활성화합니다.

```
{
   "ApplicationName": "MyApplication",
   "CurrentApplicationVersionId": 1,
   "ApplicationConfigurationUpdate": { 
      "ApplicationSystemRollbackConfigurationUpdate": { 
         "RollbackEnabledUpdate": "true"
       }
    }
}
```

## 자동 시스템 롤백에 대한 일반적인 시나리오 검토
<a name="common-scenarios"></a>

다음 시나리오는 자동 시스템 롤백이 유용한 경우를 보여줍니다.
+ **애플리케이션 업데이트:** 기본 메서드를 통해 Flink 작업을 초기화할 때 버그가 있는 새 코드로 애플리케이션을 업데이트한 경우 자동 롤백 기능을 통해 이전에 정상적으로 실행되던 버전으로 복원할 수 있습니다. 시스템 롤백이 도움이 되는 업데이트 시나리오는 다음과 같습니다.
  + 애플리케이션이 [maxParallelism](https://docs.aws.amazon.com/managed-flink/latest/java/how-scaling.html#how-scaling-auto)보다 높은 병렬 처리로 실행되도록 업데이트되는 경우.
  + VPC 애플리케이션에서 잘못된 서브넷으로 업데이트되어 Flink 작업 스타트업 시 실패가 발생하는 경우.
+ **Flink 버전 업그레이드:** 새로운 Apache Flink 버전으로 업그레이드했으나 업그레이드된 애플리케이션에서 스냅샷 호환성 문제가 발생하면 시스템 롤백을 통해 이전 Flink 버전으로 자동으로 되돌릴 수 있습니다.
+ **AutoScaling:** 애플리케이션 스케일 업 시 스냅샷과 Flink 작업 그래프 간 연산자 불일치로 인해 세이브포인트 복원이 실패하는 경우.

## 시스템 롤백을 위한 운영 API 사용
<a name="operation-apis"></a>

Amazon Managed Service for Apache Flink은 더 나은 가시성을 위해 장애 및 관련 시스템 롤백을 추적할 수 있는 두 가지 애플리케이션 운영 관련 API를 제공합니다.

`ListApplicationOperations`

이 API는 `UpdateApplication`, `Maintenance`, `RollbackApplication` 등을 포함한 애플리케이션에서 수행된 모든 작업을 최신 순으로 나열합니다. `ListApplicationOperations` 작업을 위한 다음 예제 요청은 애플리케이션의 처음 10개 작업을 나열합니다.

```
{
   "ApplicationName": "MyApplication",
   "Limit": 10
}
```

`ListApplicationOperations`를 위한 다음 예제 요청은 목록을 애플리케이션의 이전 업데이트로 필터링하는 데 도움이 됩니다.

```
{
   "ApplicationName": "MyApplication",
   "operation": "UpdateApplication"
}
```

`DescribeApplicationOperation`

이 API는 `ListApplicationOperations`에서 나열된 특정 작업에 대한 상세 정보를 제공하며 해당하는 경우 실패 이유도 포함합니다. `DescribeApplicationOperation` 작업을 위한 다음 예제 요청은 애플리케이션 작업에 관한 세부 정보를 나열합니다.

```
{
   "ApplicationName": "MyApplication",
   "OperationId": "xyzoperation"
}
```

문제 해결 정보는 [시스템 롤백 모범 사례](troubleshooting-system-rollback.md)를 참조하세요.