Apache Flink용 관리 서비스의 이전 버전 정보 - Managed Service for Apache Flink

Amazon Managed Service for Apache Flink는 이전에 Amazon Kinesis Data Analytics for Apache Flink로 알려졌습니다.

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

Apache Flink용 관리 서비스의 이전 버전 정보

참고

아파치 플링크 커뮤니티는 아파치 플링크 버전 1.6, 1.8, 1.11을 3년 넘게 지원하지 않았습니다. 2024년 11월 5일에 Apache Flink용 아마존 매니지드 서비스에서 이러한 버전을 더 이상 사용하지 않을 계획입니다. 이 날짜부터 이러한 Flink 버전에 대한 새 애플리케이션을 만들 수 없습니다. 지금은 기존 애플리케이션을 계속 실행할 수 있습니다. Apache Flink용 Amazon Managed Service의 인플레이스 버전 업그레이드 기능을 사용하여 애플리케이션을 안전하게 업그레이드할 수 있습니다. 자세한 내용은 을 참조하십시오. 아파치 플링크의 인플레이스 버전 업그레이드

아파치 플링크 버전 1.15.21.13.2는 아파치 플링크용 관리형 서비스에서 지원되지만 아파치 플링크 커뮤니티에서는 더 이상 지원하지 않습니다.

아파치 플링크 Kinesis Streams 커넥터를 이전 아파치 플링크 버전과 함께 사용하기

Apache Flink Kinesis Streams 커넥터는 버전 1.11 이전의 Apache Flink에 포함되지 않았습니다. 애플리케이션에서 Apache Flink Kinesis 커넥터를 이전 버전의 Apache Flink와 함께 사용하려면 애플리케이션에서 사용하는 Apache Flink 버전을 다운로드, 컴파일 및 설치해야 합니다. 이 커넥터는 애플리케이션 소스로 사용되는 Kinesis 스트림의 데이터를 사용하거나 애플리케이션 출력에 사용되는 Kinesis 스트림에 데이터를 쓰는 데 사용됩니다.

참고

KPL 버전 0.14.0 이상으로 커넥터를 구축하고 있는지 확인하세요.

Apache Flink 버전 1.8.2 소스 코드를 다운로드하고 설치하려면 다음을 수행하세요.

  1. Apache Maven이 설치되어 있고 JAVA_HOME 환경 변수가 JRE가 아닌 JDK인지 확인하세요. 다음 명령을 사용하여 Apache Maven 설치를 테스트할 수 있습니다.

    mvn -version
  2. Apache Flink 버전 1.8.2 소스 코드를 다운로드하세요.

    wget https://archive.apache.org/dist/flink/flink-1.8.2/flink-1.8.2-src.tgz
  3. Apache Flink 소스 코드 압축 해제:

    tar -xvf flink-1.8.2-src.tgz
  4. Apache Flink 소스 코드 디렉토리로 변경:

    cd flink-1.8.2
  5. Apache Flink 컴파일 및 설치:

    mvn clean install -Pinclude-kinesis -DskipTests
    참고

    Microsoft Windows에서 Flink를 컴파일하는 경우 -Drat.skip=true 파라미터를 추가해야 합니다.

아파치 플링크 1.8.2를 이용한 애플리케이션 구축

이 섹션에는 Apache Flink 1.8.2와 작동되는 Managed Service for Apache Flink 애플리케이션을 구축하는 데 사용하는 구성 요소에 대한 정보가 포함되어 있습니다.

Managed Service for Apache Flink 애플리케이션에 다음 구성 요소 버전을 사용하세요.

구성 요소 버전
Java 1.8 (권장)
Apache Flink 1.8.2
플링크 런타임을 위한 아파치 플링크용 매니지드 서비스 () aws-kinesisanalytics-runtime 1.0.1
아파치 플링크 플링크 커넥터 관리 서비스 () aws-kinesisanalytics-flink 1.0.1
Apache Maven 3.1

Apache Flink 1.8.2를 사용하여 애플리케이션을 컴파일하려면 다음 파라미터를 사용하여 Maven을 실행하세요.

mvn package -Dflink.version=1.8.2

Apache Flink 버전 1.8.2를 사용하는 Managed Service for Apache Flink 애플리케이션의 pom.xml 파일 예는 Managed Service for Apache Flink 1.8.2 시작하기 애플리케이션을 참조하세요.

Managed Service for Apache Flink 애플리케이션의 애플리케이션 코드를 구축하고 사용하는 방법에 대한 자세한 내용을 알아보려면 애플리케이션 생성 섹션을 참조하세요.

아파치 플링크를 이용한 애플리케이션 구축 1.6.2

이 섹션에는 Apache Flink 1.6.2와 작동하는 Managed Service for Apache Flink 애플리케이션을 구축하는 데 사용하는 구성 요소에 대한 정보가 포함되어 있습니다.

Managed Service for Apache Flink 애플리케이션에 다음 구성 요소 버전을 사용하세요.

구성 요소 버전
Java 1.8 (권장)
AWS 자바 SDK 1.11.379
Apache Flink 1.6.2
플링크 런타임을 위한 아파치 플링크용 매니지드 서비스 () aws-kinesisanalytics-runtime 1.0.1
아파치 플링크 플링크 커넥터 관리 서비스 () aws-kinesisanalytics-flink 1.0.1
Apache Maven 3.1
Apache Beam Apache Flink 1.6.2에서는 지원되지 않습니다.
참고

Managed Service for Apache Flink 런타임 버전 1.0.1을 사용하는 경우 애플리케이션 코드를 컴파일할 때 -Dflink.version 파라미터를 사용하지 않고 pom.xml 파일에 Apache Flink 버전을 지정합니다.

Flink 버전 1.6.2를 사용하는 Managed Service for Apache Flink 애플리케이션의 pom.xml 파일 예는 Managed Service for Apache Flink 1.6.2 시작하기 애플리케이션을 참조하세요.

Managed Service for Apache Flink 애플리케이션의 애플리케이션 코드를 구축하고 사용하는 방법에 대한 자세한 내용을 알아보려면 애플리케이션 생성 섹션을 참조하세요.

애플리케이션 업그레이드

Apache Flink용 Amazon 관리형 서비스 애플리케이션의 Apache Flink 버전을 업그레이드하려면, SDK 또는 를 사용하여 인플레이스 Apache Flink 버전 업그레이드 기능을 사용하십시오. AWS CLI AWS AWS CloudFormation AWS Management Console자세한 정보는 아파치 플링크의 인플레이스 버전 업그레이드을 참조하세요.

이 기능은 Apache Flink용 Amazon Managed Service for Apache Flink와 함께 사용하는 모든 기존 애플리케이션에서 사용할 READYRUNNING 있습니다.

아파치 플링크 1.6.2 및 1.8.2에서 사용 가능한 커넥터

Apache Flink 프레임워크에는 다양한 소스의 데이터에 액세스하기 위한 커넥터가 포함되어 있습니다.

시작하기: 플링크 1.13.2

이 섹션에서는 Apache Flink용 관리형 서비스 및 API의 기본 개념을 소개합니다. DataStream 애플리케이션 생성 및 테스트에 사용할 수 있는 옵션에 대해 설명합니다. 또한 이 가이드의 자습서를 완료하고 첫 번째 애플리케이션을 만드는 데 필요한 도구를 설치하는 방법에 대한 지침도 제공합니다.

Apache Flink 애플리케이션용 매니지드 서비스의 구성 요소

Managed Service for Apache Flink 애플리케이션은 데이터를 처리하기 위해 Apache Flink 런타임을 사용하여 입력을 처리하고 출력을 생성하는 Java/Apache Maven 또는 Scala 애플리케이션을 사용합니다.

Managed Service for Apache Flink 애플리케이션에는 다음 구성 요소가 있습니다.

  • 런타임 속성: 애플리케이션 코드를 다시 컴파일하지 않고도 런타임 속성을 사용하여 애플리케이션을 구성할 수 있습니다.

  • 소스: 애플리케이션은 소스를 사용하여 데이터를 소비합니다. 소스 커넥터는 Kinesis 데이터 스트림, Amazon S3 버킷 등에서 데이터를 읽습니다. 자세한 내용을 알아보려면 소스 섹션을 참조하세요.

  • 연산자: 애플리케이션은 하나 이상의 연산자를 사용하여 데이터를 처리합니다. 연산자는 데이터를 변환, 강화 또는 집계할 수 있습니다. 자세한 내용을 알아보려면 DataStream API 연산자 섹션을 참조하세요.

  • 싱크: 애플리케이션은 싱크를 사용하여 외부 소스에 데이터를 생성합니다. 싱크 커넥터는 Kinesis 데이터 스트림, Firehose 스트림, Amazon S3 버킷 등에 데이터를 씁니다. 자세한 정보는 싱크을 참조하세요.

애플리케이션 코드를 생성, 컴파일 및 패키징한 후 Amazon Simple Storage Service (Amazon S3) 버킷에 코드 패키지를 업로드합니다. 그런 다음 Managed Service for Apache Flink 애플리케이션을 생성합니다. 코드 패키지 위치, Kinesis 데이터 스트림을 스트리밍 데이터 소스로 전달하고, 일반적으로 애플리케이션의 처리된 데이터를 수신하는 스트리밍 또는 파일 위치를 전달합니다.

연습을 완료하기 위한 사전 요구 사항

이 가이드의 단계를 완료하려면 다음이 필요합니다.

시작하려면 AWS 계정을 설정하고 관리자 사용자를 생성합니다. 섹션으로 이동하십시오.

1단계: AWS 계정 설정 및 관리자 사용자 생성

가입하세요. AWS 계정

계정이 없는 경우 다음 단계를 완료하여 계정을 만드세요. AWS 계정

가입하려면 AWS 계정
  1. https://portal.aws.amazon.com/billing/signup을 엽니다.

  2. 온라인 지시 사항을 따릅니다.

    등록 절차 중 전화를 받고 전화 키패드로 확인 코드를 입력하는 과정이 있습니다.

    에 AWS 계정가입하면 AWS 계정 루트 사용자a가 생성됩니다. 루트 사용자에게는 계정의 모든 AWS 서비스 및 리소스에 액세스할 권한이 있습니다. 보안 모범 사례는 사용자에게 관리 액세스 권한을 할당하고, 루트 사용자만 사용하여 루트 사용자 액세스 권한이 필요한 작업을 수행하는 것입니다.

AWS 가입 절차가 완료된 후 확인 이메일을 보냅니다. 언제든지 https://aws.amazon.com/으로 이동하고 내 계정을 선택하여 현재 계정 활동을 보고 계정을 관리할 수 있습니다.

관리자 액세스 권한이 있는 사용자 생성

등록한 AWS 계정후에는 일상적인 작업에 루트 사용자를 사용하지 않도록 관리 사용자를 보호하고 AWS IAM Identity Center활성화하고 생성하십시오 AWS 계정 루트 사용자.

보안을 유지하세요 AWS 계정 루트 사용자
  1. 루트 사용자를 선택하고 AWS 계정 이메일 주소를 입력하여 계정 AWS Management Console소유자로 로그인합니다. 다음 페이지에서 비밀번호를 입력합니다.

    루트 사용자를 사용하여 로그인하는 데 도움이 필요하면 AWS 로그인 User Guide루트 사용자로 로그인을 참조하십시오.

  2. 루트 사용자의 다중 인증(MFA)을 활성화합니다.

    지침은 IAM 사용 설명서의 AWS 계정 루트 사용자 (콘솔) 에 대한 가상 MFA 디바이스 활성화를 참조하십시오.

관리자 액세스 권한이 있는 사용자 생성
  1. IAM Identity Center를 활성화합니다.

    지침은 AWS IAM Identity Center 사용 설명서AWS IAM Identity Center설정을 참조하세요.

  2. IAM Identity Center에서 사용자에게 관리 액세스 권한을 부여합니다.

    를 ID 소스로 사용하는 방법에 대한 자습서는 사용 설명서의 기본값으로 IAM Identity Center 디렉터리사용자 액세스 구성을 참조하십시오. IAM Identity Center 디렉터리 AWS IAM Identity Center

관리 액세스 권한이 있는 사용자로 로그인
추가 사용자에게 액세스 권한 할당
  1. IAM Identity Center에서 최소 권한 적용 모범 사례를 따르는 권한 세트를 생성합니다.

    지침은AWS IAM Identity Center 사용 설명서의 Create a permission set를 참조하세요.

  2. 사용자를 그룹에 할당하고, 그룹에 Single Sign-On 액세스 권한을 할당합니다.

    지침은AWS IAM Identity Center 사용 설명서의 Add groups를 참조하세요.

프로그래밍 방식 액세스 권한 부여

사용자가 AWS 외부 사용자와 상호 작용하려는 경우 프로그래밍 방식의 액세스가 필요합니다. AWS Management Console프로그래밍 방식의 액세스 권한을 부여하는 방법은 액세스하는 사용자 유형에 따라 다릅니다. AWS

사용자에게 프로그래밍 방식 액세스 권한을 부여하려면 다음 옵션 중 하나를 선택합니다.

프로그래밍 방식 액세스가 필요한 사용자는 누구인가요? To 액세스 권한을 부여하는 사용자

작업 인력 ID

(IAM Identity Center가 관리하는 사용자)

임시 자격 증명을 사용하여 AWS CLI, AWS SDK 또는 API에 대한 프로그래밍 요청에 서명할 수 있습니다. AWS

사용하고자 하는 인터페이스에 대한 지침을 따릅니다.

IAM 임시 자격 증명을 사용하여 AWS CLI, AWS SDK 또는 API에 대한 프로그래밍 방식 요청에 서명할 수 있습니다. AWS IAM 사용 설명서의 AWS 리소스와 함께 임시 자격 증명 사용의 지침을 따르십시오.
IAM

(권장되지 않음)

장기 자격 증명을 사용하여 AWS CLI, AWS SDK 또는 API에 대한 프로그래밍 요청에 서명하십시오. AWS

사용하고자 하는 인터페이스에 대한 지침을 따릅니다.

다음 단계

AWS Command Line Interface (AWS CLI) 를 설정합니다.

다음 단계

2단계: () 설정 AWS Command Line InterfaceAWS CLI

2단계: () 설정 AWS Command Line InterfaceAWS CLI

이 단계에서는 Apache Flink용 관리 서비스와 함께 사용하도록 AWS CLI 를 다운로드하고 구성합니다.

참고

이 가이드의 시작하기 연습에서는 해당 계정에서 관리자 자격 증명(adminuser)을 사용하여 작업을 수행한다고 가정합니다.

참고

이미 AWS CLI 설치되어 있는 경우 최신 기능을 사용하려면 업그레이드해야 할 수 있습니다. 자세한 내용을 알아보려면 AWS Command Line Interface 사용자 가이드에서 AWS Command Line Interface설치를 참조하세요. 의 버전을 확인하려면 다음 명령을 실행합니다. AWS CLI

aws --version

이 자습서의 연습에는 다음 AWS CLI 버전 이상이 필요합니다.

aws-cli/1.16.63
설정하려면 AWS CLI
  1. AWS CLI를 다운로드하고 구성합니다. 관련 지침은 AWS Command Line Interface 사용 설명서에서 다음 토픽을 참조하세요.

  2. AWS CLI config파일에 관리자 사용자의 이름이 지정된 프로필을 추가합니다. 이 프로필은 AWS CLI 명령을 실행할 때 사용합니다. 프로파일 명명에 대한 자세한 설명은AWS Command Line Interface 사용자 가이드프로파일 명명을 참조하십시오.

    [profile adminuser] aws_access_key_id = adminuser access key ID aws_secret_access_key = adminuser secret access key region = aws-region

    사용 가능한 AWS 지역 목록은 의 지역 및 엔드포인트를 참조하십시오. Amazon Web Services 일반 참조

    참고

    이 자습서의 예 코드 및 명령은 미국 서부(오레곤) 지역을 사용합니다. 다른 지역을 사용하려면 이 자습서의 코드 및 명령에서 지역을 사용하려는 지역으로 변경하십시오.

  3. 명령 프롬프트에서 다음 help 명령을 입력하여 설정을 확인하십시오:

    aws help

AWS 계정을 설정하고 나면 샘플 애플리케이션을 구성하고 end-to-end 설정을 테스트하는 다음 연습을 시도할 수 있습니다. AWS CLI

다음 단계

3단계: Apache Flink용 관리 서비스 응용 프로그램 만들기 및 실행

3단계: Apache Flink용 관리 서비스 응용 프로그램 만들기 및 실행

이 연습에서는 데이터 스트림을 소스 및 싱크로 사용하여 Managed Service for Apache Flink 애플리케이션을 만듭니다.

두 개의 Amazon Kinesis 데이터 스트림을 생성합니다.

이 연습을 위해 Managed Service for Apache Flink 애플리케이션을 생성하기 전에 두 개의 Kinesis 데이터 스트림(ExampleInputStreamExampleOutputStream)을 생성하세요. 이 애플리케이션은 애플리케이션 소스 및 대상 스트림에 대해 이러한 스트림을 사용합니다.

Amazon Kinesis 콘솔 또는 다음 AWS CLI 명령을 사용하여 이러한 스트림을 만들 수 있습니다. 콘솔 지침은 Amazon Kinesis Data Streams 개발자 가이드데이터 스트림 생성 및 업데이트를 참조하세요.

데이터 스트림 (AWS CLI)을 생성하려면
  1. 첫 번째 스트림 (ExampleInputStream) 을 생성하려면 다음 Amazon Kinesis 명령을 create-stream AWS CLI 사용하십시오.

    $ aws kinesis create-stream \ --stream-name ExampleInputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser
  2. 애플리케이션에서 출력을 쓰는 데 사용하는 두 번째 스트림을 생성하려면 동일한 명령을 실행하여 스트림 명칭을 ExampleOutputStream으로 변경합니다.

    $ aws kinesis create-stream \ --stream-name ExampleOutputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser

입력 스트림에 샘플 레코드를 작성합니다.

이 섹션에서는 Python 스크립트를 사용하여 애플리케이션에서 처리할 샘플 레코드를 스트림에 쓰기 합니다.

참고

이 섹션에서는 AWS SDK for Python (Boto)이 필요합니다.

  1. 다음 콘텐츠를 가진 stock.py이라는 파일을 생성합니다:

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { 'event_time': datetime.datetime.now().isoformat(), 'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']), 'price': round(random.random() * 100, 2)} def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey") if __name__ == '__main__': generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  2. 이 자습서의 뒷부분에서 stock.py 스크립트를 실행하여 애플리케이션으로 데이터를 전송합니다.

    $ python stock.py

Apache Flink 스트리밍 Java 코드를 다운로드하여 검토하십시오.

이 예제의 Java 애플리케이션 코드는 에서 제공됩니다. GitHub 애플리케이션 코드를 다운로드하려면 다음을 수행하세요.

  1. 다음 명령을 사용하여 원격 리포지토리를 복제합니다.

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  2. amazon-kinesis-data-analytics-java-examples/GettingStarted 디렉터리로 이동합니다.

애플리케이션 코드에 대해 다음을 유의하십시오:

  • 프로젝트 객체 모델(pom.xml) 파일에는 Managed Service for Apache Flink 라이브러리를 비롯한 애플리케이션의 구성 및 종속성에 대한 정보가 들어 있습니다.

  • BasicStreamingJob.java 파일에는 애플리케이션의 기능을 정의하는 main 메서드가 들어 있습니다.

  • 애플리케이션은 Kinesis 소스를 사용하여 소스 스트림에서 읽습니다. 다음 스니펫은 Kinesis 소스를 생성합니다.

    return env.addSource(new FlinkKinesisConsumer<>(inputStreamName, new SimpleStringSchema(), inputProperties));
  • 애플리케이션은 StreamExecutionEnvironment 객체를 사용하여 외부 리소스에 액세스하기 위한 소스 및 싱크 커넥터를 생성합니다.

  • 애플리케이션은 정적 속성을 사용하여 소스 및 싱크 커넥터를 만듭니다. 동적 애플리케이션 속성을 사용하려면 createSourceFromApplicationPropertiescreateSinkFromApplicationProperties 메서드를 사용하여 커넥터를 생성합니다. 이 메서드는 애플리케이션의 속성을 읽어 커넥터를 구성합니다.

    이러한 런타임 속성에 대한 자세한 내용을 알아보려면 런타임 속성 섹션을 참조하세요.

애플리케이션 코드를 컴파일하십시오.

이 섹션에서는 Apache Maven 컴파일러를 사용하여 애플리케이션용 Java 코드를 생성합니다. Apache Maven 및 Java Development Kit(JDK) 설치에 대한 자세한 내용을 알아보려면 연습을 완료하기 위한 사전 요구 사항을 충족하십시오. 섹션을 참조하십시오.

애플리케이션 코드를 컴파일하려면
  1. 애플리케이션 코드를 사용하려면 이를 컴파일하고 JAR 파일로 패키징합니다. 다음 두 가지 방법 중 하나로 코드를 컴파일하고 패키징할 수 있습니다:

    • 명령행 Maven 도구를 사용합니다. pom.xml 파일이 있는 디렉터리에서 다음 명령을 실행하여 JAR 파일을 생성합니다:

      mvn package -Dflink.version=1.13.2
    • 귀하의 개발 환경 사용. 자세한 내용을 알아보려면 해당 개발 환경 설명서를 참조하십시오.

      참고

      제공된 소스 코드는 Java 11의 라이브러리를 사용합니다.

    패키지를 JAR 파일로 업로드하거나 패키지를 압축하여 ZIP 파일로 업로드할 수 있습니다. 를 사용하여 애플리케이션을 생성하는 경우 코드 콘텐츠 유형 (JAR 또는 ZIP) 을 지정합니다. AWS CLI

  2. 컴파일하는 동안 오류가 발생하면 JAVA_HOME 환경 변수가 올바르게 설정되어 있는지 확인하십시오.

애플리케이션이 성공적으로 컴파일되면 다음 파일이 생성됩니다:

target/aws-kinesis-analytics-java-apps-1.0.jar

아파치 플링크 스트리밍 자바 코드를 업로드하세요.

이 섹션에서는 Amazon Simple Storage Service(Amazon S3) 버킷을 만들고 애플리케이션 코드를 업로드합니다.

애플리케이션 코드 업로드하기
  1. https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 버킷 만들기를 선택합니다.

  3. 버킷 명칭 필드에 ka-app-code-<username>을 입력합니다. 버킷 명칭에 사용자 이름 등의 접미사를 추가하여 전역적으로 고유하게 만듭니다. 다음을 선택합니다.

  4. 옵션 구성 단계에서 설정을 기본값 그대로 두고 다음을 선택합니다.

  5. 권한 설정 단계에서 설정을 기본값 그대로 두고 다음을 선택합니다.

  6. 버킷 생성을 선택합니다.

  7. Amazon S3 콘솔에서 ka-app-code- <username>버킷을 선택하고 업로드를 선택합니다.

  8. 파일 선택 단계에서 파일 추가를 선택합니다. 이전 단계에서 생성한 aws-kinesis-analytics-java-apps-1.0.jar 파일로 이동합니다. 다음을 선택합니다.

  9. 개체 정보에 대한 설정은 변경할 필요가 없으므로 업로드를 선택합니다.

이제 애플리케이션 코드가 애플리케이션에서 액세스할 수 있는 Amazon S3 버킷에 저장됩니다.

Apache Flink용 관리형 서비스 애플리케이션을 생성하고 실행합니다.

콘솔이나 AWS CLI를 사용하여 Managed Service for Apache Flink 애플리케이션을 생성하고 실행할 수 있습니다.

참고

콘솔을 사용하여 애플리케이션을 생성하면 사용자 AWS Identity and Access Management (IAM) 및 Amazon CloudWatch Logs 리소스가 자동으로 생성됩니다. 를 사용하여 애플리케이션을 생성할 때는 이러한 리소스를 별도로 생성합니다. AWS CLI

애플리케이션 (콘솔) 생성 및 실행

콘솔을 사용하여 애플리케이션을 생성, 구성, 업데이트 및 실행하려면 다음 단계를 수행하세요.

애플리케이션 생성
  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Managed Service for Apache Flink 대시보드에서 분석 애플리케이션 생성을 선택합니다.

  3. Managed Service for Apache Flink - 애플리케이션 생성 페이지에서 다음과 같이 애플리케이션 세부 정보를 제공합니다.

    • 애플리케이션 명칭MyApplication을 입력합니다.

    • 설명My java test app를 입력합니다.

    • 런타임에서 Apache Flink를 선택합니다.

    • 버전 풀다운은 Apache Flink 버전 1.13으로 그대로 두십시오.

  4. 액세스 권한에서 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  5. 애플리케이션 생성을 선택합니다.

참고

콘솔을 사용하여 Managed Service for Apache Flink 애플리케이션을 만들 때 내 애플리케이션에 대한 IAM 역할 및 정책을 둘 수 있는 옵션이 있습니다. 귀하의 애플리케이션은 이 역할 및 정책을 사용하여 종속 리소스에 액세스합니다. 이러한 IAM 리소스의 이름은 애플리케이션 명칭과 리전을 사용하여 다음과 같이 지정됩니다.

  • 정책: kinesis-analytics-service-MyApplication-us-west-2

  • 역할: kinesisanalytics-MyApplication-us-west-2

IAM 정책 편집

IAM 정책을 편집하여 Kinesis Data Streams에 액세스할 수 있는 권한을 추가합니다.

  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 여세요.

  2. 정책을 선택하세요. 이전 섹션에서 콘솔이 생성한 kinesis-analytics-service-MyApplication-us-west-2 정책을 선택합니다.

  3. 요약 페이지에서 정책 편집을 선택합니다. JSON 탭을 선택합니다.

  4. 다음 정책 예제의 강조 표시된 부분을 정책에 추가하세요. 샘플 계정 ID(012345678901)를 내 계정 ID로 바꿉니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-username/aws-kinesis-analytics-java-apps-1.0.jar" ] }, { "Sid": "DescribeLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }
애플리케이션 구성
  1. MyApplication페이지에서 구성을 선택합니다.

  2. 애플리케이션 구성 페이지에서 코드 위치를 입력합니다.

    • Amazon S3 버킷의 경우 ka-app-code-<username>를 입력합니다.

    • Amazon S3 객체 경로에는 aws-kinesis-analytics-java-apps-1.0.jar를 입력합니다.

  3. 애플리케이션 리소스에 대한 액세스 아래에서 액세스 권한의 경우 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  4. 다음을 입력합니다:

    그룹 ID
    ProducerConfigProperties flink.inputstream.initpos LATEST
    ProducerConfigProperties aws.region us-west-2
    ProducerConfigProperties AggregationEnabled false
  5. 모니터링에서 지표 수준 모니터링애플리케이션으로 설정되어 있는지 확인합니다.

  6. CloudWatch 로깅의 경우 활성화 확인란을 선택합니다.

  7. 업데이트를 선택합니다.

참고

Amazon CloudWatch 로깅을 활성화하도록 선택하면 Apache Flink용 관리형 서비스에서 로그 그룹과 로그 스트림을 자동으로 생성합니다. 이러한 리소스의 이름은 다음과 같습니다.

  • 로그 그룹: /aws/kinesis-analytics/MyApplication

  • 로그 스트림: kinesis-analytics-log-stream

애플리케이션을 실행합니다

애플리케이션을 실행하고 Apache Flink 대시보드를 연 다음 원하는 Flink 작업을 선택하면 Flink 작업 그래프를 볼 수 있습니다.

애플리케이션을 중지하십시오.

MyApplication페이지에서 중지를 선택합니다. 작업을 확인합니다.

애플리케이션 업데이트

콘솔을 사용하여 애플리케이션 속성, 모니터링 설정, 애플리케이션 JAR의 위치 또는 파일 명칭과 같은 애플리케이션 설정을 업데이트할 수 있습니다. 애플리케이션 코드를 업데이트해야 하는 경우 Amazon S3 버킷에서 애플리케이션 JAR을 다시 로드할 수도 있습니다.

MyApplication페이지에서 구성을 선택합니다. 애플리케이션 설정을 업데이트하고 업데이트를 선택합니다.

애플리케이션 생성 및 실행 (AWS CLI)

이 섹션에서는 를 사용하여 Apache Flink용 관리 서비스 애플리케이션을 만들고 실행합니다. AWS CLI Apache Flink용 관리 서비스는 kinesisanalyticsv2 AWS CLI 명령을 사용하여 Apache Flink용 관리 서비스 응용 프로그램을 만들고 이와 상호 작용합니다.

권한 정책 생성
참고

애플리케이션에 대한 권한 정책 및 역할을 생성해야 합니다. 이러한 IAM 리소스를 생성하지 않으면 애플리케이션은 해당 데이터 및 로그 스트림에 액세스할 수 없습니다.

먼저 소스 스트림에서 두 개의 명령문, 즉 read 작업에 대한 권한을 부여하는 명령문과 싱크 스트림에서 write 작업에 대한 권한을 부여하는 명령문이 있는 권한 정책을 만듭니다. 그런 다음 정책을 IAM 역할(다음 섹션에서 생성)에 연결합니다. 따라서 Managed Service for Apache Flink가 역할을 맡을 때 서비스는 소스 스트림에서 읽고 싱크 스트림에 쓸 수 있는 권한이 있습니다.

다음 코드를 사용하여 AKReadSourceStreamWriteSinkStream 권한 정책을 생성합니다. username을 애플리케이션 코드를 저장하기 위해 Amazon S3 버킷을 만들 때 사용한 사용자 이름으로 바꿉니다. Amazon 리소스 이름(ARN)의 계정 ID(012345678901)를 사용자의 계정 ID로 바꿉니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": ["arn:aws:s3:::ka-app-code-username", "arn:aws:s3:::ka-app-code-username/*" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }

권한 정책을 생성하는 step-by-step 방법에 대한 지침은 IAM 사용 설명서의 자습서: 첫 번째 고객 관리형 정책 생성 및 연결을 참조하십시오.

참고

AWS SDK for Java를 사용하여 다른 Amazon 서비스에 액세스할 수 있습니다. Managed Service for Apache Flink는 SDK에 필요한 자격 증명을 애플리케이션과 연결된 서비스 실행 IAM 역할의 자격 증명으로 자동 설정합니다. 추가 단계는 필요 없습니다.

IAM 역할 생성

이 섹션에서는 Managed Service for Apache Flink 애플리케이션이 소스 스트림을 읽고 싱크 스트림에 쓰기 위해 맡을 수 있는 IAM 역할을 생성합니다.

Managed Service for Apache Flink는 권한 없이 스트림에 액세스할 수 없습니다. IAM 역할을 통해 이러한 권한을 부여합니다. 각 IAM 역할에는 두 가지 정책이 연결됩니다. 신뢰 정책은 Managed Service for Apache Flink가 역할을 취할 수 있는 권한을 부여하고, 권한 정책은 역할을 취한 후 Managed Service for Apache Flink에서 수행할 수 있는 작업을 결정합니다.

이전 섹션에서 생성한 권한 정책을 이 역할에 연결합니다.

IAM 역할을 생성하려면
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 창에서 역할, 역할 생성을 선택합니다.

  3. 신뢰할 수 있는 유형의 자격 증명 선택에서 AWS 서비스를 선택합니다. 이 역할을 사용할 서비스 선택에서 Kinesis를 선택합니다. 사용 사례 선택에서 Kinesis Analytics를 선택합니다.

    다음: 권한을 선택합니다.

  4. 권한 정책 연결 페이지에서 다음: 검토를 선택합니다. 역할을 생성한 후에 권한 정책을 연결합니다.

  5. 역할 생성 페이지에서 역할 이름으로 MF-stream-rw-role을 입력합니다. 역할 생성을 선택합니다.

    MF-stream-rw-role이라는 새 IAM 역할이 생성되었습니다. 그런 다음 역할의 신뢰 정책 및 권한 정책을 업데이트합니다.

  6. 역할에 권한 정책을 연결합니다.

    참고

    이 연습에서는 Managed Service for Apache Flink가 이 역할을 취하여 Kinesis 데이터 스트림(소스)에서 데이터를 읽고 출력을 다른 Kinesis 데이터 스트림에 씁니다. 따라서 이전 단계 권한 정책 생성에서 생성한 정책을 연결합니다.

    1. 요약 페이지에서 권한 탭을 선택합니다.

    2. 정책 연결을 선택합니다.

    3. 검색 상자에 AKReadSourceStreamWriteSinkStream(이전 섹션에서 생성한 정책)을 입력합니다.

    4. AK ReadSourceStreamWriteSinkStream 정책을 선택하고 Attach policy (Attach policy) 를 선택합니다.

이제 애플리케이션이 리소스에 액세스하는 데 사용하는 서비스 실행 역할이 생성되었습니다. 새 역할의 ARN을 기록합니다.

역할 생성에 대한 step-by-step 지침은 IAM 사용 설명서의 IAM 역할 생성 (콘솔) 을 참조하십시오.

Apache Flink용 관리형 서비스 애플리케이션 생성
  1. 다음 JSON 코드를 create_request.json이라는 파일에 저장합니다. 샘플 역할 ARN을 이전에 생성한 역할을 위한 ARN으로 바꿉니다. 버킷 ARN 접미사(username)를 이전 섹션에서 선택한 접미사로 바꿉니다. 서비스 실행 역할의 샘플 계정 ID(012345678901)를 해당 계정 ID로 바꿉니다.

    { "ApplicationName": "test", "ApplicationDescription": "my java test app", "RuntimeEnvironment": "FLINK-1_15", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username", "FileKey": "aws-kinesis-analytics-java-apps-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "flink.stream.initpos" : "LATEST", "aws.region" : "us-west-2", "AggregationEnabled" : "false" } }, { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2" } } ] } } }
  2. 위의 요청과 함께 CreateApplication 작업을 실행하여 애플리케이션을 생성합니다.

    aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json

애플리케이션이 생성되었습니다. 다음 단계에서는 애플리케이션을 시작합니다.

애플리케이션 시작

이 섹션에서는 StartApplication 작업을 사용하여 애플리케이션을 시작합니다.

애플리케이션을 시작하려면
  1. 다음 JSON 코드를 start_request.json이라는 파일에 저장합니다.

    { "ApplicationName": "test", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
  2. 위의 요청과 함께 StartApplication 작업을 실행하여 애플리케이션을 시작합니다.

    aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json

애플리케이션이 실행됩니다. Amazon CloudWatch 콘솔에서 Apache Flink용 관리형 서비스 지표를 확인하여 애플리케이션이 작동하는지 확인할 수 있습니다.

애플리케이션 중지

이 섹션에서는 StopApplication 작업을 사용하여 애플리케이션을 중지합니다.

애플리케이션을 중지하려면
  1. 다음 JSON 코드를 stop_request.json이라는 파일에 저장합니다.

    { "ApplicationName": "test" }
  2. 다음 요청과 함께 StopApplication 작업을 실행하여 애플리케이션을 중지합니다.

    aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json

애플리케이션이 중지됩니다.

CloudWatch 로깅 옵션 추가

를 AWS CLI 사용하여 Amazon CloudWatch 로그 스트림을 애플리케이션에 추가할 수 있습니다. 애플리케이션에서 CloudWatch 로그를 사용하는 방법에 대한 자세한 내용은 을 참조하십시오애플리케이션 로깅 설정.

환경 속성 업데이트

이 섹션에서는 애플리케이션 코드를 다시 컴파일하지 않고도 UpdateApplication 작업을 사용하여 애플리케이션의 환경 속성을 변경할 수 있습니다. 이 예제에서는 원본 스트림과 대상 스트림의 리전을 변경합니다.

애플리케이션의 환경 속성 업데이트
  1. 다음 JSON 코드를 update_properties_request.json이라는 파일에 저장합니다.

    {"ApplicationName": "test", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "EnvironmentPropertyUpdates": { "PropertyGroups": [ { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "flink.stream.initpos" : "LATEST", "aws.region" : "us-west-2", "AggregationEnabled" : "false" } }, { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2" } } ] } } }
  2. 이전 요청과 함께 UpdateApplication 작업을 실행하여 환경 속성을 업데이트하십시오.

    aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
애플리케이션 코드 업데이트

새 버전의 코드 패키지로 애플리케이션 코드를 업데이트해야 하는 경우 UpdateApplication AWS CLI 작업을 사용합니다.

참고

파일 이름이 같은 새 버전의 애플리케이션 코드를 로드하려면 새 객체 버전을 지정해야 합니다. Amazon S3 객체 버전 사용에 대한 자세한 내용을 알아보려면 버전 관리 활성화 또는 비활성화를 참조하세요.

를 사용하려면 Amazon S3 버킷에서 이전 코드 패키지를 삭제하고 새 버전을 업로드한 다음 동일한 Amazon S3 버킷과 객체 이름, 새 객체 버전을 지정하여 UpdateApplication 호출합니다. AWS CLI애플리케이션이 새 코드 패키지로 다시 시작됩니다.

다음 예 UpdateApplication 작업 요청은 애플리케이션 코드를 다시 로드하고 애플리케이션을 다시 시작합니다. CurrentApplicationVersionId를 현재 애플리케이션 버전으로 업데이트하세요. ListApplications 또는 DescribeApplication 작업을 사용하여 현재 애플리케이션 버전을 확인할 수 있습니다. 버킷 명칭 접미사 (<username>)를 두 개의 Amazon Kinesis 데이터 스트림을 생성합니다. 섹션에서 선택한 접미사로 업데이트합니다.

{ "ApplicationName": "test", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "ApplicationCodeConfigurationUpdate": { "CodeContentUpdate": { "S3ContentLocationUpdate": { "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username", "FileKeyUpdate": "aws-kinesis-analytics-java-apps-1.0.jar", "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU" } } } } }

다음 단계

4단계: AWS 리소스 정리

4단계: AWS 리소스 정리

이 섹션에는 시작하기 자습서에서 만든 AWS 리소스를 정리하는 절차가 포함되어 있습니다.

Apache Flink용 관리형 서비스 애플리케이션 삭제

  1. https://console.aws.amazon.com/kinesis에서 Kinesis 콘솔을 엽니다.

  2. Apache Flink용 관리형 서비스 패널에서 선택합니다. MyApplication

  3. 애플리케이션 페이지에서 삭제를 선택한 다음 삭제를 확인합니다.

Kinesis 데이터 스트림을 삭제합니다.

  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Kinesis Data Streams 패널에서 을 선택합니다. ExampleInputStream

  3. ExampleInputStream페이지에서 Kinesis 스트림 삭제를 선택한 다음 삭제를 확인합니다.

  4. Kinesis 스트림 페이지에서 를 선택하고 작업을 선택하고 삭제를 선택한 다음 삭제를 확인합니다. ExampleOutputStream

Amazon S3 객체 및 버킷을 삭제합니다.

  1. https://console.aws.amazon.com/s3/에서 S3 콘솔을 엽니다.

  2. ka-app-code- 버킷을 선택합니다. <username>

  3. 삭제를 선택한 후 버킷 이름을 입력하여 삭제를 확인합니다.

IAM 리소스를 삭제합니다.

  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 바에서 정책을 선택합니다.

  3. 필터 컨트롤에서 kinesis를 입력합니다.

  4. kinesis-analytics-service- MyApplication -us-west-2 정책을 선택합니다.

  5. 정책 작업을 선택한 후 삭제를 선택합니다.

  6. 탐색 모음에서 역할을 선택합니다.

  7. 키네시스-애널리틱스- -US-West-2 역할을 선택합니다. MyApplication

  8. 역할 삭제를 선택하고 삭제를 확인합니다.

CloudWatch 리소스 삭제하기

  1. https://console.aws.amazon.com/cloudwatch/ 에서 CloudWatch 콘솔을 엽니다.

  2. 탐색 바에서 로그를 선택합니다.

  3. MyApplication/aws/kinesis-analytics/ 로그 그룹을 선택합니다.

  4. 로그 그룹 삭제를 선택한 다음 삭제를 확인합니다.

다음 단계

5단계: 다음 절차

5단계: 다음 절차

이제 Managed Service for Apache Flink 애플리케이션을 만들고 실행했으므로 고급 Managed Service for Apache Flink 솔루션에 대해서는 다음 리소스를 참조하세요.

  • Amazon Kinesis용 AWS 스트리밍 데이터 솔루션: Amazon Kinesis용 AWS 스트리밍 데이터 솔루션은 스트리밍 데이터를 쉽게 캡처, 저장, 처리 및 전송하는 데 필요한 서비스를 자동으로 구성합니다 AWS . 이 솔루션은 스트리밍 데이터 사용 사례를 해결하기 위한 다양한 옵션을 제공합니다. Apache Flink용 관리형 서비스 옵션은 시뮬레이션된 뉴욕 택시 데이터에 대한 분석 작업을 실행하는 실제 애플리케이션을 보여주는 end-to-end 스트리밍 ETL 예제를 제공합니다. 이 솔루션은 IAM 역할 및 정책, 대시보드, 경보 등 필요한 모든 AWS 리소스를 설정합니다. CloudWatch CloudWatch

  • AWS Amazon MSK용 스트리밍 데이터 솔루션: Amazon MSK용 AWS 스트리밍 데이터 솔루션은 생산자, 스트리밍 스토리지, 소비자 및 목적지를 통해 데이터가 흐르는 AWS CloudFormation 템플릿을 제공합니다.

  • Apache Flink 및 Apache Kafka를 사용한 클릭스트림 랩: 스트리밍 스토리지로는 Apache Kafka용 Amazon Managed Streaming을 사용하고 스트림 처리에는 Managed Service for Apache Flink 애플리케이션을 사용하는 클릭스트림 사용 사례를 위한 종합적인 실습입니다.

  • Apache Flink용 Amazon Managed Service 워크숍: 이 워크숍에서는 end-to-end 스트리밍 데이터를 거의 실시간으로 수집, 분석 및 시각화하는 스트리밍 아키텍처를 구축합니다. 여러분은 뉴욕시에 있는 택시 회사의 운영을 개선하기 위해 나섰습니다. 뉴욕시에 있는 택시의 원격 측정 데이터를 거의 실시간으로 분석하여 차량 운영을 최적화합니다.

  • Flink 알아보기: 실습 교육: 확장 가능한 스트리밍 ETL, 분석 및 이벤트 기반 애플리케이션 작성을 시작하는 데 도움이 되는 공식 Apache Flink 입문 교육입니다.

    참고

    Managed Service for Apache Flink는 이 교육에 사용된 Apache Flink 버전(1.12)을 지원하지 않는다는 점에 유의하십시오. 아파치 플링크용 플링크 매니지드 서비스에서 Flink 1.15.2를 사용할 수 있습니다.

시작하기: 플링크 1.11.1 - 지원 중단

참고

아파치 플링크 커뮤니티는 아파치 플링크 버전 1.6, 1.8, 1.11을 3년 넘게 지원하지 않고 있다. 2024년 11월 5일에 Apache Flink용 아마존 매니지드 서비스에서 이러한 버전을 더 이상 사용하지 않을 계획입니다. 이 날짜부터 이러한 Flink 버전에 대한 새 애플리케이션을 만들 수 없습니다. 지금은 기존 애플리케이션을 계속 실행할 수 있습니다. Apache Flink용 Amazon Managed Service의 인플레이스 버전 업그레이드 기능을 사용하여 애플리케이션을 안전하게 업그레이드할 수 있습니다. 자세한 내용은 을 참조하십시오. 아파치 플링크의 인플레이스 버전 업그레이드

이 주제에는 Apache Flink 1.11.1을 사용하는 튜토리얼: 를 사용하여 시작하기 DataStream API 자습서 버전이 포함되어 있습니다.

이 섹션에서는 Apache Flink용 관리 서비스 및 API의 기본 개념을 소개합니다. DataStream 애플리케이션 생성 및 테스트에 사용할 수 있는 옵션에 대해 설명합니다. 또한 이 가이드의 자습서를 완료하고 첫 번째 애플리케이션을 만드는 데 필요한 도구를 설치하는 방법에 대한 지침도 제공합니다.

Apache Flink 애플리케이션용 매니지드 서비스의 구성 요소

Managed Service for Apache Flink 애플리케이션은 데이터를 처리하기 위해 Apache Flink 런타임을 사용하여 입력을 처리하고 출력을 생성하는 Java/Apache Maven 또는 Scala 애플리케이션을 사용합니다.

Managed Service for Apache Flink 애플리케이션에는 다음과 같은 구성 요소가 있습니다.

  • 런타임 속성: 애플리케이션 코드를 다시 컴파일하지 않고도 런타임 속성을 사용하여 애플리케이션을 구성할 수 있습니다.

  • 소스: 애플리케이션은 소스를 사용하여 데이터를 소비합니다. 소스 커넥터는 Kinesis 데이터 스트림, Amazon S3 버킷 등에서 데이터를 읽습니다. 자세한 내용을 알아보려면 소스 섹션을 참조하세요.

  • 연산자: 애플리케이션은 하나 이상의 연산자를 사용하여 데이터를 처리합니다. 연산자는 데이터를 변환, 강화 또는 집계할 수 있습니다. 자세한 내용을 알아보려면 DataStream API 연산자 섹션을 참조하세요.

  • 싱크: 애플리케이션은 싱크를 사용하여 외부 소스에 데이터를 생성합니다. 싱크 커넥터는 Kinesis 데이터 스트림, Firehose 스트림, Amazon S3 버킷 등에 데이터를 씁니다. 자세한 정보는 싱크을 참조하세요.

애플리케이션 코드를 생성, 컴파일 및 패키징한 후 Amazon Simple Storage Service (Amazon S3) 버킷에 코드 패키지를 업로드합니다. 그런 다음 Managed Service for Apache Flink 애플리케이션을 생성합니다. 코드 패키지 위치, Kinesis 데이터 스트림을 스트리밍 데이터 소스로 전달하고, 일반적으로 애플리케이션의 처리된 데이터를 수신하는 스트리밍 또는 파일 위치를 전달합니다.

연습을 완료하기 위한 사전 요구 사항

이 가이드의 단계를 완료하려면 다음이 필요합니다.

시작하려면 AWS 계정을 설정하고 관리자 사용자를 생성합니다. 섹션으로 이동하십시오.

1단계: AWS 계정 설정 및 관리자 사용자 생성

가입하세요. AWS 계정

계정이 없는 경우 다음 단계를 완료하여 계정을 만드세요. AWS 계정

가입하려면 AWS 계정
  1. https://portal.aws.amazon.com/billing/signup을 엽니다.

  2. 온라인 지시 사항을 따릅니다.

    등록 절차 중 전화를 받고 전화 키패드로 확인 코드를 입력하는 과정이 있습니다.

    에 AWS 계정가입하면 AWS 계정 루트 사용자a가 생성됩니다. 루트 사용자에게는 계정의 모든 AWS 서비스 및 리소스에 액세스할 권한이 있습니다. 보안 모범 사례는 사용자에게 관리 액세스 권한을 할당하고, 루트 사용자만 사용하여 루트 사용자 액세스 권한이 필요한 작업을 수행하는 것입니다.

AWS 가입 절차가 완료된 후 확인 이메일을 보냅니다. 언제든지 https://aws.amazon.com/으로 이동하고 내 계정을 선택하여 현재 계정 활동을 보고 계정을 관리할 수 있습니다.

관리자 액세스 권한이 있는 사용자 생성

등록한 AWS 계정후에는 일상적인 작업에 루트 사용자를 사용하지 않도록 관리 사용자를 보호하고 AWS IAM Identity Center활성화하고 생성하십시오 AWS 계정 루트 사용자.

보안을 유지하세요 AWS 계정 루트 사용자
  1. 루트 사용자를 선택하고 AWS 계정 이메일 주소를 입력하여 계정 AWS Management Console소유자로 로그인합니다. 다음 페이지에서 비밀번호를 입력합니다.

    루트 사용자를 사용하여 로그인하는 데 도움이 필요하면 AWS 로그인 User Guide루트 사용자로 로그인을 참조하십시오.

  2. 루트 사용자의 다중 인증(MFA)을 활성화합니다.

    지침은 IAM 사용 설명서의 AWS 계정 루트 사용자 (콘솔) 에 대한 가상 MFA 디바이스 활성화를 참조하십시오.

관리자 액세스 권한이 있는 사용자 생성
  1. IAM Identity Center를 활성화합니다.

    지침은 AWS IAM Identity Center 사용 설명서AWS IAM Identity Center설정을 참조하세요.

  2. IAM Identity Center에서 사용자에게 관리 액세스 권한을 부여합니다.

    를 ID 소스로 사용하는 방법에 대한 자습서는 사용 설명서의 기본값으로 IAM Identity Center 디렉터리사용자 액세스 구성을 참조하십시오. IAM Identity Center 디렉터리 AWS IAM Identity Center

관리 액세스 권한이 있는 사용자로 로그인
추가 사용자에게 액세스 권한 할당
  1. IAM Identity Center에서 최소 권한 적용 모범 사례를 따르는 권한 세트를 생성합니다.

    지침은AWS IAM Identity Center 사용 설명서의 Create a permission set를 참조하세요.

  2. 사용자를 그룹에 할당하고, 그룹에 Single Sign-On 액세스 권한을 할당합니다.

    지침은AWS IAM Identity Center 사용 설명서의 Add groups를 참조하세요.

프로그래밍 방식 액세스 권한 부여

사용자가 AWS 외부 사용자와 상호 작용하려는 경우 프로그래밍 방식의 액세스가 필요합니다. AWS Management Console프로그래밍 방식의 액세스 권한을 부여하는 방법은 액세스하는 사용자 유형에 따라 다릅니다. AWS

사용자에게 프로그래밍 방식 액세스 권한을 부여하려면 다음 옵션 중 하나를 선택합니다.

프로그래밍 방식 액세스가 필요한 사용자는 누구인가요? To 액세스 권한을 부여하는 사용자

작업 인력 ID

(IAM Identity Center가 관리하는 사용자)

임시 자격 증명을 사용하여 AWS CLI, AWS SDK 또는 API에 대한 프로그래밍 요청에 서명할 수 있습니다. AWS

사용하고자 하는 인터페이스에 대한 지침을 따릅니다.

IAM 임시 자격 증명을 사용하여 AWS CLI, AWS SDK 또는 API에 대한 프로그래밍 방식 요청에 서명할 수 있습니다. AWS IAM 사용 설명서의 AWS 리소스와 함께 임시 자격 증명 사용의 지침을 따르십시오.
IAM

(권장되지 않음)

장기 자격 증명을 사용하여 AWS CLI, AWS SDK 또는 API에 대한 프로그래밍 요청에 서명하십시오. AWS

사용하고자 하는 인터페이스에 대한 지침을 따릅니다.

다음 단계

AWS Command Line Interface (AWS CLI) 를 설정합니다.

2단계: AWS Command Line Interface (AWS CLI) 설정

이 단계에서는 Apache Flink용 관리 서비스와 함께 사용하도록 AWS CLI 를 다운로드하고 구성합니다.

참고

이 가이드의 시작하기 연습에서는 해당 계정에서 관리자 자격 증명(adminuser)을 사용하여 작업을 수행한다고 가정합니다.

참고

이미 AWS CLI 설치되어 있는 경우 최신 기능을 사용하려면 업그레이드해야 할 수 있습니다. 자세한 내용을 알아보려면 AWS Command Line Interface 사용자 가이드에서 AWS Command Line Interface설치를 참조하세요. 의 버전을 확인하려면 다음 명령을 실행합니다. AWS CLI

aws --version

이 자습서의 연습에는 다음 AWS CLI 버전 이상이 필요합니다.

aws-cli/1.16.63
설정하려면 AWS CLI
  1. AWS CLI를 다운로드하고 구성합니다. 관련 지침은 AWS Command Line Interface 사용 설명서에서 다음 토픽을 참조하세요.

  2. AWS CLI config파일에 관리자 사용자의 이름이 지정된 프로필을 추가합니다. 이 프로필은 AWS CLI 명령을 실행할 때 사용합니다. 프로파일 명명에 대한 자세한 설명은AWS Command Line Interface 사용자 가이드프로파일 명명을 참조하십시오.

    [profile adminuser] aws_access_key_id = adminuser access key ID aws_secret_access_key = adminuser secret access key region = aws-region

    사용 가능한 AWS 지역 목록은 의 지역 및 엔드포인트를 참조하십시오. Amazon Web Services 일반 참조

    참고

    이 자습서의 예 코드 및 명령은 미국 서부(오레곤) 지역을 사용합니다. 다른 지역을 사용하려면 이 자습서의 코드 및 명령에서 지역을 사용하려는 지역으로 변경하십시오.

  3. 명령 프롬프트에서 다음 help 명령을 입력하여 설정을 확인하십시오:

    aws help

AWS 계정을 설정하고 나면 샘플 애플리케이션을 구성하고 end-to-end 설정을 테스트하는 다음 연습을 시도할 수 있습니다. AWS CLI

다음 단계

3단계: Apache Flink용 관리 서비스 응용 프로그램 만들기 및 실행

3단계: Apache Flink용 관리 서비스 응용 프로그램 만들기 및 실행

이 연습에서는 데이터 스트림을 소스 및 싱크로 사용하여 Managed Service for Apache Flink 애플리케이션을 만듭니다.

두 개의 Amazon Kinesis 데이터 스트림을 생성합니다.

이 연습을 위해 Managed Service for Apache Flink 애플리케이션을 생성하기 전에 두 개의 Kinesis 데이터 스트림(ExampleInputStreamExampleOutputStream)을 생성하세요. 이 애플리케이션은 애플리케이션 소스 및 대상 스트림에 대해 이러한 스트림을 사용합니다.

Amazon Kinesis 콘솔 또는 다음 AWS CLI 명령을 사용하여 이러한 스트림을 만들 수 있습니다. 콘솔 지침은 Amazon Kinesis Data Streams 개발자 가이드데이터 스트림 생성 및 업데이트를 참조하세요.

데이터 스트림 (AWS CLI)을 생성하려면
  1. 첫 번째 스트림 (ExampleInputStream) 을 생성하려면 다음 Amazon Kinesis 명령을 create-stream AWS CLI 사용하십시오.

    $ aws kinesis create-stream \ --stream-name ExampleInputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser
  2. 애플리케이션에서 출력을 쓰는 데 사용하는 두 번째 스트림을 생성하려면 동일한 명령을 실행하여 스트림 명칭을 ExampleOutputStream으로 변경합니다.

    $ aws kinesis create-stream \ --stream-name ExampleOutputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser

입력 스트림에 샘플 레코드를 작성합니다.

이 섹션에서는 Python 스크립트를 사용하여 애플리케이션에서 처리할 샘플 레코드를 스트림에 쓰기 합니다.

참고

이 섹션에서는 AWS SDK for Python (Boto)이 필요합니다.

  1. 다음 콘텐츠를 가진 stock.py이라는 파일을 생성합니다:

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { "EVENT_TIME": datetime.datetime.now().isoformat(), "TICKER": random.choice(["AAPL", "AMZN", "MSFT", "INTC", "TBV"]), "PRICE": round(random.random() * 100, 2), } def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey" ) if __name__ == "__main__": generate(STREAM_NAME, boto3.client("kinesis"))
  2. 이 자습서의 뒷부분에서 stock.py 스크립트를 실행하여 애플리케이션으로 데이터를 전송합니다.

    $ python stock.py

Apache Flink 스트리밍 Java 코드를 다운로드하여 검토하십시오.

이 예제의 Java 애플리케이션 코드는 에서 제공됩니다. GitHub 애플리케이션 코드를 다운로드하려면 다음을 수행하세요.

  1. 다음 명령을 사용하여 원격 리포지토리를 복제합니다.

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  2. amazon-kinesis-data-analytics-java-examples/GettingStarted 디렉터리로 이동합니다.

애플리케이션 코드에 대해 다음을 유의하십시오:

  • 프로젝트 객체 모델(pom.xml) 파일에는 Managed Service for Apache Flink 라이브러리를 비롯한 애플리케이션의 구성 및 종속성에 대한 정보가 들어 있습니다.

  • BasicStreamingJob.java 파일에는 애플리케이션의 기능을 정의하는 main 메서드가 들어 있습니다.

  • 애플리케이션은 Kinesis 소스를 사용하여 소스 스트림에서 읽습니다. 다음 스니펫은 Kinesis 소스를 생성합니다.

    return env.addSource(new FlinkKinesisConsumer<>(inputStreamName, new SimpleStringSchema(), inputProperties));
  • 애플리케이션은 StreamExecutionEnvironment 객체를 사용하여 외부 리소스에 액세스하기 위한 소스 및 싱크 커넥터를 생성합니다.

  • 애플리케이션은 정적 속성을 사용하여 소스 및 싱크 커넥터를 만듭니다. 동적 애플리케이션 속성을 사용하려면 createSourceFromApplicationPropertiescreateSinkFromApplicationProperties 메서드를 사용하여 커넥터를 생성합니다. 이 메서드는 애플리케이션의 속성을 읽어 커넥터를 구성합니다.

    이러한 런타임 속성에 대한 자세한 내용을 알아보려면 런타임 속성 섹션을 참조하세요.

애플리케이션 코드를 컴파일하십시오.

이 섹션에서는 Apache Maven 컴파일러를 사용하여 애플리케이션용 Java 코드를 생성합니다. Apache Maven 및 Java Development Kit(JDK) 설치에 대한 자세한 내용을 알아보려면 연습을 완료하기 위한 사전 요구 사항을 충족하십시오. 섹션을 참조하십시오.

애플리케이션 코드를 컴파일하려면
  1. 애플리케이션 코드를 사용하려면 이를 컴파일하고 JAR 파일로 패키징합니다. 다음 두 가지 방법 중 하나로 코드를 컴파일하고 패키징할 수 있습니다:

    • 명령행 Maven 도구를 사용합니다. pom.xml 파일이 있는 디렉터리에서 다음 명령을 실행하여 JAR 파일을 생성합니다:

      mvn package -Dflink.version=1.11.3
    • 귀하의 개발 환경 사용. 자세한 내용을 알아보려면 해당 개발 환경 설명서를 참조하십시오.

      참고

      제공된 소스 코드는 Java 11의 라이브러리를 사용합니다. 프로젝트의 Java 버전이 11인지 확인하십시오.

    패키지를 JAR 파일로 업로드하거나 패키지를 압축하여 ZIP 파일로 업로드할 수 있습니다. 를 사용하여 애플리케이션을 생성하는 경우 코드 콘텐츠 유형 (JAR 또는 ZIP) 을 지정합니다. AWS CLI

  2. 컴파일하는 동안 오류가 발생하면 JAVA_HOME 환경 변수가 올바르게 설정되어 있는지 확인하십시오.

애플리케이션이 성공적으로 컴파일되면 다음 파일이 생성됩니다:

target/aws-kinesis-analytics-java-apps-1.0.jar

아파치 플링크 스트리밍 자바 코드를 업로드하세요.

이 섹션에서는 Amazon Simple Storage Service(Amazon S3) 버킷을 만들고 애플리케이션 코드를 업로드합니다.

애플리케이션 코드 업로드하기
  1. https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 버킷 만들기를 선택합니다.

  3. 버킷 명칭 필드에 ka-app-code-<username>을 입력합니다. 버킷 명칭에 사용자 이름 등의 접미사를 추가하여 전역적으로 고유하게 만듭니다. 다음을 선택합니다.

  4. 옵션 구성 단계에서 설정을 기본값 그대로 두고 다음을 선택합니다.

  5. 권한 설정 단계에서 설정을 기본값 그대로 두고 다음을 선택합니다.

  6. 버킷 생성을 선택합니다.

  7. Amazon S3 콘솔에서 ka-app-code- <username>버킷을 선택하고 업로드를 선택합니다.

  8. 파일 선택 단계에서 파일 추가를 선택합니다. 이전 단계에서 생성한 aws-kinesis-analytics-java-apps-1.0.jar 파일로 이동합니다. 다음을 선택합니다.

  9. 개체 정보에 대한 설정은 변경할 필요가 없으므로 업로드를 선택합니다.

이제 애플리케이션 코드가 애플리케이션에서 액세스할 수 있는 Amazon S3 버킷에 저장됩니다.

Apache Flink용 관리형 서비스 애플리케이션을 생성하고 실행합니다.

콘솔이나 AWS CLI를 사용하여 Managed Service for Apache Flink 애플리케이션을 생성하고 실행할 수 있습니다.

참고

콘솔을 사용하여 애플리케이션을 생성하면 사용자 AWS Identity and Access Management (IAM) 및 Amazon CloudWatch Logs 리소스가 자동으로 생성됩니다. 를 사용하여 애플리케이션을 생성할 때는 이러한 리소스를 별도로 생성합니다. AWS CLI

애플리케이션 (콘솔) 생성 및 실행

콘솔을 사용하여 애플리케이션을 생성, 구성, 업데이트 및 실행하려면 다음 단계를 수행하세요.

애플리케이션 생성
  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Managed Service for Apache Flink 대시보드에서 분석 애플리케이션 생성을 선택합니다.

  3. Managed Service for Apache Flink - 애플리케이션 생성 페이지에서 다음과 같이 애플리케이션 세부 정보를 제공합니다.

    • 애플리케이션 명칭MyApplication을 입력합니다.

    • 설명My java test app를 입력합니다.

    • 런타임에서 Apache Flink를 선택합니다.

    • 버전 풀다운은 Apache Flink 버전 1.11(권장 버전)로 그대로 두십시오.

  4. 액세스 권한에서 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  5. 애플리케이션 생성을 선택합니다.

참고

콘솔을 사용하여 Managed Service for Apache Flink 애플리케이션을 만들 때 내 애플리케이션에 대한 IAM 역할 및 정책을 둘 수 있는 옵션이 있습니다. 귀하의 애플리케이션은 이 역할 및 정책을 사용하여 종속 리소스에 액세스합니다. 이러한 IAM 리소스의 이름은 애플리케이션 명칭과 리전을 사용하여 다음과 같이 지정됩니다.

  • 정책: kinesis-analytics-service-MyApplication-us-west-2

  • 역할: kinesisanalytics-MyApplication-us-west-2

IAM 정책 편집

IAM 정책을 편집하여 Kinesis Data Streams에 액세스할 수 있는 권한을 추가합니다.

  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 여세요.

  2. 정책을 선택하세요. 이전 섹션에서 콘솔이 생성한 kinesis-analytics-service-MyApplication-us-west-2 정책을 선택합니다.

  3. 요약 페이지에서 정책 편집을 선택합니다. JSON 탭을 선택합니다.

  4. 다음 정책 예제의 강조 표시된 부분을 정책에 추가하세요. 샘플 계정 ID(012345678901)를 내 계정 ID로 바꿉니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-username/aws-kinesis-analytics-java-apps-1.0.jar" ] }, { "Sid": "DescribeLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }
애플리케이션 구성
  1. MyApplication페이지에서 구성을 선택합니다.

  2. 애플리케이션 구성 페이지에서 코드 위치를 입력합니다.

    • Amazon S3 버킷의 경우 ka-app-code-<username>를 입력합니다.

    • Amazon S3 객체 경로에는 aws-kinesis-analytics-java-apps-1.0.jar를 입력합니다.

  3. 애플리케이션 리소스에 대한 액세스 아래에서 액세스 권한의 경우 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  4. 속성에서 그룹 IDProducerConfigProperties를 입력합니다.

  5. 다음 애플리케이션 속성 및 값을 입력합니다:

    그룹 ID
    ProducerConfigProperties flink.inputstream.initpos LATEST
    ProducerConfigProperties aws.region us-west-2
    ProducerConfigProperties AggregationEnabled false
  6. 모니터링에서 지표 수준 모니터링애플리케이션으로 설정되어 있는지 확인합니다.

  7. CloudWatch 로깅의 경우 활성화 확인란을 선택합니다.

  8. 업데이트를 선택합니다.

참고

Amazon CloudWatch 로깅을 활성화하도록 선택하면 Apache Flink용 관리형 서비스에서 로그 그룹과 로그 스트림을 자동으로 생성합니다. 이러한 리소스의 이름은 다음과 같습니다.

  • 로그 그룹: /aws/kinesis-analytics/MyApplication

  • 로그 스트림: kinesis-analytics-log-stream

애플리케이션을 실행합니다

애플리케이션을 실행하고 Apache Flink 대시보드를 연 다음 원하는 Flink 작업을 선택하면 Flink 작업 그래프를 볼 수 있습니다.

애플리케이션을 중지하십시오.

MyApplication페이지에서 중지를 선택합니다. 작업을 확인합니다.

애플리케이션 업데이트

콘솔을 사용하여 애플리케이션 속성, 모니터링 설정, 애플리케이션 JAR의 위치 또는 파일 명칭과 같은 애플리케이션 설정을 업데이트할 수 있습니다. 애플리케이션 코드를 업데이트해야 하는 경우 Amazon S3 버킷에서 애플리케이션 JAR을 다시 로드할 수도 있습니다.

MyApplication페이지에서 구성을 선택합니다. 애플리케이션 설정을 업데이트하고 업데이트를 선택합니다.

애플리케이션 생성 및 실행 (AWS CLI)

이 섹션에서는 를 사용하여 Apache Flink용 관리 서비스 응용 프로그램을 만들고 실행합니다. Apache Flink용 관리 서비스는 kinesisanalyticsv2 AWS CLI 명령을 사용하여 Apache Flink 응용 프로그램용 관리 서비스 응용 프로그램을 만들고 상호 작용합니다. AWS CLI

권한 정책 생성
참고

애플리케이션에 대한 권한 정책 및 역할을 생성해야 합니다. 이러한 IAM 리소스를 생성하지 않으면 애플리케이션은 해당 데이터 및 로그 스트림에 액세스할 수 없습니다.

먼저 소스 스트림에서 두 개의 명령문, 즉 read 작업에 대한 권한을 부여하는 명령문과 싱크 스트림에서 write 작업에 대한 권한을 부여하는 명령문이 있는 권한 정책을 만듭니다. 그런 다음 정책을 IAM 역할(다음 섹션에서 생성)에 연결합니다. 따라서 Managed Service for Apache Flink가 역할을 맡을 때 서비스는 소스 스트림에서 읽고 싱크 스트림에 쓸 수 있는 권한이 있습니다.

다음 코드를 사용하여 AKReadSourceStreamWriteSinkStream 권한 정책을 생성합니다. username을 애플리케이션 코드를 저장하기 위해 Amazon S3 버킷을 만들 때 사용한 사용자 이름으로 바꿉니다. Amazon 리소스 이름(ARN)의 계정 ID(012345678901)를 사용자의 계정 ID로 바꿉니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": ["arn:aws:s3:::ka-app-code-username", "arn:aws:s3:::ka-app-code-username/*" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }

권한 정책을 생성하는 step-by-step 방법에 대한 지침은 IAM 사용 설명서의 자습서: 첫 번째 고객 관리형 정책 생성 및 연결을 참조하십시오.

참고

AWS SDK for Java를 사용하여 다른 Amazon 서비스에 액세스할 수 있습니다. Managed Service for Apache Flink는 SDK에 필요한 자격 증명을 애플리케이션과 연결된 서비스 실행 IAM 역할의 자격 증명으로 자동 설정합니다. 추가 단계는 필요 없습니다.

IAM 역할 생성

이 섹션에서는 Managed Service for Apache Flink 애플리케이션이 소스 스트림을 읽고 싱크 스트림에 쓰기 위해 맡을 수 있는 IAM 역할을 생성합니다.

Managed Service for Apache Flink는 권한 없이 스트림에 액세스할 수 없습니다. IAM 역할을 통해 이러한 권한을 부여합니다. 각 IAM 역할에는 두 가지 정책이 연결됩니다. 신뢰 정책은 Managed Service for Apache Flink가 역할을 취할 수 있는 권한을 부여하고, 권한 정책은 역할을 취한 후 Managed Service for Apache Flink에서 수행할 수 있는 작업을 결정합니다.

이전 섹션에서 생성한 권한 정책을 이 역할에 연결합니다.

IAM 역할을 생성하려면
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 창에서 역할, 역할 생성을 선택합니다.

  3. 신뢰할 수 있는 유형의 자격 증명 선택에서 AWS 서비스를 선택합니다. 이 역할을 사용할 서비스 선택에서 Kinesis를 선택합니다. 사용 사례 선택에서 Kinesis Analytics를 선택합니다.

    다음: 권한을 선택합니다.

  4. 권한 정책 연결 페이지에서 다음: 검토를 선택합니다. 역할을 생성한 후에 권한 정책을 연결합니다.

  5. 역할 생성 페이지에서 역할 이름으로 MF-stream-rw-role을 입력합니다. 역할 생성을 선택합니다.

    MF-stream-rw-role이라는 새 IAM 역할이 생성되었습니다. 그런 다음 역할의 신뢰 정책 및 권한 정책을 업데이트합니다.

  6. 역할에 권한 정책을 연결합니다.

    참고

    이 연습에서는 Managed Service for Apache Flink가 이 역할을 취하여 Kinesis 데이터 스트림(소스)에서 데이터를 읽고 출력을 다른 Kinesis 데이터 스트림에 씁니다. 따라서 이전 단계 권한 정책 생성에서 생성한 정책을 연결합니다.

    1. 요약 페이지에서 권한 탭을 선택합니다.

    2. 정책 연결을 선택합니다.

    3. 검색 상자에 AKReadSourceStreamWriteSinkStream(이전 섹션에서 생성한 정책)을 입력합니다.

    4. AK ReadSourceStreamWriteSinkStream 정책을 선택하고 Attach policy (Attach policy) 를 선택합니다.

이제 애플리케이션이 리소스에 액세스하는 데 사용하는 서비스 실행 역할이 생성되었습니다. 새 역할의 ARN을 기록합니다.

역할 생성에 대한 step-by-step 지침은 IAM 사용 설명서의 IAM 역할 생성 (콘솔) 을 참조하십시오.

Apache Flink용 관리형 서비스 애플리케이션 생성
  1. 다음 JSON 코드를 create_request.json이라는 파일에 저장합니다. 샘플 역할 ARN을 이전에 생성한 역할을 위한 ARN으로 바꿉니다. 버킷 ARN 접미사(username)를 이전 섹션에서 선택한 접미사로 바꿉니다. 서비스 실행 역할의 샘플 계정 ID(012345678901)를 해당 계정 ID로 바꿉니다.

    { "ApplicationName": "test", "ApplicationDescription": "my java test app", "RuntimeEnvironment": "FLINK-1_11", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username", "FileKey": "aws-kinesis-analytics-java-apps-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "flink.stream.initpos" : "LATEST", "aws.region" : "us-west-2", "AggregationEnabled" : "false" } }, { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2" } } ] } } }
  2. 위의 요청과 함께 CreateApplication 작업을 실행하여 애플리케이션을 생성합니다.

    aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json

애플리케이션이 생성되었습니다. 다음 단계에서는 애플리케이션을 시작합니다.

애플리케이션 시작

이 섹션에서는 StartApplication 작업을 사용하여 애플리케이션을 시작합니다.

애플리케이션을 시작하려면
  1. 다음 JSON 코드를 start_request.json이라는 파일에 저장합니다.

    { "ApplicationName": "test", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
  2. 위의 요청과 함께 StartApplication 작업을 실행하여 애플리케이션을 시작합니다.

    aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json

애플리케이션이 실행됩니다. Amazon CloudWatch 콘솔에서 Apache Flink용 관리형 서비스 지표를 확인하여 애플리케이션이 작동하는지 확인할 수 있습니다.

애플리케이션을 중지하십시오.

이 섹션에서는 StopApplication 작업을 사용하여 애플리케이션을 중지합니다.

애플리케이션을 중지하려면
  1. 다음 JSON 코드를 stop_request.json이라는 파일에 저장합니다.

    { "ApplicationName": "test" }
  2. 다음 요청과 함께 StopApplication 작업을 실행하여 애플리케이션을 중지합니다.

    aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json

애플리케이션이 중지됩니다.

CloudWatch로깅 옵션 추가

를 AWS CLI 사용하여 Amazon CloudWatch 로그 스트림을 애플리케이션에 추가할 수 있습니다. 애플리케이션에서 CloudWatch 로그를 사용하는 방법에 대한 자세한 내용은 을 참조하십시오애플리케이션 로깅 설정.

환경 속성 업데이트

이 섹션에서는 애플리케이션 코드를 다시 컴파일하지 않고도 UpdateApplication 작업을 사용하여 애플리케이션의 환경 속성을 변경할 수 있습니다. 이 예제에서는 원본 스트림과 대상 스트림의 리전을 변경합니다.

애플리케이션의 환경 속성 업데이트
  1. 다음 JSON 코드를 update_properties_request.json이라는 파일에 저장합니다.

    {"ApplicationName": "test", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "EnvironmentPropertyUpdates": { "PropertyGroups": [ { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "flink.stream.initpos" : "LATEST", "aws.region" : "us-west-2", "AggregationEnabled" : "false" } }, { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2" } } ] } } }
  2. 이전 요청과 함께 UpdateApplication 작업을 실행하여 환경 속성을 업데이트하십시오.

    aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
애플리케이션 코드 업데이트

새 버전의 코드 패키지로 애플리케이션 코드를 업데이트해야 하는 경우 UpdateApplication AWS CLI 작업을 사용합니다.

참고

파일 이름이 같은 새 버전의 애플리케이션 코드를 로드하려면 새 객체 버전을 지정해야 합니다. Amazon S3 객체 버전 사용에 대한 자세한 내용을 알아보려면 버전 관리 활성화 또는 비활성화를 참조하세요.

를 사용하려면 Amazon S3 버킷에서 이전 코드 패키지를 삭제하고 새 버전을 업로드한 다음 동일한 Amazon S3 버킷과 객체 이름, 새 객체 버전을 지정하여 UpdateApplication 호출합니다. AWS CLI애플리케이션이 새 코드 패키지로 다시 시작됩니다.

다음 예 UpdateApplication 작업 요청은 애플리케이션 코드를 다시 로드하고 애플리케이션을 다시 시작합니다. CurrentApplicationVersionId를 현재 애플리케이션 버전으로 업데이트하세요. ListApplications 또는 DescribeApplication 작업을 사용하여 현재 애플리케이션 버전을 확인할 수 있습니다. 버킷 명칭 접미사 (<username>)를 두 개의 Amazon Kinesis 데이터 스트림을 생성합니다. 섹션에서 선택한 접미사로 업데이트합니다.

{ "ApplicationName": "test", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "ApplicationCodeConfigurationUpdate": { "CodeContentUpdate": { "S3ContentLocationUpdate": { "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username", "FileKeyUpdate": "aws-kinesis-analytics-java-apps-1.0.jar", "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU" } } } } }

다음 단계

4단계: AWS 리소스 정리

4단계: AWS 리소스 정리

이 섹션에는 시작하기 자습서에서 만든 AWS 리소스를 정리하는 절차가 포함되어 있습니다.

Apache Flink용 관리형 서비스 애플리케이션 삭제

  1. https://console.aws.amazon.com/kinesis에서 Kinesis 콘솔을 엽니다.

  2. Apache Flink용 관리형 서비스 패널에서 선택합니다. MyApplication

  3. 애플리케이션 페이지에서 삭제를 선택한 다음 삭제를 확인합니다.

Kinesis 데이터 스트림을 삭제합니다.

  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Kinesis Data Streams 패널에서 을 선택합니다. ExampleInputStream

  3. ExampleInputStream페이지에서 Kinesis 스트림 삭제를 선택한 다음 삭제를 확인합니다.

  4. Kinesis 스트림 페이지에서 를 선택하고 작업을 선택하고 삭제를 선택한 다음 삭제를 확인합니다. ExampleOutputStream

Amazon S3 객체 및 버킷을 삭제합니다.

  1. https://console.aws.amazon.com/s3/에서 S3 콘솔을 엽니다.

  2. ka-app-code- 버킷을 선택합니다. <username>

  3. 삭제를 선택한 후 버킷 이름을 입력하여 삭제를 확인합니다.

IAM 리소스를 삭제합니다.

  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 바에서 정책을 선택합니다.

  3. 필터 컨트롤에서 kinesis를 입력합니다.

  4. kinesis-analytics-service- MyApplication -us-west-2 정책을 선택합니다.

  5. 정책 작업을 선택한 후 삭제를 선택합니다.

  6. 탐색 모음에서 역할을 선택합니다.

  7. 키네시스-애널리틱스- -US-West-2 역할을 선택합니다. MyApplication

  8. 역할 삭제를 선택하고 삭제를 확인합니다.

CloudWatch 리소스 삭제하기

  1. https://console.aws.amazon.com/cloudwatch/ 에서 CloudWatch 콘솔을 엽니다.

  2. 탐색 바에서 로그를 선택합니다.

  3. MyApplication/aws/kinesis-analytics/ 로그 그룹을 선택합니다.

  4. 로그 그룹 삭제를 선택한 다음 삭제를 확인합니다.

다음 단계

5단계: 다음 절차

5단계: 다음 절차

이제 Managed Service for Apache Flink 애플리케이션을 만들고 실행했으므로 고급 Managed Service for Apache Flink 솔루션에 대해서는 다음 리소스를 참조하세요.

  • Amazon Kinesis용 AWS 스트리밍 데이터 솔루션: Amazon Kinesis용 AWS 스트리밍 데이터 솔루션은 스트리밍 데이터를 쉽게 캡처, 저장, 처리 및 전송하는 데 필요한 서비스를 자동으로 구성합니다 AWS . 이 솔루션은 스트리밍 데이터 사용 사례를 해결하기 위한 다양한 옵션을 제공합니다. Apache Flink용 관리형 서비스 옵션은 시뮬레이션된 뉴욕 택시 데이터에 대한 분석 작업을 실행하는 실제 애플리케이션을 보여주는 end-to-end 스트리밍 ETL 예제를 제공합니다. 이 솔루션은 IAM 역할 및 정책, 대시보드, 경보 등 필요한 모든 AWS 리소스를 설정합니다. CloudWatch CloudWatch

  • AWS Amazon MSK용 스트리밍 데이터 솔루션: Amazon MSK용 AWS 스트리밍 데이터 솔루션은 생산자, 스트리밍 스토리지, 소비자 및 목적지를 통해 데이터가 흐르는 AWS CloudFormation 템플릿을 제공합니다.

  • Apache Flink 및 Apache Kafka를 사용한 클릭스트림 랩: 스트리밍 스토리지로는 Apache Kafka용 Amazon Managed Streaming을 사용하고 스트림 처리에는 Managed Service for Apache Flink 애플리케이션을 사용하는 클릭스트림 사용 사례를 위한 종합적인 실습입니다.

  • Apache Flink용 Amazon Managed Service 워크숍: 이 워크숍에서는 end-to-end 스트리밍 데이터를 거의 실시간으로 수집, 분석 및 시각화하는 스트리밍 아키텍처를 구축합니다. 여러분은 뉴욕시에 있는 택시 회사의 운영을 개선하기 위해 나섰습니다. 뉴욕시에 있는 택시의 원격 측정 데이터를 거의 실시간으로 분석하여 차량 운영을 최적화합니다.

  • Flink 알아보기: 실습 교육: 확장 가능한 스트리밍 ETL, 분석 및 이벤트 기반 애플리케이션 작성을 시작하는 데 도움이 되는 공식 Apache Flink 입문 교육입니다.

    참고

    Managed Service for Apache Flink는 이 교육에 사용된 Apache Flink 버전(1.12)을 지원하지 않는다는 점에 유의하십시오. 아파치 플링크용 플링크 매니지드 서비스에서 Flink 1.15.2를 사용할 수 있습니다.

  • 아파치 플링크 코드 예제: 다양한 아파치 플링크 애플리케이션 예제의 GitHub 저장소입니다.

시작하기: 플링크 1.8.2 - 지원 중단

참고

아파치 플링크 커뮤니티는 아파치 플링크 버전 1.6, 1.8, 1.11을 3년 넘게 지원하지 않고 있다. 2024년 11월 5일에 Apache Flink용 아마존 매니지드 서비스에서 이러한 버전을 더 이상 사용하지 않을 계획입니다. 이 날짜부터 이러한 Flink 버전에 대한 새 애플리케이션을 만들 수 없습니다. 지금은 기존 애플리케이션을 계속 실행할 수 있습니다. Apache Flink용 Amazon Managed Service의 인플레이스 버전 업그레이드 기능을 사용하여 애플리케이션을 안전하게 업그레이드할 수 있습니다. 자세한 내용은 을 참조하십시오. 아파치 플링크의 인플레이스 버전 업그레이드

이 주제에는 Apache Flink 1.8.2를 사용하는 튜토리얼: 를 사용하여 시작하기 DataStream API 자습서 버전이 포함되어 있습니다.

아파치 플링크 애플리케이션을 위한 매니지드 서비스의 구성 요소

Managed Service for Apache Flink 애플리케이션은 데이터를 처리하기 위해 Apache Flink 런타임을 사용하여 입력을 처리하고 출력을 생성하는 Java/Apache Maven 또는 Scala 애플리케이션을 사용합니다.

Managed Service for Apache Flink 애플리케이션에는 다음과 같은 구성 요소가 있습니다.

  • 런타임 속성: 애플리케이션 코드를 다시 컴파일하지 않고도 런타임 속성을 사용하여 애플리케이션을 구성할 수 있습니다.

  • 소스: 애플리케이션은 소스를 사용하여 데이터를 소비합니다. 소스 커넥터는 Kinesis 데이터 스트림, Amazon S3 버킷 등에서 데이터를 읽습니다. 자세한 내용을 알아보려면 소스 섹션을 참조하세요.

  • 연산자: 애플리케이션은 하나 이상의 연산자를 사용하여 데이터를 처리합니다. 연산자는 데이터를 변환, 강화 또는 집계할 수 있습니다. 자세한 내용을 알아보려면 DataStream API 연산자 섹션을 참조하세요.

  • 싱크: 애플리케이션은 싱크를 사용하여 외부 소스에 데이터를 생성합니다. 싱크 커넥터는 Kinesis 데이터 스트림, Firehose 스트림, Amazon S3 버킷 등에 데이터를 씁니다. 자세한 정보는 싱크을 참조하세요.

애플리케이션 코드를 생성, 컴파일 및 패키징한 후 Amazon Simple Storage Service (Amazon S3) 버킷에 코드 패키지를 업로드합니다. 그런 다음 Managed Service for Apache Flink 애플리케이션을 생성합니다. 코드 패키지 위치, Kinesis 데이터 스트림을 스트리밍 데이터 소스로 전달하고, 일반적으로 애플리케이션의 처리된 데이터를 수신하는 스트리밍 또는 파일 위치를 전달합니다.

연습을 완료하기 위한 사전 요구 사항

이 가이드의 단계를 완료하려면 다음이 필요합니다.

시작하려면 1단계: AWS 계정 설정 및 관리자 사용자 생성 섹션으로 이동하십시오.

1단계: AWS 계정 설정 및 관리자 사용자 생성

가입하세요. AWS 계정

계정이 없는 경우 다음 단계를 완료하여 계정을 만드세요. AWS 계정

가입하려면 AWS 계정
  1. https://portal.aws.amazon.com/billing/signup을 엽니다.

  2. 온라인 지시 사항을 따릅니다.

    등록 절차 중 전화를 받고 전화 키패드로 확인 코드를 입력하는 과정이 있습니다.

    에 AWS 계정가입하면 AWS 계정 루트 사용자a가 생성됩니다. 루트 사용자에게는 계정의 모든 AWS 서비스 및 리소스에 액세스할 권한이 있습니다. 보안 모범 사례는 사용자에게 관리 액세스 권한을 할당하고, 루트 사용자만 사용하여 루트 사용자 액세스 권한이 필요한 작업을 수행하는 것입니다.

AWS 가입 절차가 완료된 후 확인 이메일을 보냅니다. 언제든지 https://aws.amazon.com/으로 이동하고 내 계정을 선택하여 현재 계정 활동을 보고 계정을 관리할 수 있습니다.

관리자 액세스 권한이 있는 사용자 생성

등록한 AWS 계정후에는 일상적인 작업에 루트 사용자를 사용하지 않도록 관리 사용자를 보호하고 AWS IAM Identity Center활성화하고 생성하십시오 AWS 계정 루트 사용자.

보안을 유지하세요 AWS 계정 루트 사용자
  1. 루트 사용자를 선택하고 AWS 계정 이메일 주소를 입력하여 계정 AWS Management Console소유자로 로그인합니다. 다음 페이지에서 비밀번호를 입력합니다.

    루트 사용자를 사용하여 로그인하는 데 도움이 필요하면 AWS 로그인 User Guide루트 사용자로 로그인을 참조하십시오.

  2. 루트 사용자의 다중 인증(MFA)을 활성화합니다.

    지침은 IAM 사용 설명서의 AWS 계정 루트 사용자 (콘솔) 에 대한 가상 MFA 디바이스 활성화를 참조하십시오.

관리자 액세스 권한이 있는 사용자 생성
  1. IAM Identity Center를 활성화합니다.

    지침은 AWS IAM Identity Center 사용 설명서AWS IAM Identity Center설정을 참조하세요.

  2. IAM Identity Center에서 사용자에게 관리 액세스 권한을 부여합니다.

    를 ID 소스로 사용하는 방법에 대한 자습서는 사용 설명서의 기본값으로 IAM Identity Center 디렉터리사용자 액세스 구성을 참조하십시오. IAM Identity Center 디렉터리 AWS IAM Identity Center

관리 액세스 권한이 있는 사용자로 로그인
추가 사용자에게 액세스 권한 할당
  1. IAM Identity Center에서 최소 권한 적용 모범 사례를 따르는 권한 세트를 생성합니다.

    지침은AWS IAM Identity Center 사용 설명서의 Create a permission set를 참조하세요.

  2. 사용자를 그룹에 할당하고, 그룹에 Single Sign-On 액세스 권한을 할당합니다.

    지침은AWS IAM Identity Center 사용 설명서의 Add groups를 참조하세요.

프로그래밍 방식 액세스 권한 부여

사용자가 AWS 외부 사용자와 상호 작용하려는 경우 프로그래밍 방식의 액세스가 필요합니다. AWS Management Console프로그래밍 방식의 액세스 권한을 부여하는 방법은 액세스하는 사용자 유형에 따라 다릅니다. AWS

사용자에게 프로그래밍 방식 액세스 권한을 부여하려면 다음 옵션 중 하나를 선택합니다.

프로그래밍 방식 액세스가 필요한 사용자는 누구인가요? To 액세스 권한을 부여하는 사용자

작업 인력 ID

(IAM Identity Center가 관리하는 사용자)

임시 자격 증명을 사용하여 AWS CLI, AWS SDK 또는 API에 대한 프로그래밍 요청에 서명할 수 있습니다. AWS

사용하고자 하는 인터페이스에 대한 지침을 따릅니다.

IAM 임시 자격 증명을 사용하여 AWS CLI, AWS SDK 또는 API에 대한 프로그래밍 방식 요청에 서명할 수 있습니다. AWS IAM 사용 설명서의 AWS 리소스와 함께 임시 자격 증명 사용의 지침을 따르십시오.
IAM

(권장되지 않음)

장기 자격 증명을 사용하여 AWS CLI, AWS SDK 또는 API에 대한 프로그래밍 요청에 서명하십시오. AWS

사용하고자 하는 인터페이스에 대한 지침을 따릅니다.

2단계: () 설정 AWS Command Line InterfaceAWS CLI

이 단계에서는 Apache Flink용 관리 서비스와 함께 사용하도록 AWS CLI 를 다운로드하고 구성합니다.

참고

이 가이드의 시작하기 연습에서는 해당 계정에서 관리자 자격 증명(adminuser)을 사용하여 작업을 수행한다고 가정합니다.

참고

이미 AWS CLI 설치되어 있는 경우 최신 기능을 사용하려면 업그레이드해야 할 수 있습니다. 자세한 내용을 알아보려면 AWS Command Line Interface 사용자 가이드에서 AWS Command Line Interface설치를 참조하세요. 의 버전을 확인하려면 다음 명령을 실행합니다. AWS CLI

aws --version

이 자습서의 연습에는 다음 AWS CLI 버전 이상이 필요합니다.

aws-cli/1.16.63
설정하려면 AWS CLI
  1. AWS CLI를 다운로드하고 구성합니다. 관련 지침은 AWS Command Line Interface 사용 설명서에서 다음 토픽을 참조하세요.

  2. AWS CLI config파일에 관리자 사용자의 이름이 지정된 프로필을 추가합니다. 이 프로필은 AWS CLI 명령을 실행할 때 사용합니다. 명명된 프로필에 대한 자세한 내용을 알아보려면 AWS Command Line Interface 사용자 가이드명명된 프로필을 참조하세요.

    [profile adminuser] aws_access_key_id = adminuser access key ID aws_secret_access_key = adminuser secret access key region = aws-region

    사용할 수 있는 리전 목록은 Amazon Web Services 일반 참조리전 및 엔드포인트를 참조하세요.

    참고

    이 자습서의 예 코드 및 명령은 미국 서부(오레곤) 지역을 사용합니다. 다른 AWS 지역을 사용하려면 이 자습서의 코드 및 명령에 있는 지역을 사용하려는 지역으로 변경하십시오.

  3. 명령 프롬프트에서 다음 help 명령을 입력하여 설정을 확인하십시오:

    aws help

AWS 계정을 설정하고 나면 샘플 애플리케이션을 구성하고 end-to-end 설정을 테스트하는 다음 연습을 시도할 수 있습니다. AWS CLI

다음 단계

3단계: Apache Flink용 관리 서비스 응용 프로그램 만들기 및 실행

3단계: Apache Flink용 관리 서비스 응용 프로그램 만들기 및 실행

이 연습에서는 데이터 스트림을 소스 및 싱크로 사용하여 Managed Service for Apache Flink 애플리케이션을 만듭니다.

두 개의 Amazon Kinesis 데이터 스트림을 생성합니다.

이 연습을 위해 Managed Service for Apache Flink 애플리케이션을 생성하기 전에 두 개의 Kinesis 데이터 스트림(ExampleInputStreamExampleOutputStream)을 생성하세요. 이 애플리케이션은 애플리케이션 소스 및 대상 스트림에 대해 이러한 스트림을 사용합니다.

Amazon Kinesis 콘솔 또는 다음 AWS CLI 명령을 사용하여 이러한 스트림을 만들 수 있습니다. 콘솔 지침은 Amazon Kinesis Data Streams 개발자 가이드데이터 스트림 생성 및 업데이트를 참조하세요.

데이터 스트림 (AWS CLI)을 생성하려면
  1. 첫 번째 스트림 (ExampleInputStream) 을 생성하려면 다음 Amazon Kinesis 명령을 create-stream AWS CLI 사용하십시오.

    $ aws kinesis create-stream \ --stream-name ExampleInputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser
  2. 애플리케이션에서 출력을 쓰는 데 사용하는 두 번째 스트림을 생성하려면 동일한 명령을 실행하여 스트림 명칭을 ExampleOutputStream으로 변경합니다.

    $ aws kinesis create-stream \ --stream-name ExampleOutputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser

입력 스트림에 샘플 레코드를 작성합니다.

이 섹션에서는 Python 스크립트를 사용하여 애플리케이션에서 처리할 샘플 레코드를 스트림에 쓰기 합니다.

참고

이 섹션에서는 AWS SDK for Python (Boto)이 필요합니다.

  1. 다음 콘텐츠를 가진 stock.py이라는 파일을 생성합니다:

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { "EVENT_TIME": datetime.datetime.now().isoformat(), "TICKER": random.choice(["AAPL", "AMZN", "MSFT", "INTC", "TBV"]), "PRICE": round(random.random() * 100, 2), } def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey" ) if __name__ == "__main__": generate(STREAM_NAME, boto3.client("kinesis"))
  2. 이 자습서의 뒷부분에서 stock.py 스크립트를 실행하여 애플리케이션으로 데이터를 전송합니다.

    $ python stock.py

Apache Flink 스트리밍 Java 코드를 다운로드하여 검토하십시오.

이 예제의 Java 애플리케이션 코드는 에서 제공됩니다. GitHub 애플리케이션 코드를 다운로드하려면 다음을 수행하세요.

  1. 다음 명령을 사용하여 원격 리포지토리를 복제합니다.

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  2. amazon-kinesis-data-analytics-java-examples/GettingStarted_1_8 디렉터리로 이동합니다.

애플리케이션 코드에 대해 다음을 유의하십시오:

  • 프로젝트 객체 모델(pom.xml) 파일에는 Managed Service for Apache Flink 라이브러리를 비롯한 애플리케이션의 구성 및 종속성에 대한 정보가 들어 있습니다.

  • BasicStreamingJob.java 파일에는 애플리케이션의 기능을 정의하는 main 메서드가 들어 있습니다.

  • 애플리케이션은 Kinesis 소스를 사용하여 소스 스트림에서 읽습니다. 다음 스니펫은 Kinesis 소스를 생성합니다.

    return env.addSource(new FlinkKinesisConsumer<>(inputStreamName, new SimpleStringSchema(), inputProperties));
  • 애플리케이션은 StreamExecutionEnvironment 객체를 사용하여 외부 리소스에 액세스하기 위한 소스 및 싱크 커넥터를 생성합니다.

  • 애플리케이션은 정적 속성을 사용하여 소스 및 싱크 커넥터를 만듭니다. 동적 애플리케이션 속성을 사용하려면 createSourceFromApplicationPropertiescreateSinkFromApplicationProperties 메서드를 사용하여 커넥터를 생성합니다. 이 메서드는 애플리케이션의 속성을 읽어 커넥터를 구성합니다.

    이러한 런타임 속성에 대한 자세한 내용을 알아보려면 런타임 속성 섹션을 참조하세요.

애플리케이션 코드를 컴파일하십시오.

이 섹션에서는 Apache Maven 컴파일러를 사용하여 애플리케이션용 Java 코드를 생성합니다. Apache Maven 및 Java Development Kit(JDK) 설치에 대한 자세한 내용을 알아보려면 연습을 완료하기 위한 사전 요구 사항 섹션을 참조하십시오.

참고

Kinesis 커넥터를 Apache Flink 1.11 이전 버전에서 사용하려면 Apache Maven을 다운로드, 빌드, 설치해야 합니다. 자세한 내용은 아파치 플링크 Kinesis Streams 커넥터를 이전 아파치 플링크 버전과 함께 사용하기 단원을 참조하세요.

애플리케이션 코드를 컴파일하려면
  1. 애플리케이션 코드를 사용하려면 이를 컴파일하고 JAR 파일로 패키징합니다. 다음 두 가지 방법 중 하나로 코드를 컴파일하고 패키징할 수 있습니다:

    • 명령행 Maven 도구를 사용합니다. pom.xml 파일이 있는 디렉터리에서 다음 명령을 실행하여 JAR 파일을 생성합니다:

      mvn package -Dflink.version=1.8.2
    • 귀하의 개발 환경 사용. 자세한 내용을 알아보려면 해당 개발 환경 설명서를 참조하십시오.

      참고

      제공된 소스 코드는 Java 1.8의 라이브러리를 사용합니다. 프로젝트의 Java 버전이 1.8인지 확인하십시오.

    패키지를 JAR 파일로 업로드하거나 패키지를 압축하여 ZIP 파일로 업로드할 수 있습니다. 를 사용하여 애플리케이션을 생성하는 경우 코드 콘텐츠 유형 (JAR 또는 ZIP) 을 지정합니다. AWS CLI

  2. 컴파일하는 동안 오류가 발생하면 JAVA_HOME 환경 변수가 올바르게 설정되어 있는지 확인하십시오.

애플리케이션이 성공적으로 컴파일되면 다음 파일이 생성됩니다:

target/aws-kinesis-analytics-java-apps-1.0.jar

아파치 플링크 스트리밍 자바 코드를 업로드하세요.

이 섹션에서는 Amazon Simple Storage Service(Amazon S3) 버킷을 만들고 애플리케이션 코드를 업로드합니다.

애플리케이션 코드 업로드하기
  1. https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 버킷 만들기를 선택합니다.

  3. 버킷 명칭 필드에 ka-app-code-<username>을 입력합니다. 버킷 명칭에 사용자 이름 등의 접미사를 추가하여 전역적으로 고유하게 만듭니다. 다음을 선택합니다.

  4. 옵션 구성 단계에서 설정을 기본값 그대로 두고 다음을 선택합니다.

  5. 권한 설정 단계에서 설정을 기본값 그대로 두고 다음을 선택합니다.

  6. 버킷 생성을 선택합니다.

  7. Amazon S3 콘솔에서 ka-app-code- <username>버킷을 선택하고 업로드를 선택합니다.

  8. 파일 선택 단계에서 파일 추가를 선택합니다. 이전 단계에서 생성한 aws-kinesis-analytics-java-apps-1.0.jar 파일로 이동합니다. 다음을 선택합니다.

  9. 개체 정보에 대한 설정은 변경할 필요가 없으므로 업로드를 선택합니다.

이제 애플리케이션 코드가 애플리케이션에서 액세스할 수 있는 Amazon S3 버킷에 저장됩니다.

Apache Flink용 관리형 서비스 애플리케이션을 생성하고 실행합니다.

콘솔이나 AWS CLI를 사용하여 Managed Service for Apache Flink 애플리케이션을 생성하고 실행할 수 있습니다.

참고

콘솔을 사용하여 애플리케이션을 생성하면 사용자 AWS Identity and Access Management (IAM) 및 Amazon CloudWatch Logs 리소스가 자동으로 생성됩니다. 를 사용하여 애플리케이션을 생성할 때는 이러한 리소스를 별도로 생성합니다. AWS CLI

애플리케이션 (콘솔) 생성 및 실행

콘솔을 사용하여 애플리케이션을 생성, 구성, 업데이트 및 실행하려면 다음 단계를 수행하세요.

애플리케이션 생성
  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Managed Service for Apache Flink 대시보드에서 분석 애플리케이션 생성을 선택합니다.

  3. Managed Service for Apache Flink - 애플리케이션 생성 페이지에서 다음과 같이 애플리케이션 세부 정보를 제공합니다.

    • 애플리케이션 명칭MyApplication을 입력합니다.

    • 설명My java test app를 입력합니다.

    • 런타임에서 Apache Flink를 선택합니다.

    • 버전 풀다운은 Apache Flink 1.8(권장 버전)으로 그대로 두십시오.

  4. 액세스 권한에서 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  5. 애플리케이션 생성을 선택합니다.

참고

콘솔을 사용하여 Managed Service for Apache Flink 애플리케이션을 만들 때 내 애플리케이션에 대한 IAM 역할 및 정책을 둘 수 있는 옵션이 있습니다. 귀하의 애플리케이션은 이 역할 및 정책을 사용하여 종속 리소스에 액세스합니다. 이러한 IAM 리소스의 이름은 애플리케이션 명칭과 리전을 사용하여 다음과 같이 지정됩니다.

  • 정책: kinesis-analytics-service-MyApplication-us-west-2

  • 역할: kinesisanalytics-MyApplication-us-west-2

IAM 정책 편집

IAM 정책을 편집하여 Kinesis Data Streams에 액세스할 수 있는 권한을 추가합니다.

  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 여세요.

  2. 정책을 선택하세요. 이전 섹션에서 콘솔이 생성한 kinesis-analytics-service-MyApplication-us-west-2 정책을 선택합니다.

  3. 요약 페이지에서 정책 편집을 선택합니다. JSON 탭을 선택합니다.

  4. 다음 정책 예제의 강조 표시된 부분을 정책에 추가하세요. 샘플 계정 ID(012345678901)를 내 계정 ID로 바꿉니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-username/aws-kinesis-analytics-java-apps-1.0.jar" ] }, { "Sid": "DescribeLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }
애플리케이션 구성
  1. MyApplication페이지에서 구성을 선택합니다.

  2. 애플리케이션 구성 페이지에서 코드 위치를 입력합니다.

    • Amazon S3 버킷의 경우 ka-app-code-<username>를 입력합니다.

    • Amazon S3 객체 경로에는 aws-kinesis-analytics-java-apps-1.0.jar를 입력합니다.

  3. 애플리케이션 리소스에 대한 액세스 아래에서 액세스 권한의 경우 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  4. 다음 애플리케이션 속성 및 값을 입력합니다:

    그룹 ID
    ProducerConfigProperties flink.inputstream.initpos LATEST
    ProducerConfigProperties aws.region us-west-2
    ProducerConfigProperties AggregationEnabled false
  5. 모니터링에서 지표 수준 모니터링애플리케이션으로 설정되어 있는지 확인합니다.

  6. CloudWatch 로깅의 경우 활성화 확인란을 선택합니다.

  7. 업데이트를 선택합니다.

참고

Amazon CloudWatch 로깅을 활성화하도록 선택하면 Apache Flink용 관리형 서비스에서 로그 그룹과 로그 스트림을 자동으로 생성합니다. 이러한 리소스의 이름은 다음과 같습니다.

  • 로그 그룹: /aws/kinesis-analytics/MyApplication

  • 로그 스트림: kinesis-analytics-log-stream

애플리케이션을 실행합니다
  1. MyApplication페이지에서 [Run] 을 선택합니다. 작업을 확인합니다.

  2. 애플리케이션이 실행 중이면 페이지를 새로 고칩니다. 콘솔에 애플리케이션 그래프가 표시됩니다.

애플리케이션을 중지합니다.

MyApplication페이지에서 중지를 선택합니다. 작업을 확인합니다.

애플리케이션 업데이트

콘솔을 사용하여 애플리케이션 속성, 모니터링 설정, 애플리케이션 JAR의 위치 또는 파일 명칭과 같은 애플리케이션 설정을 업데이트할 수 있습니다. 애플리케이션 코드를 업데이트해야 하는 경우 Amazon S3 버킷에서 애플리케이션 JAR을 다시 로드할 수도 있습니다.

MyApplication페이지에서 구성을 선택합니다. 애플리케이션 설정을 업데이트하고 업데이트를 선택합니다.

애플리케이션 생성 및 실행 (AWS CLI)

이 섹션에서는 를 사용하여 Apache Flink용 관리 서비스 애플리케이션을 만들고 실행합니다. AWS CLI Apache Flink용 관리 서비스는 kinesisanalyticsv2 AWS CLI 명령을 사용하여 Apache Flink용 관리 서비스 응용 프로그램을 만들고 이와 상호 작용합니다.

권한 정책 생성
참고

애플리케이션에 대한 권한 정책 및 역할을 생성해야 합니다. 이러한 IAM 리소스를 생성하지 않으면 애플리케이션은 해당 데이터 및 로그 스트림에 액세스할 수 없습니다.

먼저 소스 스트림에서 두 개의 명령문, 즉 read 작업에 대한 권한을 부여하는 명령문과 싱크 스트림에서 write 작업에 대한 권한을 부여하는 명령문이 있는 권한 정책을 만듭니다. 그런 다음 정책을 IAM 역할(다음 섹션에서 생성)에 연결합니다. 따라서 Managed Service for Apache Flink가 역할을 맡을 때 서비스는 소스 스트림에서 읽고 싱크 스트림에 쓸 수 있는 권한이 있습니다.

다음 코드를 사용하여 AKReadSourceStreamWriteSinkStream 권한 정책을 생성합니다. username을 애플리케이션 코드를 저장하기 위해 Amazon S3 버킷을 만들 때 사용한 사용자 이름으로 바꿉니다. Amazon 리소스 이름(ARN)의 계정 ID(012345678901)를 사용자의 계정 ID로 바꿉니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": ["arn:aws:s3:::ka-app-code-username", "arn:aws:s3:::ka-app-code-username/*" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }

권한 정책을 생성하는 step-by-step 방법에 대한 지침은 IAM 사용 설명서의 자습서: 첫 번째 고객 관리형 정책 생성 및 연결을 참조하십시오.

참고

AWS SDK for Java를 사용하여 다른 Amazon 서비스에 액세스할 수 있습니다. Managed Service for Apache Flink는 SDK에 필요한 자격 증명을 애플리케이션과 연결된 서비스 실행 IAM 역할의 자격 증명으로 자동 설정합니다. 추가 단계는 필요 없습니다.

IAM 역할 생성

이 섹션에서는 Managed Service for Apache Flink 애플리케이션이 소스 스트림을 읽고 싱크 스트림에 쓰기 위해 맡을 수 있는 IAM 역할을 생성합니다.

Managed Service for Apache Flink는 권한 없이 스트림에 액세스할 수 없습니다. IAM 역할을 통해 이러한 권한을 부여합니다. 각 IAM 역할에는 두 가지 정책이 연결됩니다. 신뢰 정책은 Managed Service for Apache Flink가 역할을 취할 수 있는 권한을 부여하고, 권한 정책은 역할을 취한 후 Managed Service for Apache Flink에서 수행할 수 있는 작업을 결정합니다.

이전 섹션에서 생성한 권한 정책을 이 역할에 연결합니다.

IAM 역할을 생성하려면
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 창에서 역할, 역할 생성을 선택합니다.

  3. 신뢰할 수 있는 유형의 자격 증명 선택에서 AWS 서비스를 선택합니다. 이 역할을 사용할 서비스 선택에서 Kinesis를 선택합니다. 사용 사례 선택에서 Kinesis Analytics를 선택합니다.

    다음: 권한을 선택합니다.

  4. 권한 정책 연결 페이지에서 다음: 검토를 선택합니다. 역할을 생성한 후에 권한 정책을 연결합니다.

  5. 역할 생성 페이지에서 역할 이름으로 MF-stream-rw-role을 입력합니다. 역할 생성을 선택합니다.

    MF-stream-rw-role이라는 새 IAM 역할이 생성되었습니다. 그런 다음 역할의 신뢰 정책 및 권한 정책을 업데이트합니다.

  6. 역할에 권한 정책을 연결합니다.

    참고

    이 연습에서는 Managed Service for Apache Flink가 이 역할을 취하여 Kinesis 데이터 스트림(소스)에서 데이터를 읽고 출력을 다른 Kinesis 데이터 스트림에 씁니다. 따라서 이전 단계 권한 정책 생성에서 생성한 정책을 연결합니다.

    1. 요약 페이지에서 권한 탭을 선택합니다.

    2. 정책 연결을 선택합니다.

    3. 검색 상자에 AKReadSourceStreamWriteSinkStream(이전 섹션에서 생성한 정책)을 입력합니다.

    4. AK ReadSourceStreamWriteSinkStream 정책을 선택하고 Attach policy (Attach policy) 를 선택합니다.

이제 애플리케이션이 리소스에 액세스하는 데 사용하는 서비스 실행 역할이 생성되었습니다. 새 역할의 ARN을 기록합니다.

역할 생성에 대한 step-by-step 지침은 IAM 사용 설명서의 IAM 역할 생성 (콘솔) 을 참조하십시오.

Apache Flink용 관리형 서비스 애플리케이션 생성
  1. 다음 JSON 코드를 create_request.json이라는 파일에 저장합니다. 샘플 역할 ARN을 이전에 생성한 역할을 위한 ARN으로 바꿉니다. 버킷 ARN 접미사(username)를 이전 섹션에서 선택한 접미사로 바꿉니다. 서비스 실행 역할의 샘플 계정 ID(012345678901)를 해당 계정 ID로 바꿉니다.

    { "ApplicationName": "test", "ApplicationDescription": "my java test app", "RuntimeEnvironment": "FLINK-1_8", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username", "FileKey": "aws-kinesis-analytics-java-apps-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "flink.stream.initpos" : "LATEST", "aws.region" : "us-west-2", "AggregationEnabled" : "false" } }, { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2" } } ] } } }
  2. 위의 요청과 함께 CreateApplication 작업을 실행하여 애플리케이션을 생성합니다.

    aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json

애플리케이션이 생성되었습니다. 다음 단계에서는 애플리케이션을 시작합니다.

애플리케이션 시작

이 섹션에서는 StartApplication 작업을 사용하여 애플리케이션을 시작합니다.

애플리케이션을 시작하려면
  1. 다음 JSON 코드를 start_request.json이라는 파일에 저장합니다.

    { "ApplicationName": "test", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
  2. 위의 요청과 함께 StartApplication 작업을 실행하여 애플리케이션을 시작합니다.

    aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json

애플리케이션이 실행됩니다. Amazon CloudWatch 콘솔에서 Apache Flink용 관리형 서비스 지표를 확인하여 애플리케이션이 작동하는지 확인할 수 있습니다.

애플리케이션을 중지하십시오.

이 섹션에서는 StopApplication 작업을 사용하여 애플리케이션을 중지합니다.

애플리케이션을 중지하려면
  1. 다음 JSON 코드를 stop_request.json이라는 파일에 저장합니다.

    { "ApplicationName": "test" }
  2. 다음 요청과 함께 StopApplication 작업을 실행하여 애플리케이션을 중지합니다.

    aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json

애플리케이션이 중지됩니다.

CloudWatch 로깅 옵션 추가

를 AWS CLI 사용하여 Amazon CloudWatch 로그 스트림을 애플리케이션에 추가할 수 있습니다. 애플리케이션에서 CloudWatch 로그를 사용하는 방법에 대한 자세한 내용은 을 참조하십시오애플리케이션 로깅 설정.

환경 속성 업데이트

이 섹션에서는 애플리케이션 코드를 다시 컴파일하지 않고도 UpdateApplication 작업을 사용하여 애플리케이션의 환경 속성을 변경할 수 있습니다. 이 예제에서는 원본 스트림과 대상 스트림의 리전을 변경합니다.

애플리케이션의 환경 속성 업데이트
  1. 다음 JSON 코드를 update_properties_request.json이라는 파일에 저장합니다.

    {"ApplicationName": "test", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "EnvironmentPropertyUpdates": { "PropertyGroups": [ { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "flink.stream.initpos" : "LATEST", "aws.region" : "us-west-2", "AggregationEnabled" : "false" } }, { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2" } } ] } } }
  2. 이전 요청과 함께 UpdateApplication 작업을 실행하여 환경 속성을 업데이트하십시오.

    aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
애플리케이션 코드 업데이트

새 버전의 코드 패키지로 애플리케이션 코드를 업데이트해야 하는 경우 UpdateApplication AWS CLI 작업을 사용합니다.

참고

파일 이름이 같은 새 버전의 애플리케이션 코드를 로드하려면 새 객체 버전을 지정해야 합니다. Amazon S3 객체 버전 사용에 대한 자세한 내용을 알아보려면 버전 관리 활성화 또는 비활성화를 참조하세요.

를 사용하려면 Amazon S3 버킷에서 이전 코드 패키지를 삭제하고 새 버전을 업로드한 다음 동일한 Amazon S3 버킷과 객체 이름, 새 객체 버전을 지정하여 UpdateApplication 호출합니다. AWS CLI애플리케이션이 새 코드 패키지로 다시 시작됩니다.

다음 예 UpdateApplication 작업 요청은 애플리케이션 코드를 다시 로드하고 애플리케이션을 다시 시작합니다. CurrentApplicationVersionId를 현재 애플리케이션 버전으로 업데이트하세요. ListApplications 또는 DescribeApplication 작업을 사용하여 현재 애플리케이션 버전을 확인할 수 있습니다. 버킷 명칭 접미사 (<username>)를 두 개의 Amazon Kinesis 데이터 스트림을 생성합니다. 섹션에서 선택한 접미사로 업데이트합니다.

{ "ApplicationName": "test", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "ApplicationCodeConfigurationUpdate": { "CodeContentUpdate": { "S3ContentLocationUpdate": { "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username", "FileKeyUpdate": "aws-kinesis-analytics-java-apps-1.0.jar", "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU" } } } } }

다음 단계

4단계: AWS 리소스 정리

4단계: AWS 리소스 정리

이 섹션에는 시작하기 자습서에서 만든 AWS 리소스를 정리하는 절차가 포함되어 있습니다.

Apache Flink용 관리형 서비스 애플리케이션 삭제

  1. https://console.aws.amazon.com/kinesis에서 Kinesis 콘솔을 엽니다.

  2. Apache Flink용 관리형 서비스 패널에서 선택합니다. MyApplication

  3. 구성을 선택합니다.

  4. 스냅샷 섹션에서 비활성화를 선택한 다음 업데이트를 선택합니다.

  5. 애플리케이션 페이지에서 삭제를 선택한 다음 삭제를 확인합니다.

Kinesis 데이터 스트림을 삭제합니다.

  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Kinesis Data Streams 패널에서 을 선택합니다. ExampleInputStream

  3. ExampleInputStream페이지에서 Kinesis 스트림 삭제를 선택한 다음 삭제를 확인합니다.

  4. Kinesis 스트림 페이지에서 를 선택하고 작업을 선택하고 삭제를 선택한 다음 삭제를 확인합니다. ExampleOutputStream

Amazon S3 객체 및 버킷을 삭제합니다.

  1. https://console.aws.amazon.com/s3/에서 S3 콘솔을 엽니다.

  2. ka-app-code- 버킷을 선택합니다. <username>

  3. 삭제를 선택한 후 버킷 이름을 입력하여 삭제를 확인합니다.

IAM 리소스를 삭제합니다.

  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 바에서 정책을 선택합니다.

  3. 필터 컨트롤에서 kinesis를 입력합니다.

  4. kinesis-analytics-service- MyApplication -us-west-2 정책을 선택합니다.

  5. 정책 작업을 선택한 후 삭제를 선택합니다.

  6. 탐색 모음에서 역할을 선택합니다.

  7. 키네시스-애널리틱스- -US-West-2 역할을 선택합니다. MyApplication

  8. 역할 삭제를 선택하고 삭제를 확인합니다.

CloudWatch 리소스 삭제하기

  1. https://console.aws.amazon.com/cloudwatch/ 에서 CloudWatch 콘솔을 엽니다.

  2. 탐색 바에서 로그를 선택합니다.

  3. MyApplication/aws/kinesis-analytics/ 로그 그룹을 선택합니다.

  4. 로그 그룹 삭제를 선택한 다음 삭제를 확인합니다.

시작하기: 플링크 1.6.2 - 지원 중단

참고

아파치 플링크 커뮤니티는 아파치 플링크 버전 1.6, 1.8, 1.11을 3년 넘게 지원하지 않고 있다. 2024년 11월 5일에 Apache Flink용 아마존 매니지드 서비스에서 이러한 버전을 더 이상 사용하지 않을 계획입니다. 이 날짜부터 이러한 Flink 버전에 대한 새 애플리케이션을 만들 수 없습니다. 지금은 기존 애플리케이션을 계속 실행할 수 있습니다. Apache Flink용 Amazon Managed Service의 인플레이스 버전 업그레이드 기능을 사용하여 애플리케이션을 안전하게 업그레이드할 수 있습니다. 자세한 내용은 을 참조하십시오. 아파치 플링크의 인플레이스 버전 업그레이드

이 주제에는 Apache Flink 1.6.2를 사용하는 튜토리얼: 를 사용하여 시작하기 DataStream API 자습서 버전이 포함되어 있습니다.

Apache Flink 애플리케이션용 관리형 서비스의 구성 요소

Managed Service for Apache Flink 애플리케이션은 데이터를 처리하기 위해 Apache Flink 런타임을 사용하여 입력을 처리하고 출력을 생성하는 Java/Apache Maven 또는 Scala 애플리케이션을 사용합니다.

Managed Service for Apache Flink는 다음과 같은 구성 요소를 갖습니다.

  • 런타임 속성: 애플리케이션 코드를 다시 컴파일하지 않고도 런타임 속성을 사용하여 애플리케이션을 구성할 수 있습니다.

  • 소스: 애플리케이션은 소스를 사용하여 데이터를 소비합니다. 소스 커넥터는 Kinesis 데이터 스트림, Amazon S3 버킷 등에서 데이터를 읽습니다. 자세한 내용을 알아보려면 소스 섹션을 참조하세요.

  • 연산자: 애플리케이션은 하나 이상의 연산자를 사용하여 데이터를 처리합니다. 연산자는 데이터를 변환, 강화 또는 집계할 수 있습니다. 자세한 내용을 알아보려면 DataStream API 연산자 섹션을 참조하세요.

  • 싱크: 애플리케이션은 싱크를 사용하여 외부 소스에 데이터를 생성합니다. 싱크 커넥터는 Kinesis 데이터 스트림, Firehose 스트림, Amazon S3 버킷 등에 데이터를 씁니다. 자세한 정보는 싱크을 참조하세요.

애플리케이션 코드를 생성, 컴파일 및 패키징한 후 Amazon Simple Storage Service (Amazon S3) 버킷에 코드 패키지를 업로드합니다. 그런 다음 Managed Service for Apache Flink 애플리케이션을 생성합니다. 코드 패키지 위치, Kinesis 데이터 스트림을 스트리밍 데이터 소스로 전달하고, 일반적으로 애플리케이션의 처리된 데이터를 수신하는 스트리밍 또는 파일 위치를 전달합니다.

연습을 완료하기 위한 사전 요구 사항

이 가이드의 단계를 완료하려면 다음이 필요합니다.

  • Java Development Kit(JDK) 버전 8. JAVA_HOME 환경 변수가 JDK 설치 위치를 가리키도록 설정합니다.

  • 애플리케이션을 개발하고 컴파일하려면 개발 환경(예: Eclipse Java Neon 또는 IntelliJ Idea)을 사용하는 것이 좋습니다.

  • Git 클라이언트. 아직 설치하지 않았다면 Git 클라이언트를 설치합니다.

  • Apache Maven 컴파일러 플러그인. Maven이 해당 작업 경로에 있어야 합니다. Apache Maven 설치를 테스트하려면 다음을 입력하십시오.

    $ mvn -version

시작하려면 1단계: AWS 계정 설정 및 관리자 사용자 생성 섹션으로 이동하십시오.

1단계: AWS 계정 설정 및 관리자 사용자 생성

가입하세요. AWS 계정

계정이 없는 경우 다음 단계를 완료하여 계정을 만드세요. AWS 계정

가입하려면 AWS 계정
  1. https://portal.aws.amazon.com/billing/signup을 엽니다.

  2. 온라인 지시 사항을 따릅니다.

    등록 절차 중 전화를 받고 전화 키패드로 확인 코드를 입력하는 과정이 있습니다.

    에 AWS 계정가입하면 AWS 계정 루트 사용자a가 생성됩니다. 루트 사용자에게는 계정의 모든 AWS 서비스 및 리소스에 액세스할 권한이 있습니다. 보안 모범 사례는 사용자에게 관리 액세스 권한을 할당하고, 루트 사용자만 사용하여 루트 사용자 액세스 권한이 필요한 작업을 수행하는 것입니다.

AWS 가입 절차가 완료된 후 확인 이메일을 보냅니다. 언제든지 https://aws.amazon.com/으로 이동하고 내 계정을 선택하여 현재 계정 활동을 보고 계정을 관리할 수 있습니다.

관리자 액세스 권한이 있는 사용자 생성

등록한 AWS 계정후에는 일상적인 작업에 루트 사용자를 사용하지 않도록 관리 사용자를 보호하고 AWS IAM Identity Center활성화하고 생성하십시오 AWS 계정 루트 사용자.

보안을 유지하세요 AWS 계정 루트 사용자
  1. 루트 사용자를 선택하고 AWS 계정 이메일 주소를 입력하여 계정 AWS Management Console소유자로 로그인합니다. 다음 페이지에서 비밀번호를 입력합니다.

    루트 사용자를 사용하여 로그인하는 데 도움이 필요하면 AWS 로그인 User Guide루트 사용자로 로그인을 참조하십시오.

  2. 루트 사용자의 다중 인증(MFA)을 활성화합니다.

    지침은 IAM 사용 설명서의 AWS 계정 루트 사용자 (콘솔) 에 대한 가상 MFA 디바이스 활성화를 참조하십시오.

관리자 액세스 권한이 있는 사용자 생성
  1. IAM Identity Center를 활성화합니다.

    지침은 AWS IAM Identity Center 사용 설명서AWS IAM Identity Center설정을 참조하세요.

  2. IAM Identity Center에서 사용자에게 관리 액세스 권한을 부여합니다.

    를 ID 소스로 사용하는 방법에 대한 자습서는 사용 설명서의 기본값으로 IAM Identity Center 디렉터리사용자 액세스 구성을 참조하십시오. IAM Identity Center 디렉터리 AWS IAM Identity Center

관리 액세스 권한이 있는 사용자로 로그인
추가 사용자에게 액세스 권한 할당
  1. IAM Identity Center에서 최소 권한 적용 모범 사례를 따르는 권한 세트를 생성합니다.

    지침은AWS IAM Identity Center 사용 설명서의 Create a permission set를 참조하세요.

  2. 사용자를 그룹에 할당하고, 그룹에 Single Sign-On 액세스 권한을 할당합니다.

    지침은AWS IAM Identity Center 사용 설명서의 Add groups를 참조하세요.

프로그래밍 방식 액세스 권한 부여

사용자가 AWS 외부 사용자와 상호 작용하려는 경우 프로그래밍 방식의 액세스가 필요합니다. AWS Management Console프로그래밍 방식의 액세스 권한을 부여하는 방법은 액세스하는 사용자 유형에 따라 다릅니다. AWS

사용자에게 프로그래밍 방식 액세스 권한을 부여하려면 다음 옵션 중 하나를 선택합니다.

프로그래밍 방식 액세스가 필요한 사용자는 누구인가요? To 액세스 권한을 부여하는 사용자

작업 인력 ID

(IAM Identity Center가 관리하는 사용자)

임시 자격 증명을 사용하여 AWS CLI, AWS SDK 또는 API에 대한 프로그래밍 요청에 서명할 수 있습니다. AWS

사용하고자 하는 인터페이스에 대한 지침을 따릅니다.

IAM 임시 자격 증명을 사용하여 AWS CLI, AWS SDK 또는 API에 대한 프로그래밍 방식 요청에 서명할 수 있습니다. AWS IAM 사용 설명서의 AWS 리소스와 함께 임시 자격 증명 사용의 지침을 따르십시오.
IAM

(권장되지 않음)

장기 자격 증명을 사용하여 AWS CLI, AWS SDK 또는 API에 대한 프로그래밍 요청에 서명하십시오. AWS

사용하고자 하는 인터페이스에 대한 지침을 따릅니다.

2단계: () 설정 AWS Command Line InterfaceAWS CLI

이 단계에서는 Apache Flink용 관리형 서비스와 함께 사용하도록 AWS CLI 를 다운로드하고 구성합니다.

참고

이 가이드의 시작하기 연습에서는 해당 계정에서 관리자 자격 증명(adminuser)을 사용하여 작업을 수행한다고 가정합니다.

참고

이미 AWS CLI 설치되어 있는 경우 최신 기능을 사용하려면 업그레이드해야 할 수 있습니다. 자세한 내용을 알아보려면 AWS Command Line Interface 사용자 가이드에서 AWS Command Line Interface설치를 참조하세요. 의 버전을 확인하려면 다음 명령을 실행합니다. AWS CLI

aws --version

이 자습서의 연습에는 다음 AWS CLI 버전 이상이 필요합니다.

aws-cli/1.16.63
설정하려면 AWS CLI
  1. AWS CLI를 다운로드하고 구성합니다. 관련 지침은 AWS Command Line Interface 사용 설명서에서 다음 토픽을 참조하세요.

  2. AWS CLI config파일에 관리자 사용자의 이름이 지정된 프로필을 추가합니다. 이 프로필은 AWS CLI 명령을 실행할 때 사용합니다. 프로파일 명명에 대한 자세한 설명은AWS Command Line Interface 사용자 가이드프로파일 명명을 참조하십시오.

    [profile adminuser] aws_access_key_id = adminuser access key ID aws_secret_access_key = adminuser secret access key region = aws-region

    사용 가능한 AWS 지역 목록은 의 지역 및 엔드포인트를 참조하십시오. Amazon Web Services 일반 참조

    참고

    이 자습서의 예 코드 및 명령은 미국 서부(오레곤) 지역을 사용합니다. 다른 지역을 사용하려면 이 자습서의 코드 및 명령에서 지역을 사용하려는 지역으로 변경하십시오.

  3. 명령 프롬프트에서 다음 help 명령을 입력하여 설정을 확인하십시오:

    aws help

AWS 계정을 설정하고 나면 샘플 애플리케이션을 구성하고 end-to-end 설정을 테스트하는 다음 연습을 시도할 수 있습니다. AWS CLI

다음 단계

3단계: Apache Flink용 관리 서비스 응용 프로그램 만들기 및 실행

3단계: Apache Flink용 관리 서비스 응용 프로그램 만들기 및 실행

이 연습에서는 데이터 스트림을 소스 및 싱크로 사용하여 Managed Service for Apache Flink 애플리케이션을 만듭니다.

두 개의 Amazon Kinesis 데이터 스트림을 생성합니다.

이 연습을 위해 Managed Service for Apache Flink 애플리케이션을 생성하기 전에 두 개의 Kinesis 데이터 스트림(ExampleInputStreamExampleOutputStream)을 생성하세요. 이 애플리케이션은 애플리케이션 소스 및 대상 스트림에 대해 이러한 스트림을 사용합니다.

Amazon Kinesis 콘솔 또는 다음 AWS CLI 명령을 사용하여 이러한 스트림을 만들 수 있습니다. 콘솔 지침은 Amazon Kinesis Data Streams 개발자 가이드데이터 스트림 생성 및 업데이트를 참조하세요.

데이터 스트림 (AWS CLI)을 생성하려면
  1. 첫 번째 스트림 (ExampleInputStream) 을 생성하려면 다음 Amazon Kinesis 명령을 create-stream AWS CLI 사용하십시오.

    $ aws kinesis create-stream \ --stream-name ExampleInputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser
  2. 애플리케이션에서 출력을 쓰는 데 사용하는 두 번째 스트림을 생성하려면 동일한 명령을 실행하여 스트림 명칭을 ExampleOutputStream으로 변경합니다.

    $ aws kinesis create-stream \ --stream-name ExampleOutputStream \ --shard-count 1 \ --region us-west-2 \ --profile adminuser

입력 스트림에 샘플 레코드를 작성합니다.

이 섹션에서는 Python 스크립트를 사용하여 애플리케이션에서 처리할 샘플 레코드를 스트림에 쓰기 합니다.

참고

이 섹션에서는 AWS SDK for Python (Boto)이 필요합니다.

  1. 다음 콘텐츠를 가진 stock.py이라는 파일을 생성합니다:

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { "EVENT_TIME": datetime.datetime.now().isoformat(), "TICKER": random.choice(["AAPL", "AMZN", "MSFT", "INTC", "TBV"]), "PRICE": round(random.random() * 100, 2), } def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey" ) if __name__ == "__main__": generate(STREAM_NAME, boto3.client("kinesis"))
  2. 이 자습서의 뒷부분에서 stock.py 스크립트를 실행하여 애플리케이션으로 데이터를 전송합니다.

    $ python stock.py

Apache Flink 스트리밍 Java 코드를 다운로드하여 검토하십시오.

이 예제의 Java 애플리케이션 코드는 에서 제공됩니다. GitHub 애플리케이션 코드를 다운로드하려면 다음을 수행하세요.

  1. 다음 명령을 사용하여 원격 리포지토리를 복제합니다.

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  2. amazon-kinesis-data-analytics-java-examples/GettingStarted_1_6 디렉터리로 이동합니다.

애플리케이션 코드에 대해 다음을 유의하십시오:

  • 프로젝트 객체 모델(pom.xml) 파일에는 Managed Service for Apache Flink 라이브러리를 비롯한 애플리케이션의 구성 및 종속성에 대한 정보가 들어 있습니다.

  • BasicStreamingJob.java 파일에는 애플리케이션의 기능을 정의하는 main 메서드가 들어 있습니다.

  • 애플리케이션은 Kinesis 소스를 사용하여 소스 스트림에서 읽습니다. 다음 스니펫은 Kinesis 소스를 생성합니다.

    return env.addSource(new FlinkKinesisConsumer<>(inputStreamName, new SimpleStringSchema(), inputProperties));
  • 애플리케이션은 StreamExecutionEnvironment 객체를 사용하여 외부 리소스에 액세스하기 위한 소스 및 싱크 커넥터를 생성합니다.

  • 애플리케이션은 정적 속성을 사용하여 소스 및 싱크 커넥터를 만듭니다. 동적 애플리케이션 속성을 사용하려면 createSourceFromApplicationPropertiescreateSinkFromApplicationProperties 메서드를 사용하여 커넥터를 생성합니다. 이 메서드는 애플리케이션의 속성을 읽어 커넥터를 구성합니다.

    이러한 런타임 속성에 대한 자세한 내용을 알아보려면 런타임 속성 섹션을 참조하세요.

애플리케이션 코드를 컴파일하십시오.

이 섹션에서는 Apache Maven 컴파일러를 사용하여 애플리케이션용 Java 코드를 생성합니다. Apache Maven 및 Java Development Kit(JDK) 설치에 대한 자세한 내용을 알아보려면 연습을 완료하기 위한 사전 요구 사항 섹션을 참조하십시오.

참고

1.11 이전 버전의 Apache Flink에서 Kinesis 커넥터를 사용하려면 커넥터의 소스 코드를 다운로드하고 Apache Flink 설명서에 설명된 대로 구축해야 합니다.

애플리케이션 코드를 컴파일하려면
  1. 애플리케이션 코드를 사용하려면 이를 컴파일하고 JAR 파일로 패키징합니다. 다음 두 가지 방법 중 하나로 코드를 컴파일하고 패키징할 수 있습니다:

    • 명령행 Maven 도구를 사용합니다. pom.xml 파일이 있는 디렉터리에서 다음 명령을 실행하여 JAR 파일을 생성합니다:

      mvn package
      참고

      -Dflink.version 파라미터는 Managed Service for Apache Flink 런타임 버전 1.0.1에는 필요하지 않으며 버전 1.1.0 이상에만 필요합니다. 자세한 내용을 알아보려면 애플리케이션의 Apache Flink 버전 지정 섹션을 참조하세요.

    • 귀하의 개발 환경 사용. 자세한 내용을 알아보려면 해당 개발 환경 설명서를 참조하십시오.

    패키지를 JAR 파일로 업로드하거나 패키지를 압축하여 ZIP 파일로 업로드할 수 있습니다. 를 사용하여 애플리케이션을 생성하는 경우 코드 콘텐츠 유형 (JAR 또는 ZIP) 을 지정합니다. AWS CLI

  2. 컴파일하는 동안 오류가 발생하면 JAVA_HOME 환경 변수가 올바르게 설정되어 있는지 확인하십시오.

애플리케이션이 성공적으로 컴파일되면 다음 파일이 생성됩니다:

target/aws-kinesis-analytics-java-apps-1.0.jar

아파치 플링크 스트리밍 자바 코드를 업로드하세요.

이 섹션에서는 Amazon Simple Storage Service(Amazon S3) 버킷을 만들고 애플리케이션 코드를 업로드합니다.

애플리케이션 코드 업로드하기
  1. https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 버킷 만들기를 선택합니다.

  3. 버킷 명칭 필드에 ka-app-code-<username>을 입력합니다. 버킷 명칭에 사용자 이름 등의 접미사를 추가하여 전역적으로 고유하게 만듭니다. 다음을 선택합니다.

  4. 옵션 구성 단계에서 설정을 기본값 그대로 두고 다음을 선택합니다.

  5. 권한 설정 단계에서 설정을 기본값 그대로 두고 다음을 선택합니다.

  6. 버킷 생성을 선택합니다.

  7. Amazon S3 콘솔에서 ka-app-code- <username>버킷을 선택하고 업로드를 선택합니다.

  8. 파일 선택 단계에서 파일 추가를 선택합니다. 이전 단계에서 생성한 aws-kinesis-analytics-java-apps-1.0.jar 파일로 이동합니다. 다음을 선택합니다.

  9. 권한 설정 단계에서 설정을 기본값 그대로 유지합니다. 다음을 선택합니다.

  10. 속성 설정 단계에서 설정을 기본값 그대로 유지합니다. 업로드를 선택합니다.

이제 애플리케이션 코드가 애플리케이션에서 액세스할 수 있는 Amazon S3 버킷에 저장됩니다.

Apache Flink용 관리형 서비스 애플리케이션을 생성하고 실행합니다.

콘솔이나 AWS CLI를 사용하여 Managed Service for Apache Flink 애플리케이션을 생성하고 실행할 수 있습니다.

참고

콘솔을 사용하여 애플리케이션을 생성하면 사용자 AWS Identity and Access Management (IAM) 및 Amazon CloudWatch Logs 리소스가 자동으로 생성됩니다. 를 사용하여 애플리케이션을 생성할 때는 이러한 리소스를 별도로 생성합니다. AWS CLI

애플리케이션 (콘솔) 생성 및 실행

콘솔을 사용하여 애플리케이션을 생성, 구성, 업데이트 및 실행하려면 다음 단계를 수행하세요.

애플리케이션 생성
  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Managed Service for Apache Flink 대시보드에서 분석 애플리케이션 생성을 선택합니다.

  3. Managed Service for Apache Flink - 애플리케이션 생성 페이지에서 다음과 같이 애플리케이션 세부 정보를 제공합니다.

    • 애플리케이션 명칭MyApplication을 입력합니다.

    • 설명My java test app를 입력합니다.

    • 런타임에서 Apache Flink를 선택합니다.

      참고

      Managed Service for Apache Flink는 Apache Flink 버전 1.8.2 또는 1.6.2를 사용합니다.

    • 버전 풀다운을 Apache Flink 1.6으로 변경합니다.

  4. 액세스 권한에서 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  5. 애플리케이션 생성을 선택합니다.

참고

콘솔을 사용하여 Managed Service for Apache Flink 애플리케이션을 만들 때 내 애플리케이션에 대한 IAM 역할 및 정책을 둘 수 있는 옵션이 있습니다. 귀하의 애플리케이션은 이 역할 및 정책을 사용하여 종속 리소스에 액세스합니다. 이러한 IAM 리소스의 이름은 애플리케이션 명칭과 리전을 사용하여 다음과 같이 지정됩니다.

  • 정책: kinesis-analytics-service-MyApplication-us-west-2

  • 역할: kinesisanalytics-MyApplication-us-west-2

IAM 정책 편집

IAM 정책을 편집하여 Kinesis Data Streams에 액세스할 수 있는 권한을 추가합니다.

  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 여세요.

  2. 정책을 선택하세요. 이전 섹션에서 콘솔이 생성한 kinesis-analytics-service-MyApplication-us-west-2 정책을 선택합니다.

  3. 요약 페이지에서 정책 편집을 선택합니다. JSON 탭을 선택합니다.

  4. 다음 정책 예제의 강조 표시된 부분을 정책에 추가하세요. 샘플 계정 ID(012345678901)를 내 계정 ID로 바꿉니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-username/java-getting-started-1.0.jar" ] }, { "Sid": "DescribeLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }
애플리케이션 구성
  1. MyApplication페이지에서 구성을 선택합니다.

  2. 애플리케이션 구성 페이지에서 코드 위치를 입력합니다.

    • Amazon S3 버킷의 경우 ka-app-code-<username>를 입력합니다.

    • Amazon S3 객체 경로에는 java-getting-started-1.0.jar를 입력합니다.

  3. 애플리케이션 리소스에 대한 액세스 아래에서 액세스 권한의 경우 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  4. 다음 애플리케이션 속성 및 값을 입력합니다:

    그룹 ID
    ProducerConfigProperties flink.inputstream.initpos LATEST
    ProducerConfigProperties aws.region us-west-2
    ProducerConfigProperties AggregationEnabled false
  5. 모니터링에서 지표 수준 모니터링애플리케이션으로 설정되어 있는지 확인합니다.

  6. CloudWatch 로깅의 경우 활성화 확인란을 선택합니다.

  7. 업데이트를 선택합니다.

참고

Amazon CloudWatch 로깅을 활성화하도록 선택하면 Apache Flink용 관리형 서비스에서 로그 그룹과 로그 스트림을 자동으로 생성합니다. 이러한 리소스의 이름은 다음과 같습니다.

  • 로그 그룹: /aws/kinesis-analytics/MyApplication

  • 로그 스트림: kinesis-analytics-log-stream

애플리케이션을 실행합니다
  1. MyApplication페이지에서 [Run] 을 선택합니다. 작업을 확인합니다.

  2. 애플리케이션이 실행 중이면 페이지를 새로 고칩니다. 콘솔에 애플리케이션 그래프가 표시됩니다.

애플리케이션을 중지합니다.

MyApplication페이지에서 중지를 선택합니다. 작업을 확인합니다.

애플리케이션 업데이트

콘솔을 사용하여 애플리케이션 속성, 모니터링 설정, 애플리케이션 JAR의 위치 또는 파일 명칭과 같은 애플리케이션 설정을 업데이트할 수 있습니다. 애플리케이션 코드를 업데이트해야 하는 경우 Amazon S3 버킷에서 애플리케이션 JAR을 다시 로드할 수도 있습니다.

MyApplication페이지에서 구성을 선택합니다. 애플리케이션 설정을 업데이트하고 업데이트를 선택합니다.

애플리케이션 생성 및 실행 (AWS CLI)

이 섹션에서는 를 사용하여 Apache Flink용 관리 서비스 애플리케이션을 만들고 실행합니다. AWS CLI Apache Flink용 관리 서비스는 kinesisanalyticsv2 AWS CLI 명령을 사용하여 Apache Flink용 관리 서비스 응용 프로그램을 만들고 이와 상호 작용합니다.

권한 정책 생성

먼저 소스 스트림에서 두 개의 명령문, 즉 read 작업에 대한 권한을 부여하는 명령문과 싱크 스트림에서 write 작업에 대한 권한을 부여하는 명령문이 있는 권한 정책을 만듭니다. 그런 다음 정책을 IAM 역할(다음 섹션에서 생성)에 연결합니다. 따라서 Managed Service for Apache Flink가 역할을 맡을 때 서비스는 소스 스트림에서 읽고 싱크 스트림에 쓸 수 있는 권한이 있습니다.

다음 코드를 사용하여 AKReadSourceStreamWriteSinkStream 권한 정책을 생성합니다. username을 애플리케이션 코드를 저장하기 위해 Amazon S3 버킷을 만들 때 사용한 사용자 이름으로 바꿉니다. Amazon 리소스 이름(ARN)의 계정 ID(012345678901)를 사용자의 계정 ID로 바꿉니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": ["arn:aws:s3:::ka-app-code-username", "arn:aws:s3:::ka-app-code-username/*" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }

권한 정책을 생성하는 step-by-step 방법에 대한 지침은 IAM 사용 설명서의 자습서: 첫 번째 고객 관리형 정책 생성 및 연결을 참조하십시오.

참고

AWS SDK for Java를 사용하여 다른 Amazon 서비스에 액세스할 수 있습니다. Managed Service for Apache Flink는 SDK에 필요한 자격 증명을 애플리케이션과 연결된 서비스 실행 IAM 역할의 자격 증명으로 자동 설정합니다. 추가 단계는 필요 없습니다.

IAM 역할 생성

이 섹션에서는 Managed Service for Apache Flink 애플리케이션이 소스 스트림을 읽고 싱크 스트림에 쓰기 위해 맡을 수 있는 IAM 역할을 생성합니다.

Managed Service for Apache Flink는 권한 없이 스트림에 액세스할 수 없습니다. IAM 역할을 통해 이러한 권한을 부여합니다. 각 IAM 역할에는 두 가지 정책이 연결됩니다. 신뢰 정책은 Managed Service for Apache Flink가 역할을 취할 수 있는 권한을 부여하고, 권한 정책은 역할을 취한 후 Managed Service for Apache Flink에서 수행할 수 있는 작업을 결정합니다.

이전 섹션에서 생성한 권한 정책을 이 역할에 연결합니다.

IAM 역할을 생성하려면
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 창에서 역할, 역할 생성을 선택합니다.

  3. 신뢰할 수 있는 유형의 자격 증명 선택에서 AWS 서비스를 선택합니다. 이 역할을 사용할 서비스 선택에서 Kinesis를 선택합니다. 사용 사례 선택에서 Kinesis Analytics를 선택합니다.

    다음: 권한을 선택합니다.

  4. 권한 정책 연결 페이지에서 다음: 검토를 선택합니다. 역할을 생성한 후에 권한 정책을 연결합니다.

  5. 역할 생성 페이지에서 역할 이름으로 MF-stream-rw-role을 입력합니다. 역할 생성을 선택합니다.

    MF-stream-rw-role이라는 새 IAM 역할이 생성되었습니다. 그런 다음 역할의 신뢰 정책 및 권한 정책을 업데이트합니다.

  6. 역할에 권한 정책을 연결합니다.

    참고

    이 연습에서는 Managed Service for Apache Flink가 이 역할을 취하여 Kinesis 데이터 스트림(소스)에서 데이터를 읽고 출력을 다른 Kinesis 데이터 스트림에 씁니다. 따라서 이전 단계 권한 정책 생성에서 생성한 정책을 연결합니다.

    1. 요약 페이지에서 권한 탭을 선택합니다.

    2. 정책 연결을 선택합니다.

    3. 검색 상자에 AKReadSourceStreamWriteSinkStream(이전 섹션에서 생성한 정책)을 입력합니다.

    4. AK ReadSourceStreamWriteSinkStream 정책을 선택하고 Attach policy (Attach policy) 를 선택합니다.

이제 애플리케이션이 리소스에 액세스하는 데 사용하는 서비스 실행 역할이 생성되었습니다. 새 역할의 ARN을 기록합니다.

역할 생성에 대한 step-by-step 지침은 IAM 사용 설명서의 IAM 역할 생성 (콘솔) 을 참조하십시오.

Apache Flink용 관리형 서비스 애플리케이션 생성
  1. 다음 JSON 코드를 create_request.json이라는 파일에 저장합니다. 샘플 역할 ARN을 이전에 생성한 역할을 위한 ARN으로 바꿉니다. 버킷 ARN 접미사(username)를 이전 섹션에서 선택한 접미사로 바꿉니다. 서비스 실행 역할의 샘플 계정 ID(012345678901)를 해당 계정 ID로 바꿉니다.

    { "ApplicationName": "test", "ApplicationDescription": "my java test app", "RuntimeEnvironment": "FLINK-1_6", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username", "FileKey": "java-getting-started-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "flink.stream.initpos" : "LATEST", "aws.region" : "us-west-2", "AggregationEnabled" : "false" } }, { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2" } } ] } } }
  2. 위의 요청과 함께 CreateApplication 작업을 실행하여 애플리케이션을 생성합니다.

    aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json

애플리케이션이 생성되었습니다. 다음 단계에서는 애플리케이션을 시작합니다.

애플리케이션 시작

이 섹션에서는 StartApplication 작업을 사용하여 애플리케이션을 시작합니다.

애플리케이션을 시작하려면
  1. 다음 JSON 코드를 start_request.json이라는 파일에 저장합니다.

    { "ApplicationName": "test", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
  2. 위의 요청과 함께 StartApplication 작업을 실행하여 애플리케이션을 시작합니다.

    aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json

애플리케이션이 실행됩니다. Amazon CloudWatch 콘솔에서 Apache Flink용 관리형 서비스 지표를 확인하여 애플리케이션이 작동하는지 확인할 수 있습니다.

애플리케이션을 중지하십시오.

이 섹션에서는 StopApplication 작업을 사용하여 애플리케이션을 중지합니다.

애플리케이션을 중지하려면
  1. 다음 JSON 코드를 stop_request.json이라는 파일에 저장합니다.

    { "ApplicationName": "test" }
  2. 다음 요청과 함께 StopApplication 작업을 실행하여 애플리케이션을 중지합니다.

    aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json

애플리케이션이 중지됩니다.

CloudWatch 로깅 옵션 추가

를 AWS CLI 사용하여 Amazon CloudWatch 로그 스트림을 애플리케이션에 추가할 수 있습니다. 애플리케이션에서 CloudWatch 로그를 사용하는 방법에 대한 자세한 내용은 을 참조하십시오애플리케이션 로깅 설정.

환경 속성 업데이트

이 섹션에서는 애플리케이션 코드를 다시 컴파일하지 않고도 UpdateApplication 작업을 사용하여 애플리케이션의 환경 속성을 변경할 수 있습니다. 이 예제에서는 원본 스트림과 대상 스트림의 리전을 변경합니다.

애플리케이션의 환경 속성 업데이트
  1. 다음 JSON 코드를 update_properties_request.json이라는 파일에 저장합니다.

    {"ApplicationName": "test", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "EnvironmentPropertyUpdates": { "PropertyGroups": [ { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "flink.stream.initpos" : "LATEST", "aws.region" : "us-west-2", "AggregationEnabled" : "false" } }, { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2" } } ] } } }
  2. 이전 요청과 함께 UpdateApplication 작업을 실행하여 환경 속성을 업데이트하십시오.

    aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
애플리케이션 코드 업데이트

새 버전의 코드 패키지로 애플리케이션 코드를 업데이트해야 하는 경우 UpdateApplication AWS CLI 작업을 사용합니다.

를 사용하려면 Amazon S3 버킷에서 이전 코드 패키지를 삭제하고 새 버전을 업로드한 다음 동일한 Amazon S3 버킷과 객체 이름을 지정하여 UpdateApplication 호출합니다. AWS CLI애플리케이션이 새 코드 패키지로 다시 시작됩니다.

다음 예 UpdateApplication 작업 요청은 애플리케이션 코드를 다시 로드하고 애플리케이션을 다시 시작합니다. CurrentApplicationVersionId를 현재 애플리케이션 버전으로 업데이트하세요. ListApplications 또는 DescribeApplication 작업을 사용하여 현재 애플리케이션 버전을 확인할 수 있습니다. 버킷 명칭 접미사 (<username>)를 두 개의 Amazon Kinesis 데이터 스트림을 생성합니다. 섹션에서 선택한 접미사로 업데이트합니다.

{ "ApplicationName": "test", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "ApplicationCodeConfigurationUpdate": { "CodeContentUpdate": { "S3ContentLocationUpdate": { "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username", "FileKeyUpdate": "java-getting-started-1.0.jar" } } } } }

4단계: AWS 리소스 정리

이 섹션에는 시작하기 자습서에서 만든 AWS 리소스를 정리하는 절차가 포함되어 있습니다.

Apache Flink용 관리형 서비스 애플리케이션 삭제

  1. https://console.aws.amazon.com/kinesis에서 Kinesis 콘솔을 엽니다.

  2. Apache Flink용 관리형 서비스 패널에서 선택합니다. MyApplication

  3. 구성을 선택합니다.

  4. 스냅샷 섹션에서 비활성화를 선택한 다음 업데이트를 선택합니다.

  5. 애플리케이션 페이지에서 삭제를 선택한 다음 삭제를 확인합니다.

Kinesis 데이터 스트림을 삭제합니다.

  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Kinesis Data Streams 패널에서 을 선택합니다. ExampleInputStream

  3. ExampleInputStream페이지에서 Kinesis 스트림 삭제를 선택한 다음 삭제를 확인합니다.

  4. Kinesis 스트림 페이지에서 를 선택하고 작업을 선택하고 삭제를 선택한 다음 삭제를 확인합니다. ExampleOutputStream

Amazon S3 객체 및 버킷을 삭제합니다.

  1. https://console.aws.amazon.com/s3/에서 S3 콘솔을 엽니다.

  2. ka-app-code- 버킷을 선택합니다. <username>

  3. 삭제를 선택한 후 버킷 이름을 입력하여 삭제를 확인합니다.

IAM 리소스를 삭제합니다.

  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 바에서 정책을 선택합니다.

  3. 필터 컨트롤에서 kinesis를 입력합니다.

  4. kinesis-analytics-service- MyApplication -us-west-2 정책을 선택합니다.

  5. 정책 작업을 선택한 후 삭제를 선택합니다.

  6. 탐색 모음에서 역할을 선택합니다.

  7. 키네시스-애널리틱스- -US-West-2 역할을 선택합니다. MyApplication

  8. 역할 삭제를 선택하고 삭제를 확인합니다.

CloudWatch 리소스 삭제하기

  1. https://console.aws.amazon.com/cloudwatch/ 에서 CloudWatch 콘솔을 엽니다.

  2. 탐색 바에서 로그를 선택합니다.

  3. MyApplication/aws/kinesis-analytics/ 로그 그룹을 선택합니다.

  4. 로그 그룹 삭제를 선택한 다음 삭제를 확인합니다.

Apache Flink용 관리형 서비스의 이전 버전 (레거시) 예제

참고

현재 예제는 을 참조하십시오. 예제

이 섹션은 Managed Service for Apache Flink에서 애플리케이션을 만들고 사용하는 방법의 예제들을 제공합니다. 여기에는 Apache Flink 애플리케이션용 관리 서비스를 만들고 결과를 테스트하는 데 도움이 되는 예제 코드와 step-by-step 지침이 포함되어 있습니다.

이 예제들을 살펴보기 전에 먼저 다음 사항을 검토하는 것이 좋습니다.

참고

이 예제들은 사용자가 미국 서부(오레곤) 리전(us-west-2)을 사용하고 있다고 가정합니다. 다른 리전을 사용하는 경우 애플리케이션 코드, 명령, IAM 역할을 적절하게 업데이트하세요.

DataStream API 예제

다음 예제는 Apache Flink DataStream API를 사용하여 애플리케이션을 만드는 방법을 보여줍니다.

예: 텀블링 윈도우

참고

현재 예제는 을 참조하십시오. 예제

이 연습에서는 텀블링 윈도우를 사용하여 데이터를 집계하는 Managed Service for Apache Flink 애플리케이션을 만들어 봅니다. Flink에서 집계(aggregration)는 기본적으로 활성화되어 있습니다. 이것을 비활성화하려면 다음 명령을 사용합니다.

sink.producer.aggregation-enabled' = 'false'
참고

이 연습에 필수 사전 조건을 설정하려면 먼저 튜토리얼: 를 사용하여 시작하기 DataStream API 연습을 완료하세요.

종속 리소스 생성

이 연습을 위해 Managed Service for Apache Flink 애플리케이션을 생성하기 전에 다음과 같은 종속 리소스를 생성해야 합니다.

  • 두 개의 Kinesis Data Streams(ExampleInputStreamExampleOutputStream)

  • 애플리케이션 코드를 저장할 Amazon S3 버킷(ka-app-code-<username>)

콘솔을 사용하여 Kinesis 스트림과 Amazon S3 버킷을 만들 수 있습니다. 이러한 리소스를 만드는 방법 설명은 다음 주제를 참조하세요.

입력 스트림에 샘플 레코드 쓰기

이 섹션에서는 Python 스크립트를 사용하여 애플리케이션에서 처리할 샘플 레코드를 스트림에 쓰기 합니다.

참고

이 섹션에서는 AWS SDK for Python (Boto)이 필요합니다.

  1. 다음 콘텐츠를 가진 stock.py이라는 파일을 생성합니다:

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { 'event_time': datetime.datetime.now().isoformat(), 'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']), 'price': round(random.random() * 100, 2)} def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey") if __name__ == '__main__': generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  2. stock.py 스크립트를 실행합니다.

    $ python stock.py

    자습서의 나머지 부분을 완료하는 동안 스크립트가 계속 돌아가게 둡니다.

애플리케이션 코드 다운로드 및 검토

이 예제의 Java 응용 프로그램 코드는 에서 사용할 수 GitHub 있습니다. 애플리케이션 코드를 다운로드하려면 다음을 수행하세요.

  1. 아직 설치하지 않았다면 Git 클라이언트를 설치합니다. 자세한 정보는 Git 설치를 참조하세요.

  2. 다음 명령을 사용하여 원격 리포지토리를 복제합니다:

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. amazon-kinesis-data-analytics-java-examples/TumblingWindow 디렉터리로 이동합니다.

애플리케이션 코드는 TumblingWindowStreamingJob.java 파일에 있습니다. 애플리케이션 코드에 대해 다음을 유의하십시오:

  • 애플리케이션은 Kinesis 소스를 사용하여 소스 스트림에서 읽습니다. 다음 스니펫은 Kinesis 소스를 생성합니다.

    return env.addSource(new FlinkKinesisConsumer<>(inputStreamName, new SimpleStringSchema(), inputProperties));
  • 다음 가져오기 설명을 추가합니다.

    import org.apache.flink.streaming.api.windowing.assigners.TumblingProcessingTimeWindows; //flink 1.13 onward
  • 이 애플리케이션은 timeWindow 연산자를 사용하여 5초 동안의 텀블링 윈도우에서 각 주식 기호에 대한 값의 개수를 찾습니다. 다음 코드는 연산자를 생성하고 집계된 데이터를 새로운 Kinesis Data Streams 싱크로 전송합니다.

    input.flatMap(new Tokenizer()) // Tokenizer for generating words .keyBy(0) // Logically partition the stream for each word .window(TumblingProcessingTimeWindows.of(Time.seconds(5))) //Flink 1.13 onward .sum(1) // Sum the number of words per partition .map(value -> value.f0 + "," + value.f1.toString() + "\n") .addSink(createSinkFromStaticConfig());
애플리케이션 코드를 컴파일하십시오.

애플리케이션을 컴파일하려면 다음을 수행하세요.

  1. 아직 Java 및 Maven을 설치하지 않았으면 설치합니다. 자세한 정보는 튜토리얼: 를 사용하여 시작하기 DataStream API자습서의 필수 사전 요구 사항 완료 섹션을 참조하세요.

  2. 다음 명령을 사용하여 애플리케이션을 컴파일합니다.

    mvn package -Dflink.version=1.15.3
    참고

    제공된 소스 코드는 Java 11의 라이브러리를 사용합니다.

애플리케이션을 컴파일하면 애플리케이션 JAR 파일(target/aws-kinesis-analytics-java-apps-1.0.jar)이 생성됩니다.

아파치 플링크 스트리밍 자바 코드를 업로드하세요.

이 섹션에서는 종속 리소스 생성 섹션에서 생성한 Amazon S3 버킷에 애플리케이션 코드를 업로드합니다.

  1. Amazon S3 콘솔에서 ka-app-code- <username>버킷을 선택하고 업로드를 선택합니다.

  2. 파일 선택 단계에서 파일 추가를 선택합니다. 이전 단계에서 생성한 aws-kinesis-analytics-java-apps-1.0.jar 파일로 이동합니다.

  3. 개체 정보에 대한 설정은 변경할 필요가 없으므로 업로드를 선택합니다.

이제 애플리케이션 코드가 애플리케이션에서 액세스할 수 있는 Amazon S3 버킷에 저장됩니다.

Apache Flink용 관리형 서비스 애플리케이션을 생성하고 실행합니다.

콘솔을 사용하여 애플리케이션을 생성, 구성, 업데이트 및 실행하려면 다음 단계를 수행하세요.

애플리케이션 생성
  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Managed Service for Apache Flink 대시보드에서 분석 애플리케이션 생성을 선택합니다.

  3. Managed Service for Apache Flink - 애플리케이션 생성 페이지에서 다음과 같이 애플리케이션 세부 정보를 제공합니다.

    • 애플리케이션 명칭MyApplication을 입력합니다.

    • 런타임에서 Apache Flink를 선택합니다.

      참고

      Managed Service for Apache Flink는 Apache Flink 버전 1.15.2를 사용합니다.

    • 버전 풀다운은 Apache Flink 버전 1.15.2(권장 버전)로 그대로 두세요.

  4. 액세스 권한에서 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  5. 애플리케이션 생성을 선택합니다.

참고

콘솔을 사용하여 Managed Service for Apache Flink 애플리케이션을 만들 때 내 애플리케이션에 대한 IAM 역할 및 정책을 둘 수 있는 옵션이 있습니다. 귀하의 애플리케이션은 이 역할 및 정책을 사용하여 종속 리소스에 액세스합니다. 이러한 IAM 리소스의 이름은 애플리케이션 명칭과 리전을 사용하여 다음과 같이 지정됩니다.

  • 정책: kinesis-analytics-service-MyApplication-us-west-2

  • 역할: kinesisanalytics-MyApplication-us-west-2

IAM 정책 편집

IAM 정책을 편집하여 Kinesis Data Streams에 액세스할 수 있는 권한을 추가합니다.

  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 여세요.

  2. 정책을 선택하세요. 이전 섹션에서 콘솔이 생성한 kinesis-analytics-service-MyApplication-us-west-2 정책을 선택합니다.

  3. 요약 페이지에서 정책 편집을 선택합니다. JSON 탭을 선택합니다.

  4. 다음 정책 예제의 강조 표시된 부분을 정책에 추가하세요. 샘플 계정 ID(012345678901)를 내 계정 ID로 바꿉니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "logs:DescribeLogGroups", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*", "arn:aws:s3:::ka-app-code-<username>/aws-kinesis-analytics-java-apps-1.0.jar" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": "logs:DescribeLogStreams", "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": "logs:PutLogEvents", "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" }, { "Sid": "ListCloudwatchLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }
애플리케이션 구성
  1. MyApplication페이지에서 구성을 선택합니다.

  2. 애플리케이션 구성 페이지에서 코드 위치를 입력합니다.

    • Amazon S3 버킷의 경우 ka-app-code-<username>를 입력합니다.

    • Amazon S3 객체 경로에는 aws-kinesis-analytics-java-apps-1.0.jar를 입력합니다.

  3. 애플리케이션 리소스에 대한 액세스 아래에서 액세스 권한의 경우 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  4. 모니터링에서 지표 수준 모니터링애플리케이션으로 설정되어 있는지 확인합니다.

  5. CloudWatch 로깅의 경우 활성화 확인란을 선택합니다.

  6. 업데이트를 선택합니다.

참고

CloudWatch 로깅을 활성화하도록 선택하면 Apache Flink용 관리형 서비스에서 로그 그룹과 로그 스트림을 자동으로 생성합니다. 이러한 리소스의 이름은 다음과 같습니다.

  • 로그 그룹: /aws/kinesis-analytics/MyApplication

  • 로그 스트림: kinesis-analytics-log-stream

이 로그 스트림은 애플리케이션을 모니터링하는 데 사용됩니다. 이 로그 스트림은 애플리케이션이 결과를 전송하는 데 사용하는 로그 스트림과 다릅니다.

애플리케이션을 실행합니다
  1. MyApplication페이지에서 [Run] 을 선택합니다. 스냅샷 없이 실행 옵션을 선택한 상태로 두고 작업을 확인합니다.

  2. 애플리케이션이 실행 중이면 페이지를 새로 고칩니다. 콘솔에 애플리케이션 그래프가 표시됩니다.

CloudWatch 콘솔에서 Apache Flink용 관리 서비스 메트릭을 확인하여 애플리케이션이 작동하는지 확인할 수 있습니다.

AWS 리소스 정리

이 섹션에는 텀블링 윈도우 튜토리얼에서 만든 AWS 리소스를 정리하는 절차가 포함되어 있습니다.

Apache Flink용 관리형 서비스 애플리케이션 삭제
  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Apache Flink용 관리형 서비스 패널에서 선택합니다. MyApplication

  3. 애플리케이션 페이지에서 삭제를 선택한 다음 삭제를 확인합니다.

Kinesis 데이터 스트림을 삭제합니다.
  1. https://console.aws.amazon.com/kinesis에서 Kinesis 콘솔을 엽니다.

  2. Kinesis Data Streams 패널에서 을 선택합니다. ExampleInputStream

  3. ExampleInputStream페이지에서 Kinesis 스트림 삭제를 선택한 다음 삭제를 확인합니다.

  4. Kinesis 스트림 페이지에서 를 선택하고 작업을 선택하고 삭제를 선택한 다음 삭제를 확인합니다. ExampleOutputStream

Amazon S3 객체 및 버킷을 삭제합니다.
  1. https://console.aws.amazon.com/s3/에서 S3 콘솔을 엽니다.

  2. ka-app-code- 버킷을 선택합니다. <username>

  3. 삭제를 선택한 후 버킷 이름을 입력하여 삭제를 확인합니다.

IAM 리소스를 삭제합니다.
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 바에서 정책을 선택합니다.

  3. 필터 컨트롤에서 kinesis를 입력합니다.

  4. kinesis-analytics-service- MyApplication -us-west-2 정책을 선택합니다.

  5. 정책 작업을 선택한 후 삭제를 선택합니다.

  6. 탐색 모음에서 역할을 선택합니다.

  7. 키네시스-애널리틱스- -US-West-2 역할을 선택합니다. MyApplication

  8. 역할 삭제를 선택하고 삭제를 확인합니다.

CloudWatch 리소스 삭제하기
  1. https://console.aws.amazon.com/cloudwatch/ 에서 CloudWatch 콘솔을 엽니다.

  2. 탐색 바에서 로그를 선택합니다.

  3. MyApplication/aws/kinesis-analytics/ 로그 그룹을 선택합니다.

  4. 로그 그룹 삭제를 선택한 다음 삭제를 확인합니다.

예: 슬라이딩 윈도우

참고

현재 예제는 을 참조하십시오예제.

참고

이 연습에 필수 사전 조건을 설정하려면 먼저 튜토리얼: 를 사용하여 시작하기 DataStream API 연습을 완료하세요.

종속 리소스 생성

이 연습을 위해 Managed Service for Apache Flink 애플리케이션을 생성하기 전에 다음과 같은 종속 리소스를 생성해야 합니다.

  • 두 개의 Kinesis Data Streams(ExampleInputStreamExampleOutputStream).

  • 애플리케이션 코드를 저장할 Amazon S3 버킷(ka-app-code-<username>)

콘솔을 사용하여 Kinesis 스트림과 Amazon S3 버킷을 만들 수 있습니다. 이러한 리소스를 만드는 방법 설명은 다음 주제를 참조하세요.

입력 스트림에 샘플 레코드 쓰기

이 섹션에서는 Python 스크립트를 사용하여 애플리케이션에서 처리할 샘플 레코드를 스트림에 쓰기 합니다.

참고

이 섹션에서는 AWS SDK for Python (Boto)이 필요합니다.

  1. 다음 콘텐츠를 가진 stock.py이라는 파일을 생성합니다:

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { "EVENT_TIME": datetime.datetime.now().isoformat(), "TICKER": random.choice(["AAPL", "AMZN", "MSFT", "INTC", "TBV"]), "PRICE": round(random.random() * 100, 2), } def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey" ) if __name__ == "__main__": generate(STREAM_NAME, boto3.client("kinesis"))
  2. stock.py 스크립트를 실행합니다.

    $ python stock.py

    자습서의 나머지 부분을 완료하는 동안 스크립트가 계속 돌아가게 둡니다.

애플리케이션 코드 다운로드 및 검토

이 예제의 Java 응용 프로그램 코드는 에서 사용할 수 GitHub 있습니다. 애플리케이션 코드를 다운로드하려면 다음을 수행하세요.

  1. 아직 설치하지 않았다면 Git 클라이언트를 설치합니다. 자세한 정보는 Git 설치를 참조하세요.

  2. 다음 명령을 사용하여 원격 리포지토리를 복제합니다:

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. amazon-kinesis-data-analytics-java-examples/SlidingWindow 디렉터리로 이동합니다.

애플리케이션 코드는 SlidingWindowStreamingJobWithParallelism.java 파일에 있습니다. 애플리케이션 코드에 대해 다음을 유의하십시오:

  • 애플리케이션은 Kinesis 소스를 사용하여 소스 스트림에서 읽습니다. 다음 스니펫은 Kinesis 소스를 생성합니다.

    return env.addSource(new FlinkKinesisConsumer<>(inputStreamName, new SimpleStringSchema(), inputProperties));
  • 이 애플리케이션은 timeWindow 연산자를 사용하여 5초씩 슬라이드되는 10초 윈도우에서 각 주식 종목의 최소값을 찾습니다. 다음 코드는 연산자를 생성하고 집계된 데이터를 새로운 Kinesis Data Streams 싱크로 전송합니다.

  • 다음 가져오기 설명을 추가합니다.

    import org.apache.flink.streaming.api.windowing.assigners.TumblingProcessingTimeWindows; //flink 1.13 onward
  • 이 애플리케이션은 timeWindow 연산자를 사용하여 5초 동안의 텀블링 윈도우에서 각 주식 기호에 대한 값의 개수를 찾습니다. 다음 코드는 연산자를 생성하고 집계된 데이터를 새로운 Kinesis Data Streams 싱크로 전송합니다.

    input.flatMap(new Tokenizer()) // Tokenizer for generating words .keyBy(0) // Logically partition the stream for each word .window(TumblingProcessingTimeWindows.of(Time.seconds(5))) //Flink 1.13 onward .sum(1) // Sum the number of words per partition .map(value -> value.f0 + "," + value.f1.toString() + "\n") .addSink(createSinkFromStaticConfig());
애플리케이션 코드를 컴파일하십시오.

애플리케이션을 컴파일하려면 다음을 수행하세요.

  1. 아직 Java 및 Maven을 설치하지 않았으면 설치합니다. 자세한 정보는 튜토리얼: 를 사용하여 시작하기 DataStream API자습서의 필수 사전 요구 사항 완료 섹션을 참조하세요.

  2. 다음 명령을 사용하여 애플리케이션을 컴파일합니다.

    mvn package -Dflink.version=1.15.3
    참고

    제공된 소스 코드는 Java 11의 라이브러리를 사용합니다.

애플리케이션을 컴파일하면 애플리케이션 JAR 파일(target/aws-kinesis-analytics-java-apps-1.0.jar)이 생성됩니다.

아파치 플링크 스트리밍 자바 코드를 업로드하세요.

이 섹션에서는 종속 리소스 생성 섹션에서 생성한 Amazon S3 버킷에 애플리케이션 코드를 업로드합니다.

  1. Amazon S3 콘솔에서 ka-app-code- <username>버킷을 선택한 다음 업로드를 선택합니다.

  2. 파일 선택 단계에서 파일 추가를 선택합니다. 이전 단계에서 생성한 aws-kinesis-analytics-java-apps-1.0.jar 파일로 이동합니다.

  3. 개체 정보에 대한 설정은 변경할 필요가 없으므로 업로드를 선택합니다.

이제 애플리케이션 코드가 애플리케이션에서 액세스할 수 있는 Amazon S3 버킷에 저장됩니다.

Apache Flink용 관리형 서비스 애플리케이션을 생성하고 실행합니다.

콘솔을 사용하여 애플리케이션을 생성, 구성, 업데이트 및 실행하려면 다음 단계를 수행하세요.

애플리케이션 생성
  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Managed Service for Apache Flink 대시보드에서 분석 애플리케이션 생성을 선택합니다.

  3. Managed Service for Apache Flink - 애플리케이션 생성 페이지에서 다음과 같이 애플리케이션 세부 정보를 제공합니다.

    • 애플리케이션 명칭MyApplication을 입력합니다.

    • 런타임에서 Apache Flink를 선택합니다.

    • 버전 풀다운은 Apache Flink 버전 1.15.2(권장 버전)로 그대로 두세요.

  4. 액세스 권한에서 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  5. 애플리케이션 생성을 선택합니다.

참고

콘솔을 사용하여 Managed Service for Apache Flink 애플리케이션을 만들 때 내 애플리케이션에 대한 IAM 역할 및 정책을 둘 수 있는 옵션이 있습니다. 귀하의 애플리케이션은 이 역할 및 정책을 사용하여 종속 리소스에 액세스합니다. 이러한 IAM 리소스의 이름은 애플리케이션 명칭과 리전을 사용하여 다음과 같이 지정됩니다.

  • 정책: kinesis-analytics-service-MyApplication-us-west-2

  • 역할: kinesisanalytics-MyApplication-us-west-2

IAM 정책 편집

IAM 정책을 편집하여 Kinesis Data Streams에 액세스할 수 있는 권한을 추가합니다.

  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 여세요.

  2. 정책을 선택하세요. 이전 섹션에서 콘솔이 생성한 kinesis-analytics-service-MyApplication-us-west-2 정책을 선택합니다.

  3. 요약 페이지에서 정책 편집을 선택합니다. JSON 탭을 선택합니다.

  4. 다음 정책 예제의 강조 표시된 부분을 정책에 추가하세요. 샘플 계정 ID(012345678901)를 내 계정 ID로 바꿉니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "logs:DescribeLogGroups", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*", "arn:aws:s3:::ka-app-code-<username>/aws-kinesis-analytics-java-apps-1.0.jar" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": "logs:DescribeLogStreams", "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": "logs:PutLogEvents", "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" }, { "Sid": "ListCloudwatchLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }
애플리케이션 구성
  1. MyApplication페이지에서 구성을 선택합니다.

  2. 애플리케이션 구성 페이지에서 코드 위치를 입력합니다.

    • Amazon S3 버킷의 경우 ka-app-code-<username>를 입력합니다.

    • Amazon S3 객체 경로에는 aws-kinesis-analytics-java-apps-1.0.jar를 입력합니다.

  3. 애플리케이션 리소스에 대한 액세스 아래에서 액세스 권한의 경우 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  4. 모니터링에서 지표 수준 모니터링애플리케이션으로 설정되어 있는지 확인합니다.

  5. CloudWatch 로깅의 경우 활성화 확인란을 선택합니다.

  6. 업데이트를 선택합니다.

참고

Amazon CloudWatch 로깅을 활성화하도록 선택하면 Apache Flink용 관리형 서비스에서 로그 그룹과 로그 스트림을 자동으로 생성합니다. 이러한 리소스의 이름은 다음과 같습니다.

  • 로그 그룹: /aws/kinesis-analytics/MyApplication

  • 로그 스트림: kinesis-analytics-log-stream

이 로그 스트림은 애플리케이션을 모니터링하는 데 사용됩니다. 이 로그 스트림은 애플리케이션이 결과를 전송하는 데 사용하는 로그 스트림과 다릅니다.

애플리케이션 병렬성을 구성합니다.

이 애플리케이션 예제에서는 작업의 병렬 실행을 사용합니다. 다음 애플리케이션 코드는 min 연산자의 병렬 처리를 설정합니다.

.setParallelism(3) // Set parallelism for the min operator

애플리케이션 병렬 처리는 기본값이 1인 프로비저닝된 병렬 처리보다 클 수 없습니다. 애플리케이션의 병렬성을 높이려면 다음 작업을 사용하십시오. AWS CLI

aws kinesisanalyticsv2 update-application --application-name MyApplication --current-application-version-id <VersionId> --application-configuration-update "{\"FlinkApplicationConfigurationUpdate\": { \"ParallelismConfigurationUpdate\": {\"ParallelismUpdate\": 5, \"ConfigurationTypeUpdate\": \"CUSTOM\" }}}"

DescribeApplication또는 ListApplications작업을 사용하여 현재 애플리케이션 버전 ID를 검색할 수 있습니다.

애플리케이션을 실행합니다

애플리케이션을 실행하고 Apache Flink 대시보드를 연 다음 원하는 Flink 작업을 선택하면 Flink 작업 그래프를 볼 수 있습니다.

CloudWatch 콘솔에서 Apache Flink용 관리 서비스 메트릭을 확인하여 애플리케이션이 작동하는지 확인할 수 있습니다.

리소스를 정리하세요. AWS

이 섹션에는 슬라이딩 윈도우 튜토리얼에서 만든 AWS 리소스를 정리하는 절차가 포함되어 있습니다.

Apache Flink용 관리 서비스 애플리케이션을 삭제하십시오.
  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Apache Flink용 관리형 서비스 패널에서 선택합니다. MyApplication

  3. 애플리케이션 페이지에서 삭제를 선택한 다음 삭제를 확인합니다.

Kinesis 데이터 스트림을 삭제합니다.
  1. https://console.aws.amazon.com/kinesis에서 Kinesis 콘솔을 엽니다.

  2. Kinesis Data Streams 패널에서 을 선택합니다. ExampleInputStream

  3. ExampleInputStream페이지에서 Kinesis 스트림 삭제를 선택한 다음 삭제를 확인합니다.

  4. Kinesis 스트림 페이지에서 를 선택하고 작업을 선택하고 삭제를 선택한 다음 삭제를 확인합니다. ExampleOutputStream

Amazon S3 객체 및 버킷을 삭제합니다.
  1. https://console.aws.amazon.com/s3/에서 S3 콘솔을 엽니다.

  2. ka-app-code- 버킷을 선택합니다. <username>

  3. 삭제를 선택한 후 버킷 이름을 입력하여 삭제를 확인합니다.

IAM 리소스를 삭제합니다.
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 바에서 정책을 선택합니다.

  3. 필터 컨트롤에서 kinesis를 입력합니다.

  4. kinesis-analytics-service- MyApplication -us-west-2 정책을 선택합니다.

  5. 정책 작업을 선택한 후 삭제를 선택합니다.

  6. 탐색 모음에서 역할을 선택합니다.

  7. 키네시스-애널리틱스- -US-West-2 역할을 선택합니다. MyApplication

  8. 역할 삭제를 선택하고 삭제를 확인합니다.

CloudWatch 리소스 삭제하기
  1. https://console.aws.amazon.com/cloudwatch/ 에서 CloudWatch 콘솔을 엽니다.

  2. 탐색 바에서 로그를 선택합니다.

  3. MyApplication/aws/kinesis-analytics/ 로그 그룹을 선택합니다.

  4. 로그 그룹 삭제를 선택한 다음 삭제를 확인합니다.

예: Amazon S3 버킷에 쓰기

이 연습에서는 Kinesis Data Stream을 소스로 사용하고 Amazon S3 버킷을 싱크로 사용하는 Managed Service for Apache Flink를 생성합니다. 싱크를 사용하여 Amazon S3 콘솔의 애플리케이션 출력을 확인할 수 있습니다.

참고

이 연습에 필수 사전 조건을 설정하려면 먼저 튜토리얼: 를 사용하여 시작하기 DataStream API 연습을 완료하세요.

종속 리소스 생성

이 연습을 위해 Managed Service for Apache Flink를 생성하기 전에 먼저 다음과 같은 종속 리소스를 생성해야 합니다.

  • Kinesis Data Streams(ExampleInputStream).

  • 애플리케이션 코드와 출력을 저장할 Amazon S3 버킷(ka-app-code-<username>)

참고

Managed Service for Apache Flink는 Managed Service for Apache Flink에서 서버 측 암호화가 활성화된 상태에서는 Amazon S3에 데이터를 쓸 수 없습니다.

콘솔을 사용하여 Kinesis 스트림과 Amazon S3 버킷을 만들 수 있습니다. 이러한 리소스를 만드는 방법 설명은 다음 주제를 참조하세요.

애플리케이션은 다음 CloudWatch 리소스가 아직 없는 경우 해당 리소스를 생성합니다.

  • /AWS/KinesisAnalytics-java/MyApplication라는 로그 그룹.

  • kinesis-analytics-log-stream라는 로그 스트림.

입력 스트림에 샘플 레코드 쓰기

이 섹션에서는 Python 스크립트를 사용하여 애플리케이션에서 처리할 샘플 레코드를 스트림에 쓰기 합니다.

참고

이 섹션에서는 AWS SDK for Python (Boto)이 필요합니다.

  1. 다음 콘텐츠를 가진 stock.py이라는 파일을 생성합니다:

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { 'event_time': datetime.datetime.now().isoformat(), 'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']), 'price': round(random.random() * 100, 2)} def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey") if __name__ == '__main__': generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  2. stock.py 스크립트를 실행합니다.

    $ python stock.py

    자습서의 나머지 부분을 완료하는 동안 스크립트가 계속 돌아가게 둡니다.

애플리케이션 코드 다운로드 및 검토

이 예제의 Java 응용 프로그램 코드는 에서 사용할 수 GitHub 있습니다. 애플리케이션 코드를 다운로드하려면 다음을 수행하세요.

  1. 아직 설치하지 않았다면 Git 클라이언트를 설치합니다. 자세한 정보는 Git 설치를 참조하세요.

  2. 다음 명령을 사용하여 원격 리포지토리를 복제합니다:

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. amazon-kinesis-data-analytics-java-examples/S3Sink 디렉터리로 이동합니다.

애플리케이션 코드는 S3StreamingSinkJob.java 파일에 있습니다. 애플리케이션 코드에 대해 다음을 유의하십시오:

  • 애플리케이션은 Kinesis 소스를 사용하여 소스 스트림에서 읽습니다. 다음 스니펫은 Kinesis 소스를 생성합니다.

    return env.addSource(new FlinkKinesisConsumer<>(inputStreamName, new SimpleStringSchema(), inputProperties));
  • 가져오기 설명을 다음과 같이 추가합니다.

    import org.apache.flink.streaming.api.windowing.assigners.TumblingProcessingTimeWindows;
  • 이 애플리케이션은 Apache Flink S3 싱크를 사용하여 Amazon S3에 쓰기 합니다.

    싱크는 텀블링 윈도우에서 메시지를 읽고, 메시지를 S3 버킷 객체로 인코딩하고, 인코딩된 객체를 S3 싱크로 보냅니다. 다음 코드는 Amazon S3로 전송할 객체를 인코딩합니다.

    input.map(value -> { // Parse the JSON JsonNode jsonNode = jsonParser.readValue(value, JsonNode.class); return new Tuple2<>(jsonNode.get("ticker").toString(), 1); }).returns(Types.TUPLE(Types.STRING, Types.INT)) .keyBy(v -> v.f0) // Logically partition the stream for each word .window(TumblingProcessingTimeWindows.of(Time.minutes(1))) .sum(1) // Count the appearances by ticker per partition .map(value -> value.f0 + " count: " + value.f1.toString() + "\n") .addSink(createS3SinkFromStaticConfig());
참고

이 애플리케이션은 Flink StreamingFileSink 객체를 사용하여 Amazon S3에 쓰기 합니다. 에 대한 자세한 내용은 Apache Flink 설명서를 참조하십시오 StreamingFileSink. StreamingFileSink

애플리케이션 코드 수정

이 섹션에서는 Amazon S3 버킷에 출력을 쓰기 하도록 애플리케이션 코드를 수정합니다.

다음 줄을 사용자 이름으로 업데이트하여 애플리케이션의 출력 위치를 지정하세요.

private static final String s3SinkPath = "s3a://ka-app-code-<username>/data";
애플리케이션 코드 컴파일

애플리케이션을 컴파일하려면 다음을 수행하세요.

  1. 아직 Java 및 Maven을 설치하지 않았으면 설치합니다. 자세한 정보는 튜토리얼: 를 사용하여 시작하기 DataStream API자습서의 필수 사전 요구 사항 완료 섹션을 참조하세요.

  2. 다음 명령을 사용하여 애플리케이션을 컴파일합니다.

    mvn package -Dflink.version=1.15.3

애플리케이션을 컴파일하면 애플리케이션 JAR 파일(target/aws-kinesis-analytics-java-apps-1.0.jar)이 생성됩니다.

참고

제공된 소스 코드는 Java 11의 라이브러리를 사용합니다.

아파치 플링크 스트리밍 자바 코드를 업로드하세요.

이 섹션에서는 종속 리소스 생성 섹션에서 생성한 Amazon S3 버킷에 애플리케이션 코드를 업로드합니다.

  1. Amazon S3 콘솔에서 ka-app-code- <username>버킷을 선택하고 코드 폴더로 이동한 다음 Upload를 선택합니다.

  2. 파일 선택 단계에서 파일 추가를 선택합니다. 이전 단계에서 생성한 aws-kinesis-analytics-java-apps-1.0.jar 파일로 이동합니다.

  3. 개체 정보에 대한 설정은 변경할 필요가 없으므로 업로드를 선택합니다.

이제 애플리케이션 코드가 애플리케이션에서 액세스할 수 있는 Amazon S3 버킷에 저장됩니다.

Apache Flink용 관리형 서비스 애플리케이션을 생성하고 실행합니다.

콘솔을 사용하여 애플리케이션을 생성, 구성, 업데이트 및 실행하려면 다음 단계를 수행하세요.

애플리케이션 생성
  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Managed Service for Apache Flink 대시보드에서 분석 애플리케이션 생성을 선택합니다.

  3. Managed Service for Apache Flink - 애플리케이션 생성 페이지에서 다음과 같이 애플리케이션 세부 정보를 제공합니다.

    • 애플리케이션 명칭MyApplication을 입력합니다.

    • 런타임에서 Apache Flink를 선택합니다.

    • 버전 풀다운은 Apache Flink 버전 1.15.2(권장 버전)로 그대로 두세요.

  4. 액세스 권한에서 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  5. 애플리케이션 생성을 선택합니다.

    참고

    콘솔을 사용하여 Managed Service for Apache Flink 애플리케이션을 만들 때 내 애플리케이션에 대한 IAM 역할 및 정책을 둘 수 있는 옵션이 있습니다. 귀하의 애플리케이션은 이 역할 및 정책을 사용하여 종속 리소스에 액세스합니다. 이러한 IAM 리소스의 이름은 애플리케이션 명칭과 리전을 사용하여 다음과 같이 지정됩니다.

    • 애플리케이션 명칭MyApplication을 입력합니다.

    • 런타임에서 Apache Flink를 선택합니다.

    • 버전은 Apache Flink 버전 1.15.2(권장 버전)로 그대로 둡니다.

  6. 액세스 권한에서 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  7. 애플리케이션 생성을 선택합니다.

참고

콘솔을 사용하여 Managed Service for Apache Flink를 만들 때 내 애플리케이션에 대한 IAM 역할 및 정책을 둘 수 있는 옵션이 있습니다. 귀하의 애플리케이션은 이 역할 및 정책을 사용하여 종속 리소스에 액세스합니다. 이러한 IAM 리소스의 이름은 애플리케이션 명칭과 리전을 사용하여 다음과 같이 지정됩니다.

  • 정책: kinesis-analytics-service-MyApplication-us-west-2

  • 역할: kinesisanalytics-MyApplication-us-west-2

IAM 정책 편집

IAM 정책을 편집하여 Kinesis Data Stream에 액세스할 수 있는 권한을 추가합니다.

  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 여세요.

  2. 정책을 선택하세요. 이전 섹션에서 콘솔이 생성한 kinesis-analytics-service-MyApplication-us-west-2 정책을 선택합니다.

  3. 요약 페이지에서 정책 편집을 선택합니다. JSON 탭을 선택합니다.

  4. 다음 정책 예제의 강조 표시된 부분을 정책에 추가하세요. 샘플 계정 ID(012345678901)를 내 계정 ID로 바꿉니다. <username>을 내 사용자 이름으로 바꿉니다.

    { "Sid": "S3", "Effect": "Allow", "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:GetObject*", "s3:GetBucket*", "s3:List*", "s3:ListBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::ka-app-code-<username>", "arn:aws:s3:::ka-app-code-<username>/*" ] }, { "Sid": "ListCloudwatchLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:region:account-id:log-group:*" ] }, { "Sid": "ListCloudwatchLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:region:account-id:log-group:%LOG_GROUP_PLACEHOLDER%:log-stream:*" ] }, { "Sid": "PutCloudwatchLogs", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:region:account-id:log-group:%LOG_GROUP_PLACEHOLDER%:log-stream:%LOG_STREAM_PLACEHOLDER%" ] } , { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, ] }
애플리케이션 구성
  1. MyApplication페이지에서 구성을 선택합니다.

  2. 애플리케이션 구성 페이지에서 코드 위치를 입력합니다.

    • Amazon S3 버킷의 경우 ka-app-code-<username>를 입력합니다.

    • Amazon S3 객체 경로에는 code/aws-kinesis-analytics-java-apps-1.0.jar를 입력합니다.

  3. 애플리케이션 리소스에 대한 액세스 아래에서 액세스 권한의 경우 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  4. 모니터링에서 지표 수준 모니터링애플리케이션으로 설정되어 있는지 확인합니다.

  5. CloudWatch 로깅의 경우 활성화 확인란을 선택합니다.

  6. 업데이트를 선택합니다.

참고

CloudWatch 로깅을 활성화하도록 선택하면 Apache Flink용 관리형 서비스에서 로그 그룹과 로그 스트림을 자동으로 생성합니다. 이러한 리소스의 이름은 다음과 같습니다.

  • 로그 그룹: /aws/kinesis-analytics/MyApplication

  • 로그 스트림: kinesis-analytics-log-stream

이 로그 스트림은 애플리케이션을 모니터링하는 데 사용됩니다. 이 로그 스트림은 애플리케이션이 결과를 전송하는 데 사용하는 로그 스트림과 다릅니다.

애플리케이션을 실행합니다
  1. MyApplication페이지에서 [Run] 을 선택합니다. 스냅샷 없이 실행 옵션을 선택한 상태로 두고 작업을 확인합니다.

  2. 애플리케이션이 실행 중이면 페이지를 새로 고칩니다. 콘솔에 애플리케이션 그래프가 표시됩니다.

애플리케이션 출력을 확인합니다.

Amazon S3 콘솔에서 S3 버킷의 데이터 폴더를 엽니다.

몇 분 후 애플리케이션에서 집계된 데이터를 포함하는 객체가 나타납니다.

참고

Flink에서 집계(aggregration)는 기본적으로 활성화되어 있습니다. 이것을 비활성화하려면 다음 명령을 사용합니다.

sink.producer.aggregation-enabled' = 'false'
선택 사항: 소스 및 싱크 사용자 지정

이 섹션에서는 소스 및 싱크 객체의 설정을 사용자 지정합니다.

참고

다음 섹션에 설명된 코드 섹션을 변경한 후 다음을 수행하여 애플리케이션 코드를 다시 로드하세요.

데이터 파티셔닝 구성

이 섹션에서는 스트리밍 파일 싱크가 S3 버킷에 생성하는 폴더의 이름을 구성합니다. 스트리밍 파일 싱크에 버킷 할당자를 추가하여 이 작업을 수행합니다.

S3 버킷에 생성된 폴더 이름을 사용자 지정하려면 다음을 수행합니다.

  1. S3StreamingSinkJob.java 파일 시작 부분에 다음 가져오기 문을 추가합니다.

    import org.apache.flink.streaming.api.functions.sink.filesystem.rollingpolicies.DefaultRollingPolicy; import org.apache.flink.streaming.api.functions.sink.filesystem.bucketassigners.DateTimeBucketAssigner;
  2. 코드의 createS3SinkFromStaticConfig() 메서드를 다음과 같이 업데이트하세요.

    private static StreamingFileSink<String> createS3SinkFromStaticConfig() { final StreamingFileSink<String> sink = StreamingFileSink .forRowFormat(new Path(s3SinkPath), new SimpleStringEncoder<String>("UTF-8")) .withBucketAssigner(new DateTimeBucketAssigner("yyyy-MM-dd--HH")) .withRollingPolicy(DefaultRollingPolicy.create().build()) .build(); return sink; }

앞의 코드 예제에서는 사용자 지정 날짜 형식과 함께 DateTimeBucketAssigner를 사용하여 S3 버킷에 폴더를 만듭니다. DateTimeBucketAssigner에서는 현재 시스템 시간을 사용하여 버킷 이름을 생성합니다. 사용자 지정 버킷 할당자를 만들어 생성된 폴더 이름을 추가로 사용자 지정하려는 경우 이를 구현하는 클래스를 만들 수 있습니다. BucketAssigner getBucketId 메서드를 사용하여 사용자 지정 로직을 구현합니다.

BucketAssigner의 사용자 지정 구현에서는 콘텍스트 파라미터를 사용하여 레코드에 대한 추가 정보를 가져와 대상 폴더를 결정할 수 있습니다.

읽기 빈도를 설정합니다.

이 섹션에서는 소스 스트림의 읽기 빈도를 구성합니다.

Kinesis Streams 소비자는 기본적으로 소스 스트림에서 초당 5회 읽습니다. 스트림에서 읽는 클라이언트가 두 명 이상이거나 애플리케이션이 레코드 읽기를 재시도해야 하는 경우 이 빈도로 인해 문제가 발생합니다. 소비자의 읽기 빈도를 설정하면 이러한 문제를 피할 수 있습니다.

Kinesis 소비자의 읽기 빈도를 설정하려면 SHARD_GETRECORDS_INTERVAL_MILLIS 설정을 지정합니다.

다음 코드 예제는 SHARD_GETRECORDS_INTERVAL_MILLIS 설정을 1초로 지정합니다.

kinesisConsumerConfig.setProperty(ConsumerConfigConstants.SHARD_GETRECORDS_INTERVAL_MILLIS, "1000");
쓰기 버퍼링 구성

이 섹션에서는 싱크의 쓰기 빈도와 기타 설정을 구성합니다.

기본적으로 애플리케이션은 대상 버킷에 1분마다 데이터를 씁니다. DefaultRollingPolicy 객체를 구성하여 이 간격 및 기타 설정을 변경할 수 있습니다.

참고

Apache Flink 스트리밍 파일 싱크는 애플리케이션이 체크포인트를 생성할 때마다 출력 버킷에 기록합니다. 애플리케이션은 기본적으로 1분마다 체크포인트를 생성합니다. S3 싱크의 쓰기 간격을 늘리려면 체크포인트 간격도 늘려야 합니다.

DefaultRollingPolicy 객체를 구성하려면 다음을 수행합니다.

  1. 애플리케이션의 CheckpointInterval 설정을 늘립니다. UpdateApplication작업에 대한 다음 입력은 체크포인트 간격을 10분으로 설정합니다.

    { "ApplicationConfigurationUpdate": { "FlinkApplicationConfigurationUpdate": { "CheckpointConfigurationUpdate": { "ConfigurationTypeUpdate" : "CUSTOM", "CheckpointIntervalUpdate": 600000 } } }, "ApplicationName": "MyApplication", "CurrentApplicationVersionId": 5 }

    위의 코드를 사용하려면 현재 애플리케이션 버전을 지정합니다. ListApplications작업을 사용하여 애플리케이션 버전을 검색할 수 있습니다.

  2. S3StreamingSinkJob.java 파일 시작 부분에 다음 가져오기 설명을 추가합니다.

    import java.util.concurrent.TimeUnit;
  3. S3StreamingSinkJob.java 파일에서 createS3SinkFromStaticConfig 메서드를 다음과 같이 업데이트합니다.

    private static StreamingFileSink<String> createS3SinkFromStaticConfig() { final StreamingFileSink<String> sink = StreamingFileSink .forRowFormat(new Path(s3SinkPath), new SimpleStringEncoder<String>("UTF-8")) .withBucketAssigner(new DateTimeBucketAssigner("yyyy-MM-dd--HH")) .withRollingPolicy( DefaultRollingPolicy.create() .withRolloverInterval(TimeUnit.MINUTES.toMillis(8)) .withInactivityInterval(TimeUnit.MINUTES.toMillis(5)) .withMaxPartSize(1024 * 1024 * 1024) .build()) .build(); return sink; }

    위의 코드 예제는 Amazon S3 버킷에 대한 쓰기 빈도를 8분으로 설정합니다.

Apache Flink 스트리밍 파일 싱크를 구성하는 방법에 대한 자세한 내용은 Apache Flink 설명서행 인코딩 형식을 참조하세요.

AWS 리소스 정리

이 섹션에는 Amazon S3 자습서에서 생성한 AWS 리소스를 정리하는 절차가 포함되어 있습니다.

Apache Flink용 관리형 서비스 애플리케이션을 삭제하십시오.
  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Apache Flink용 관리형 서비스 패널에서 선택합니다. MyApplication

  3. 애플리케이션 페이지에서 삭제를 선택한 다음 삭제를 확인합니다.

Kinesis 데이터 스트림을 삭제합니다.
  1. https://console.aws.amazon.com/kinesis에서 Kinesis 콘솔을 엽니다.

  2. Kinesis Data Streams 패널에서 을 선택합니다. ExampleInputStream

  3. ExampleInputStream페이지에서 Kinesis 스트림 삭제를 선택한 다음 삭제를 확인합니다.

Amazon S3 객체 및 버킷을 삭제합니다.
  1. https://console.aws.amazon.com/s3/에서 S3 콘솔을 엽니다.

  2. ka-app-code- 버킷을 선택합니다. <username>

  3. 삭제를 선택한 후 버킷 이름을 입력하여 삭제를 확인합니다.

IAM 리소스를 삭제합니다.
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 바에서 정책을 선택합니다.

  3. 필터 컨트롤에서 kinesis를 입력합니다.

  4. kinesis-analytics-service- MyApplication -us-west-2 정책을 선택합니다.

  5. 정책 작업을 선택한 후 삭제를 선택합니다.

  6. 탐색 바에서 역할을 선택합니다.

  7. 키네시스-애널리틱스- -US-West-2 역할을 선택합니다. MyApplication

  8. 역할 삭제를 선택하고 삭제를 확인합니다.

CloudWatch 리소스 삭제하기
  1. https://console.aws.amazon.com/cloudwatch/ 에서 CloudWatch 콘솔을 엽니다.

  2. 탐색 바에서 로그를 선택합니다.

  3. MyApplication/aws/kinesis-analytics/ 로그 그룹을 선택합니다.

  4. 로그 그룹 삭제를 선택한 다음 삭제를 확인합니다.

자습서: Apache Flink용 관리형 서비스 애플리케이션을 사용하여 MSK 클러스터의 한 주제에서 VPC의 다른 주제로 데이터 복제

참고

현재 예제는 을 참조하십시오. 예제

다음 자습서는 Amazon MSK 클러스터와 두 가지 주제를 사용하여 Amazon VPC를 생성하는 방법과 하나의 Amazon MSK 주제에서 읽고 다른 주제에 쓰는 Managed Service for Apache Flink 애플리케이션을 생성하는 방법을 보여줍니다.

참고

이 연습에 필수 사전 조건을 설정하려면 먼저 튜토리얼: 를 사용하여 시작하기 DataStream API 연습을 완료하세요.

Amazon MSK 클러스터로 Amazon VPC 생성

Managed Service for Apache Flink 애플리케이션에서 액세스할 샘플 VPC 및 Amazon MSK 클러스터를 생성하려면 Amazon MSK 사용 시작하기 자습서를 따르세요.

자습서를 완료할 때는 다음 사항에 유의하십시오.

  • 3단계: 주제 만들기에서 kafka-topics.sh --create 명령을 반복하여 AWSKafkaTutorialTopicDestination라는 이름의 대상 주제를 생성합니다.

    bin/kafka-topics.sh --create --zookeeper ZooKeeperConnectionString --replication-factor 3 --partitions 1 --topic AWS KafkaTutorialTopicDestination
  • 클러스터의 부트스트랩 서버 목록을 기록합니다. 다음 명령을 사용하여 부트스트랩 서버 목록을 가져올 수 있습니다 (MSK 클러스터의 ClusterArnARN으로 대체).

    aws kafka get-bootstrap-brokers --region us-west-2 --cluster-arn ClusterArn {... "BootstrapBrokerStringTls": "b-2.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094,b-1.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094,b-3.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094" }
  • 자습서의 단계를 따를 때는 코드, 명령 및 콘솔 항목에서 선택한 AWS 지역을 사용해야 합니다.

애플리케이션 코드 생성

이 섹션에서는 애플리케이션 JAR 파일을 다운로드하고 컴파일합니다. Java 11을 사용하는 것이 좋습니다.

이 예제의 Java 애플리케이션 코드는 에서 사용할 수 GitHub 있습니다. 애플리케이션 코드를 다운로드하려면 다음을 수행하세요.

  1. 아직 설치하지 않았다면 Git 클라이언트를 설치합니다. 자세한 정보는 Git 설치를 참조하세요.

  2. 다음 명령을 사용하여 원격 리포지토리를 복제합니다:

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. 애플리케이션 코드는 amazon-kinesis-data-analytics-java-examples/KafkaConnectors/KafkaGettingStartedJob.java 파일에 있습니다. 코드를 검토하여 Managed Service for Apache Flink 애플리케이션 코드의 구조를 익힐 수 있습니다.

  4. 명령줄 Maven 도구 또는 원하는 개발 환경을 사용하여 JAR 파일을 만드세요. 명령줄 Maven 도구를 사용하여 JAR 파일을 컴파일하려면 다음을 입력합니다.

    mvn package -Dflink.version=1.15.3

    빌드가 성공하면 다음 파일이 생성됩니다.

    target/KafkaGettingStartedJob-1.0.jar
    참고

    제공된 소스 코드는 Java 11의 라이브러리를 사용합니다. 개발 환경을 사용하는 경우

아파치 플링크 스트리밍 자바 코드를 업로드하세요.

이 섹션에서는 튜토리얼: 를 사용하여 시작하기 DataStream API 자습서에서 생성한 Amazon S3 버킷에 애플리케이션 코드를 업로드합니다.

참고

시작 자습서에서 Amazon S3 버킷을 삭제한 경우 애플리케이션 코드 JAR 파일을 업로드하세요. 단계를 다시 수행하세요.

  1. Amazon S3 콘솔에서 ka-app-code- <username>버킷을 선택하고 업로드를 선택합니다.

  2. 파일 선택 단계에서 파일 추가를 선택합니다. 이전 단계에서 생성한 KafkaGettingStartedJob-1.0.jar 파일로 이동합니다.

  3. 개체 정보에 대한 설정은 변경할 필요가 없으므로 업로드를 선택합니다.

이제 애플리케이션 코드가 애플리케이션에서 액세스할 수 있는 Amazon S3 버킷에 저장됩니다.

애플리케이션 생성
  1. https://console.aws.amazon.com/flink 에서 아파치 플링크용 관리형 서비스 콘솔을 엽니다.

  2. Managed Service for Apache Flink 대시보드에서 분석 애플리케이션 생성을 선택합니다.

  3. Managed Service for Apache Flink - 애플리케이션 생성 페이지에서 다음과 같이 애플리케이션 세부 정보를 제공합니다.

    • 애플리케이션 명칭MyApplication을 입력합니다.

    • 런타임에서 Apache Flink 버전 1.15.2를 선택합니다.

  4. 액세스 권한에서 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  5. 애플리케이션 생성을 선택합니다.

참고

콘솔을 사용하여 Managed Service for Apache Flink 애플리케이션을 만들 때 내 애플리케이션에 대한 IAM 역할 및 정책을 둘 수 있는 옵션이 있습니다. 귀하의 애플리케이션은 이 역할 및 정책을 사용하여 종속 리소스에 액세스합니다. 이러한 IAM 리소스의 이름은 애플리케이션 명칭과 리전을 사용하여 다음과 같이 지정됩니다.

  • 정책: kinesis-analytics-service-MyApplication-us-west-2

  • 역할: kinesisanalytics-MyApplication-us-west-2

애플리케이션을 구성합니다.
  1. MyApplication페이지에서 구성을 선택합니다.

  2. 애플리케이션 구성 페이지에서 코드 위치를 입력합니다.

    • Amazon S3 버킷의 경우 ka-app-code-<username>를 입력합니다.

    • Amazon S3 객체 경로에는 KafkaGettingStartedJob-1.0.jar를 입력합니다.

  3. 애플리케이션 리소스에 대한 액세스 아래에서 액세스 권한의 경우 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

    참고

    콘솔 (예: CloudWatch Logs 또는 Amazon VPC) 을 사용하여 애플리케이션 리소스를 지정하면 콘솔은 애플리케이션 실행 역할을 수정하여 해당 리소스에 액세스할 권한을 부여합니다.

  4. 속성에서 그룹 추가를 선택합니다. 다음 속성을 입력합니다.

    그룹 ID
    KafkaSource 주제 AWS KafkaTutorialTopic
    KafkaSource bootstrap.servers 이전에 저장한 부트스트랩 서버 목록
    KafkaSource security.protocol SSL
    KafkaSource ssl.truststore.location /usr/lib/jvm/java-11-amazon-corretto/lib/security/cacerts
    KafkaSource ssl.truststore.password changeit
    참고

    기본 인증서의 ssl.truststore.password는 “changeit”입니다. 기본 인증서를 사용하는 경우에는 이 값을 변경할 필요가 없습니다.

    그룹 추가를 다시 선택합니다. 다음 속성을 입력합니다.

    그룹 ID
    KafkaSink 주제 AWS KafkaTutorialTopicDestination
    KafkaSink bootstrap.servers 이전에 저장한 부트스트랩 서버 목록
    KafkaSink security.protocol SSL
    KafkaSink ssl.truststore.location /usr/lib/jvm/java-11-amazon-corretto/lib/security/cacerts
    KafkaSink ssl.truststore.password changeit
    KafkaSink transaction.timeout.ms 1000

    애플리케이션 코드는 위의 애플리케이션 속성을 읽고 VPC 및 Amazon MSK 클러스터와 상호 작용하는 데 사용되는 소스 및 싱크를 구성합니다. 클러스터 속성 사용에 대한 자세한 내용은 런타임 속성 섹션을 참조하세요.

  5. 스냅샷에서 비활성화를 선택합니다. 이렇게 하면 잘못된 애플리케이션 상태 데이터를 로드하지 않고도 애플리케이션을 더 쉽게 업데이트할 수 있습니다.

  6. 모니터링에서 지표 수준 모니터링애플리케이션으로 설정되어 있는지 확인합니다.

  7. CloudWatch 로깅하려면 활성화 확인란을 선택합니다.

  8. Virtual Private Cloud(VPC) 섹션에서 애플리케이션과 연결할 VPC를 선택합니다. 애플리케이션이 VPC 리소스에 액세스하는 데 사용할 VPC와 연결된 서브넷 및 보안 그룹을 선택합니다.

  9. 업데이트를 선택합니다.

참고

CloudWatch 로깅을 활성화하도록 선택하면 Apache Flink용 관리형 서비스에서 로그 그룹과 로그 스트림을 자동으로 생성합니다. 이러한 리소스의 이름은 다음과 같습니다.

  • 로그 그룹: /aws/kinesis-analytics/MyApplication

  • 로그 스트림: kinesis-analytics-log-stream

이 로그 스트림은 애플리케이션을 모니터링하는 데 사용됩니다.

애플리케이션을 실행합니다

애플리케이션을 실행하고 Apache Flink 대시보드를 연 다음 원하는 Flink 작업을 선택하면 Flink 작업 그래프를 볼 수 있습니다.

애플리케이션 테스트

이 섹션에서는 소스 주제에 레코드를 쓰기 합니다. 애플리케이션은 소스 주제에서 레코드를 읽고 대상 주제에 쓰기 합니다. 소스 주제에 레코드를 쓰고 대상 주제에서 레코드를 읽어 애플리케이션이 작동 중인지 확인합니다.

주제에서 레코드를 쓰고 읽으려면 Amazon MSK 사용 시작하기 자습서의 6단계: 데이터 생성 및 소비의 단계를 따르세요.

대상 주제에서 읽으려면 클러스터에 대한 두 번째 연결에서 소스 주제 대신 대상 주제 이름을 사용하세요.

bin/kafka-console-consumer.sh --bootstrap-server BootstrapBrokerString --consumer.config client.properties --topic AWS KafkaTutorialTopicDestination --from-beginning

대상 주제에 레코드가 표시되지 않는 경우 문제 해결 주제의 VPC의 리소스에 액세스할 수 없음 섹션을 참조하세요.

예: Kinesis 데이터 스트림과 함께 EFO 소비자 사용

참고

현재 예는 을 참조하십시오. 예제

이 연습에서는 EFO (향상된 팬아웃) 소비자를 사용하여 Kinesis 데이터 스트림에서 읽는 Apache Flink용 관리형 서비스 애플리케이션을 생성합니다. Kinesis 컨슈머가 EFO를 사용하는 경우 Kinesis Data Streams 서비스는 컨슈머가 스트림에서 읽는 다른 컨슈머와 스트림의 고정 대역폭을 공유하지 않고 자체 전용 대역폭을 제공합니다.

Kinesis 소비자와 함께 EFO를 사용하는 방법에 대한 자세한 내용은 FLIP-128: Kinesis 컨슈머를 위한 고급 팬아웃을 참조하세요.

이 예제에서 만든 애플리케이션은 AWS Kinesis 커넥터 (flink-connector-kinesis) 1.15.3을 사용합니다.

참고

이 연습에 필수 사전 조건을 설정하려면 먼저 튜토리얼: 를 사용하여 시작하기 DataStream API 연습을 완료하세요.

종속 리소스 생성

이 연습을 위해 Managed Service for Apache Flink 애플리케이션을 생성하기 전에 다음과 같은 종속 리소스를 생성해야 합니다.

  • 두 개의 Kinesis Data Streams(ExampleInputStreamExampleOutputStream)

  • 애플리케이션 코드를 저장할 Amazon S3 버킷(ka-app-code-<username>)

콘솔을 사용하여 Kinesis 스트림과 Amazon S3 버킷을 만들 수 있습니다. 이러한 리소스를 만드는 방법 설명은 다음 주제를 참조하세요.

입력 스트림에 샘플 레코드 쓰기

이 섹션에서는 Python 스크립트를 사용하여 애플리케이션에서 처리할 샘플 레코드를 스트림에 쓰기 합니다.

참고

이 섹션에서는 AWS SDK for Python (Boto)이 필요합니다.

  1. 다음 콘텐츠를 가진 stock.py이라는 파일을 생성합니다:

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { 'event_time': datetime.datetime.now().isoformat(), 'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']), 'price': round(random.random() * 100, 2)} def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey") if __name__ == '__main__': generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  2. stock.py 스크립트를 실행합니다.

    $ python stock.py

    자습서의 나머지 부분을 완료하는 동안 스크립트가 계속 돌아가게 둡니다.

애플리케이션 코드 다운로드 및 검토

이 예제의 Java 응용 프로그램 코드는 에서 사용할 수 GitHub 있습니다. 애플리케이션 코드를 다운로드하려면 다음을 수행하세요.

  1. 아직 설치하지 않았다면 Git 클라이언트를 설치합니다. 자세한 정보는 Git 설치를 참조하세요.

  2. 다음 명령을 사용하여 원격 리포지토리를 복제합니다:

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. amazon-kinesis-data-analytics-java-examples/EfoConsumer 디렉터리로 이동합니다.

애플리케이션 코드는 EfoApplication.java 파일에 있습니다. 애플리케이션 코드에 대해 다음을 유의하십시오:

  • Kinesis 소비자에 다음 파라미터를 설정하여 EFO 소비자를 활성화합니다.

    • RECORD_PUBLISHER_TYPE: 애플리케이션이 EFO 소비자를 사용하여 Kinesis Data Stream 데이터에 액세스하도록 이 파라미터를 EFO로 설정하세요.

    • EFO_CONSUMER_NAME: 이 파라미터를 이 스트림의 소비자 간에 고유한 문자열 값으로 설정합니다. 동일한 Kinesis Data Stream에서 컨슈머 명칭을 재사용하면 해당 명칭을 사용하던 이전 컨슈머가 종료됩니다.

  • 다음 코드 예제는 EFO 소비자가 소스 스트림에서 읽을 수 있도록 소비자 구성 속성에 값을 할당하는 방법을 보여줍니다.

    consumerConfig.putIfAbsent(RECORD_PUBLISHER_TYPE, "EFO"); consumerConfig.putIfAbsent(EFO_CONSUMER_NAME, "basic-efo-flink-app");
애플리케이션 코드를 컴파일하십시오.

애플리케이션을 컴파일하려면 다음을 수행하세요.

  1. 아직 Java 및 Maven을 설치하지 않았으면 설치합니다. 자세한 정보는 튜토리얼: 를 사용하여 시작하기 DataStream API자습서의 필수 사전 요구 사항 완료 섹션을 참조하세요.

  2. 다음 명령을 사용하여 애플리케이션을 컴파일합니다.

    mvn package -Dflink.version=1.15.3
    참고

    제공된 소스 코드는 Java 11의 라이브러리를 사용합니다.

애플리케이션을 컴파일하면 애플리케이션 JAR 파일(target/aws-kinesis-analytics-java-apps-1.0.jar)이 생성됩니다.

아파치 플링크 스트리밍 자바 코드를 업로드하세요.

이 섹션에서는 종속 리소스 생성 섹션에서 생성한 Amazon S3 버킷에 애플리케이션 코드를 업로드합니다.

  1. Amazon S3 콘솔에서 ka-app-code- <username>버킷을 선택하고 업로드를 선택합니다.

  2. 파일 선택 단계에서 파일 추가를 선택합니다. 이전 단계에서 생성한 aws-kinesis-analytics-java-apps-1.0.jar 파일로 이동합니다.

  3. 개체 정보에 대한 설정은 변경할 필요가 없으므로 업로드를 선택합니다.

이제 애플리케이션 코드가 애플리케이션에서 액세스할 수 있는 Amazon S3 버킷에 저장됩니다.

Apache Flink용 관리형 서비스 애플리케이션을 생성하고 실행합니다.

콘솔을 사용하여 애플리케이션을 생성, 구성, 업데이트 및 실행하려면 다음 단계를 수행하세요.

애플리케이션 생성
  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Managed Service for Apache Flink 대시보드에서 분석 애플리케이션 생성을 선택합니다.

  3. Managed Service for Apache Flink - 애플리케이션 생성 페이지에서 다음과 같이 애플리케이션 세부 정보를 제공합니다.

    • 애플리케이션 명칭MyApplication을 입력합니다.

    • 런타임에서 Apache Flink를 선택합니다.

      참고

      Managed Service for Apache Flink는 Apache Flink 버전 1.15.2를 사용합니다.

    • 버전 풀다운은 Apache Flink 버전 1.15.2(권장 버전)로 그대로 두세요.

  4. 액세스 권한에서 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  5. 애플리케이션 생성을 선택합니다.

참고

콘솔을 사용하여 Managed Service for Apache Flink 애플리케이션을 만들 때 내 애플리케이션에 대한 IAM 역할 및 정책을 둘 수 있는 옵션이 있습니다. 귀하의 애플리케이션은 이 역할 및 정책을 사용하여 종속 리소스에 액세스합니다. 이러한 IAM 리소스의 이름은 애플리케이션 명칭과 리전을 사용하여 다음과 같이 지정됩니다.

  • 정책: kinesis-analytics-service-MyApplication-us-west-2

  • 역할: kinesisanalytics-MyApplication-us-west-2

IAM 정책 편집

IAM 정책을 편집하여 Kinesis Data Streams에 액세스할 수 있는 권한을 추가합니다.

  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 여세요.

  2. 정책을 선택하세요. 이전 섹션에서 콘솔이 생성한 kinesis-analytics-service-MyApplication-us-west-2 정책을 선택합니다.

  3. 요약 페이지에서 정책 편집을 선택합니다. JSON 탭을 선택합니다.

  4. 다음 정책 예제의 강조 표시된 부분을 정책에 추가하세요. 샘플 계정 ID(012345678901)를 내 계정 ID로 바꿉니다.

    참고

    이러한 권한은 애플리케이션에 EFO 소비자에 액세스할 수 있는 권한을 부여합니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "logs:DescribeLogGroups", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*", "arn:aws:s3:::ka-app-code-<username>/aws-kinesis-analytics-java-apps-1.0.jar" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": "logs:DescribeLogStreams", "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": "logs:PutLogEvents", "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" }, { "Sid": "ListCloudwatchLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "AllStreams", "Effect": "Allow", "Action": [ "kinesis:ListShards", "kinesis:ListStreamConsumers", "kinesis:DescribeStreamSummary" ], "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/*" }, { "Sid": "Stream", "Effect": "Allow", "Action": [ "kinesis:DescribeStream", "kinesis:RegisterStreamConsumer", "kinesis:DeregisterStreamConsumer" ], "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" }, { "Sid": "Consumer", "Effect": "Allow", "Action": [ "kinesis:DescribeStreamConsumer", "kinesis:SubscribeToShard" ], "Resource": [ "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream/consumer/my-efo-flink-app", "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream/consumer/my-efo-flink-app:*" ] } ] }
애플리케이션 구성
  1. MyApplication페이지에서 구성을 선택합니다.

  2. 애플리케이션 구성 페이지에서 코드 위치를 입력합니다.

    • Amazon S3 버킷의 경우 ka-app-code-<username>를 입력합니다.

    • Amazon S3 객체 경로에는 aws-kinesis-analytics-java-apps-1.0.jar를 입력합니다.

  3. 애플리케이션 리소스에 대한 액세스 아래에서 액세스 권한의 경우 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  4. 속성에서 그룹 생성을 선택합니다.

  5. 다음 애플리케이션 속성 및 값을 입력합니다:

    그룹 ID
    ConsumerConfigProperties flink.stream.recordpublisher EFO
    ConsumerConfigProperties flink.stream.efo.consumername basic-efo-flink-app
    ConsumerConfigProperties INPUT_STREAM ExampleInputStream
    ConsumerConfigProperties flink.inputstream.initpos LATEST
    ConsumerConfigProperties AWS_REGION us-west-2
  6. 속성에서 그룹 생성을 선택합니다.

  7. 다음 애플리케이션 속성 및 값을 입력합니다:

    그룹 ID
    ProducerConfigProperties OUTPUT_STREAM ExampleOutputStream
    ProducerConfigProperties AWS_REGION us-west-2
    ProducerConfigProperties AggregationEnabled false
  8. 모니터링에서 지표 수준 모니터링애플리케이션으로 설정되어 있는지 확인합니다.

  9. CloudWatch 로깅의 경우 활성화 확인란을 선택합니다.

  10. 업데이트를 선택합니다.

참고

CloudWatch 로깅을 활성화하도록 선택하면 Apache Flink용 관리형 서비스에서 로그 그룹과 로그 스트림을 자동으로 생성합니다. 이러한 리소스의 이름은 다음과 같습니다.

  • 로그 그룹: /aws/kinesis-analytics/MyApplication

  • 로그 스트림: kinesis-analytics-log-stream

이 로그 스트림은 애플리케이션을 모니터링하는 데 사용됩니다. 이 로그 스트림은 애플리케이션이 결과를 전송하는 데 사용하는 로그 스트림과 다릅니다.

애플리케이션을 실행합니다

애플리케이션을 실행하고 Apache Flink 대시보드를 연 다음 원하는 Flink 작업을 선택하면 Flink 작업 그래프를 볼 수 있습니다.

CloudWatch 콘솔에서 Apache Flink용 관리 서비스 메트릭을 확인하여 애플리케이션이 작동하는지 확인할 수 있습니다.

데이터 스트림의 향상된 팬아웃 탭에 있는 Kinesis Data Streams 콘솔에서 소비자 이름 () 을 확인할 수도 있습니다. basic-efo-flink-app

리소스 정리 AWS

이 섹션에는 efo Window 튜토리얼에서 만든 AWS 리소스를 정리하는 절차가 포함되어 있습니다.

Apache Flink용 관리형 서비스 애플리케이션 삭제
  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Apache Flink용 관리형 서비스 패널에서 선택합니다. MyApplication

  3. 애플리케이션 페이지에서 삭제를 선택한 다음 삭제를 확인합니다.

Kinesis 데이터 스트림을 삭제합니다.
  1. https://console.aws.amazon.com/kinesis에서 Kinesis 콘솔을 엽니다.

  2. Kinesis Data Streams 패널에서 을 선택합니다. ExampleInputStream

  3. ExampleInputStream페이지에서 Kinesis 스트림 삭제를 선택한 다음 삭제를 확인합니다.

  4. Kinesis 스트림 페이지에서 를 선택하고 작업을 선택하고 삭제를 선택한 다음 삭제를 확인합니다. ExampleOutputStream

Amazon S3 객체 및 버킷 삭제
  1. https://console.aws.amazon.com/s3/에서 S3 콘솔을 엽니다.

  2. ka-app-code- 버킷을 <username>선택합니다.

  3. 삭제를 선택한 후 버킷 이름을 입력하여 삭제를 확인합니다.

IAM 리소스를 삭제합니다.
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 바에서 정책을 선택합니다.

  3. 필터 컨트롤에서 kinesis를 입력합니다.

  4. kinesis-analytics-service- MyApplication -us-west-2 정책을 선택합니다.

  5. 정책 작업을 선택한 후 삭제를 선택합니다.

  6. 탐색 모음에서 역할을 선택합니다.

  7. 키네시스-애널리틱스- -US-West-2 역할을 선택합니다. MyApplication

  8. 역할 삭제를 선택하고 삭제를 확인합니다.

CloudWatch 리소스 삭제하기
  1. https://console.aws.amazon.com/cloudwatch/ 에서 CloudWatch 콘솔을 엽니다.

  2. 탐색 바에서 로그를 선택합니다.

  3. MyApplication/aws/kinesis-analytics/ 로그 그룹을 선택합니다.

  4. 로그 그룹 삭제를 선택한 다음 삭제를 확인합니다.

예: Firehose에 쓰기

참고

현재 예제는 을 참조하십시오. 예제

이 연습에서는 Kinesis 데이터 스트림을 소스로 사용하고 Firehose 스트림을 싱크로 사용하는 Apache Flink용 관리형 서비스 애플리케이션을 생성합니다. 싱크를 사용하여 Amazon S3 버킷의 애플리케이션 출력을 확인할 수 있습니다.

참고

이 연습에 필수 사전 조건을 설정하려면 먼저 튜토리얼: 를 사용하여 시작하기 DataStream API 연습을 완료하세요.

종속 리소스를 생성하십시오.

이 연습을 위해 Managed Service for Apache Flink를 생성하기 전에 먼저 다음과 같은 종속 리소스를 생성해야 합니다.

  • Kinesis Data Streams(ExampleInputStream)

  • 애플리케이션이 출력을 () ExampleDeliveryStream 에 기록하는 Firehose 스트림입니다.

  • 애플리케이션 코드를 저장할 Amazon S3 버킷(ka-app-code-<username>)

콘솔을 사용하여 Kinesis 스트림, Amazon S3 버킷 및 Firehose 스트림을 생성할 수 있습니다. 이러한 리소스를 만드는 방법 설명은 다음 주제를 참조하세요.

입력 스트림에 샘플 레코드를 작성합니다.

이 섹션에서는 Python 스크립트를 사용하여 애플리케이션에서 처리할 샘플 레코드를 스트림에 쓰기 합니다.

참고

이 섹션에서는 AWS SDK for Python (Boto)이 필요합니다.

  1. 다음 콘텐츠를 가진 stock.py이라는 파일을 생성합니다:

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { 'event_time': datetime.datetime.now().isoformat(), 'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']), 'price': round(random.random() * 100, 2)} def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey") if __name__ == '__main__': generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  2. stock.py 스크립트를 실행합니다.

    $ python stock.py

    자습서의 나머지 부분을 완료하는 동안 스크립트가 계속 돌아가게 둡니다.

Apache Flink 스트리밍 Java 코드를 다운로드하여 검토하십시오.

이 예제의 Java 애플리케이션 코드는 에서 제공됩니다. GitHub 애플리케이션 코드를 다운로드하려면 다음을 수행하세요.

  1. 다음 명령을 사용하여 원격 리포지토리를 복제합니다:

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  2. amazon-kinesis-data-analytics-java-examples/FirehoseSink 디렉터리로 이동합니다.

애플리케이션 코드는 FirehoseSinkStreamingJob.java 파일에 있습니다. 애플리케이션 코드에 대해 다음을 유의하십시오:

  • 애플리케이션은 Kinesis 소스를 사용하여 소스 스트림에서 읽습니다. 다음 스니펫은 Kinesis 소스를 생성합니다.

    return env.addSource(new FlinkKinesisConsumer<>(inputStreamName, new SimpleStringSchema(), inputProperties));
  • 애플리케이션은 Firehose 싱크를 사용하여 Firehose 스트림에 데이터를 씁니다. 다음 스니펫은 Firehose 싱크를 만듭니다.

    private static KinesisFirehoseSink<String> createFirehoseSinkFromStaticConfig() { Properties sinkProperties = new Properties(); sinkProperties.setProperty(AWS_REGION, region); return KinesisFirehoseSink.<String>builder() .setFirehoseClientProperties(sinkProperties) .setSerializationSchema(new SimpleStringSchema()) .setDeliveryStreamName(outputDeliveryStreamName) .build(); }
애플리케이션 코드를 컴파일하세요.

애플리케이션을 컴파일하려면 다음을 수행하세요.

  1. 아직 Java 및 Maven을 설치하지 않았으면 설치합니다. 자세한 정보는 튜토리얼: 를 사용하여 시작하기 DataStream API 자습서의 필수 사전 요구 사항 완료 섹션을 참조하세요.

  2. 다음 애플리케이션에 Kinesis 커넥터를 사용하려면 Apache Maven을 다운로드, 빌드 및 설치해야 합니다. 자세한 내용은 아파치 플링크 Kinesis Streams 커넥터를 이전 아파치 플링크 버전과 함께 사용하기 단원을 참조하세요.

  3. 다음 명령을 사용하여 애플리케이션을 컴파일합니다.

    mvn package -Dflink.version=1.15.3
    참고

    제공된 소스 코드는 Java 11의 라이브러리를 사용합니다.

애플리케이션을 컴파일하면 애플리케이션 JAR 파일(target/aws-kinesis-analytics-java-apps-1.0.jar)이 생성됩니다.

아파치 플링크 스트리밍 자바 코드를 업로드하세요.

이 섹션에서는 종속 리소스를 생성하십시오. 섹션에서 생성한 Amazon S3 버킷에 애플리케이션 코드를 업로드합니다.

애플리케이션 코드 업로드하기
  1. https://console.aws.amazon.com/s3/에서 S3 콘솔을 엽니다.

  2. 콘솔에서 ka-app-code- 버킷을 선택한 다음 업로드를 선택합니다. <username>

  3. 파일 선택 단계에서 파일 추가를 선택합니다. 이전 단계에서 생성한 java-getting-started-1.0.jar 파일로 이동합니다.

  4. 개체 정보에 대한 설정은 변경할 필요가 없으므로 업로드를 선택합니다.

이제 애플리케이션 코드가 애플리케이션에서 액세스할 수 있는 Amazon S3 버킷에 저장됩니다.

Apache Flink용 관리 서비스 애플리케이션을 만들고 실행합니다.

콘솔이나 AWS CLI를 사용하여 Managed Service for Apache Flink 애플리케이션을 생성하고 실행할 수 있습니다.

참고

콘솔을 사용하여 애플리케이션을 생성하면 사용자 AWS Identity and Access Management (IAM) 및 Amazon CloudWatch Logs 리소스가 자동으로 생성됩니다. 를 사용하여 애플리케이션을 생성할 때는 이러한 리소스를 별도로 생성합니다. AWS CLI

애플리케이션 (콘솔) 생성 및 실행

콘솔을 사용하여 애플리케이션을 생성, 구성, 업데이트 및 실행하려면 다음 단계를 수행하세요.

애플리케이션 생성
  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Managed Service for Apache Flink 대시보드에서 분석 애플리케이션 생성을 선택합니다.

  3. Managed Service for Apache Flink - 애플리케이션 생성 페이지에서 다음과 같이 애플리케이션 세부 정보를 제공합니다.

    • 애플리케이션 명칭MyApplication을 입력합니다.

    • 설명My java test app를 입력합니다.

    • 런타임에서 Apache Flink를 선택합니다.

      참고

      Managed Service for Apache Flink는 Apache Flink 버전 1.15.2를 사용합니다.

    • 버전 풀다운은 Apache Flink 버전 1.15.2(권장 버전)로 그대로 두세요.

  4. 액세스 권한에서 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  5. 애플리케이션 생성을 선택합니다.

참고

콘솔을 사용하여 애플리케이션을 만들 때 내 애플리케이션에 대한 IAM 역할 및 정책을 둘 수 있는 옵션이 있습니다. 애플리케이션은 이 역할 및 정책을 사용하여 종속 리소스에 액세스합니다. 이러한 IAM 리소스의 이름은 애플리케이션 명칭과 리전을 사용하여 다음과 같이 지정됩니다.

  • 정책: kinesis-analytics-service-MyApplication-us-west-2

  • 역할: kinesisanalytics-MyApplication-us-west-2

IAM 정책 편집

IAM 정책을 편집하여 Kinesis 데이터 스트림 및 Firehose 스트림에 액세스할 수 있는 권한을 추가합니다.

  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 여세요.

  2. 정책을 선택하세요. 이전 섹션에서 콘솔이 생성한 kinesis-analytics-service-MyApplication-us-west-2 정책을 선택합니다.

  3. 요약 페이지에서 정책 편집을 선택합니다. JSON 탭을 선택합니다.

  4. 다음 정책 예제의 강조 표시된 부분을 정책에 추가하세요. 샘플 계정 ID(012345678901)의 모든 인스턴스를 내 계정 아이디로 바꿉니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-username/java-getting-started-1.0.jar" ] }, { "Sid": "DescribeLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteDeliveryStream", "Effect": "Allow", "Action": "firehose:*", "Resource": "arn:aws:firehose:us-west-2:012345678901:deliverystream/ExampleDeliveryStream" } ] }
애플리케이션을 구성합니다.
  1. MyApplication페이지에서 구성을 선택합니다.

  2. 애플리케이션 구성 페이지에서 코드 위치를 입력합니다.

    • Amazon S3 버킷의 경우 ka-app-code-<username>를 입력합니다.

    • Amazon S3 객체 경로에는 java-getting-started-1.0.jar를 입력합니다.

  3. 애플리케이션 리소스에 대한 액세스 아래에서 액세스 권한의 경우 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  4. 모니터링에서 지표 수준 모니터링애플리케이션으로 설정되어 있는지 확인합니다.

  5. CloudWatch 로깅의 경우 활성화 확인란을 선택합니다.

  6. 업데이트를 선택합니다.

참고

CloudWatch 로깅을 활성화하도록 선택하면 Apache Flink용 관리형 서비스에서 로그 그룹과 로그 스트림을 자동으로 생성합니다. 이러한 리소스의 이름은 다음과 같습니다.

  • 로그 그룹: /aws/kinesis-analytics/MyApplication

  • 로그 스트림: kinesis-analytics-log-stream

애플리케이션을 실행합니다

애플리케이션을 실행하고 Apache Flink 대시보드를 연 다음 원하는 Flink 작업을 선택하면 Flink 작업 그래프를 볼 수 있습니다.

애플리케이션을 중지하세요.

MyApplication페이지에서 중지를 선택합니다. 작업을 확인합니다.

애플리케이션 업데이트

콘솔을 사용하여 애플리케이션 속성, 모니터링 설정, 애플리케이션 JAR의 위치 또는 파일 명칭과 같은 애플리케이션 설정을 업데이트할 수 있습니다.

MyApplication페이지에서 구성을 선택합니다. 애플리케이션 설정을 업데이트하고 업데이트를 선택합니다.

참고

콘솔에서 애플리케이션 코드를 업데이트하려면 JAR의 객체 이름을 변경하거나, 다른 S3 버킷을 사용하거나, 애플리케이션 코드 업데이트섹션에 설명된 대로 AWS CLI 를 사용해야 합니다. 파일 이름이나 버킷이 변경되지 않으면 구성 페이지에서 업데이트를 선택할 때 애플리케이션 코드가 다시 로드되지 않습니다.

애플리케이션 생성 및 실행 (AWS CLI)

이 섹션에서는 를 사용하여 Apache Flink용 관리 서비스 애플리케이션을 만들고 실행합니다. AWS CLI

권한 정책 생성

먼저 소스 스트림에서 두 개의 명령문, 즉 read 작업에 대한 권한을 부여하는 명령문과 싱크 스트림에서 write 작업에 대한 권한을 부여하는 명령문이 있는 권한 정책을 만듭니다. 그런 다음 정책을 IAM 역할(다음 섹션에서 생성)에 연결합니다. 따라서 Managed Service for Apache Flink가 역할을 맡을 때 서비스는 소스 스트림에서 읽고 싱크 스트림에 쓸 수 있는 권한이 있습니다.

다음 코드를 사용하여 AKReadSourceStreamWriteSinkStream권한 정책을 생성합니다. 사용자 이름을 애플리케이션 코드를 저장하기 위한 Amazon S3 버킷을 생성하는 데 사용한 사용자 이름으로 바꿉니다. Amazon 리소스 이름(ARN)의 계정 ID(012345678901)를 사용자의 계정 ID로 바꿉니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": ["arn:aws:s3:::ka-app-code-username", "arn:aws:s3:::ka-app-code-username/*" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteDeliveryStream", "Effect": "Allow", "Action": "firehose:*", "Resource": "arn:aws:firehose:us-west-2:012345678901:deliverystream/ExampleDeliveryStream" } ] }

권한 정책을 생성하는 step-by-step 방법에 대한 지침은 IAM 사용 설명서의 자습서: 첫 번째 고객 관리형 정책 생성 및 연결을 참조하십시오.

참고

AWS SDK for Java를 사용하여 다른 Amazon 서비스에 액세스할 수 있습니다. Managed Service for Apache Flink는 SDK에 필요한 자격 증명을 애플리케이션과 연결된 서비스 실행 IAM 역할의 자격 증명으로 자동 설정합니다. 추가 단계는 필요 없습니다.

IAM 역할 생성

이 섹션에서는 Managed Service for Apache Flink 애플리케이션이 소스 스트림을 읽고 싱크 스트림에 쓰기 위해 맡을 수 있는 IAM 역할을 생성합니다.

Managed Service for Apache Flink는 권한이 없는 경우 스트림에 액세스할 수 없습니다. IAM 역할을 통해 이러한 권한을 부여합니다. 각 IAM 역할에는 두 가지 정책이 연결됩니다. 신뢰 정책은 Apache Flink용 Managed Service for Apache Flink 역할을 맡을 권한을 부여합니다. 권한 정책은 Managed Service for Apache Flink가 역할을 맡은 후 수행할 수 있는 작업을 결정합니다.

이전 섹션에서 생성한 권한 정책을 이 역할에 연결합니다.

IAM 역할을 생성하려면
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 창에서 역할, 역할 생성을 선택합니다.

  3. 신뢰할 수 있는 유형의 자격 증명 선택에서 AWS 서비스를 선택합니다. 이 역할을 사용할 서비스 선택에서 Kinesis를 선택합니다. 사용 사례 선택에서 Kinesis Analytics를 선택합니다.

    다음: 권한을 선택합니다.

  4. 권한 정책 연결 페이지에서 다음: 검토를 선택합니다. 역할을 생성한 후에 권한 정책을 연결합니다.

  5. 역할 생성 페이지에서 역할 이름으로 MF-stream-rw-role을 입력합니다. 역할 생성을 선택합니다.

    MF-stream-rw-role이라는 새 IAM 역할이 생성되었습니다. 그런 다음 역할의 신뢰 정책 및 권한 정책을 업데이트합니다.

  6. 역할에 권한 정책을 연결합니다.

    참고

    이 연습에서는 Managed Service for Apache Flink가 이 역할을 취하여 Kinesis 데이터 스트림(소스)에서 데이터를 읽고 출력을 다른 Kinesis 데이터 스트림에 씁니다. 따라서 이전 단계 권한 정책 생성에서 생성한 정책을 연결합니다.

    1. 요약 페이지에서 권한 탭을 선택합니다.

    2. 정책 연결을 선택합니다.

    3. 검색 상자에 AKReadSourceStreamWriteSinkStream(이전 섹션에서 생성한 정책)을 입력합니다.

    4. AK ReadSourceStreamWriteSinkStream 정책을 선택하고 Attach policy (Attach policy) 를 선택합니다.

이제 애플리케이션에서 리소스에 액세스하는 데 사용할 서비스 실행 역할을 만들었습니다. 새 역할의 ARN을 기록합니다.

역할 생성에 대한 step-by-step 지침은 IAM 사용 설명서의 IAM 역할 생성 (콘솔) 을 참조하십시오.

Apache Flink용 관리형 서비스 애플리케이션 생성
  1. 다음 JSON 코드를 create_request.json이라는 파일에 저장합니다. 샘플 역할 ARN을 이전에 생성한 역할을 위한 ARN으로 바꿉니다. 버킷 ARN 접미사를 종속 리소스를 생성하십시오. 섹션에서 선택한 접미사(ka-app-code-<username>)로 바꿉니다. 서비스 실행 역할의 샘플 계정 ID(012345678901)를 사용자 계정 ID로 바꿉니다.

    { "ApplicationName": "test", "ApplicationDescription": "my java test app", "RuntimeEnvironment": "FLINK-1_15", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username", "FileKey": "java-getting-started-1.0.jar" } }, "CodeContentType": "ZIPFILE" } } } }
  2. 위의 요청과 함께 CreateApplication 작업을 실행하여 애플리케이션을 생성합니다.

    aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json

애플리케이션이 생성되었습니다. 다음 단계에서는 애플리케이션을 시작합니다.

애플리케이션 시작

이 섹션에서는 StartApplication 작업을 사용하여 애플리케이션을 시작합니다.

애플리케이션을 시작하려면
  1. 다음 JSON 코드를 start_request.json이라는 파일에 저장합니다.

    { "ApplicationName": "test", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
  2. 위의 요청과 함께 StartApplication 작업을 실행하여 애플리케이션을 시작합니다.

    aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json

애플리케이션이 실행됩니다. Amazon CloudWatch 콘솔에서 Apache Flink용 관리형 서비스 지표를 확인하여 애플리케이션이 작동하는지 확인할 수 있습니다.

애플리케이션을 중지하십시오.

이 섹션에서는 StopApplication 작업을 사용하여 애플리케이션을 중지합니다.

애플리케이션을 중지하려면
  1. 다음 JSON 코드를 stop_request.json이라는 파일에 저장합니다.

    { "ApplicationName": "test" }
  2. 다음 요청과 함께 StopApplication 작업을 실행하여 애플리케이션을 중지합니다.

    aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json

애플리케이션이 중지됩니다.

CloudWatch 로깅 옵션 추가

를 AWS CLI 사용하여 Amazon CloudWatch 로그 스트림을 애플리케이션에 추가할 수 있습니다. 애플리케이션에서 CloudWatch 로그를 사용하는 방법에 대한 자세한 내용은 을 참조하십시오애플리케이션 로깅 설정.

애플리케이션 코드 업데이트

새 버전의 코드 패키지로 애플리케이션 코드를 업데이트해야 하는 경우 UpdateApplication AWS CLI 작업을 사용합니다.

를 사용하려면 Amazon S3 버킷에서 이전 코드 패키지를 삭제하고 새 버전을 업로드한 다음 동일한 Amazon S3 버킷과 객체 이름을 지정하여 UpdateApplication 호출합니다. AWS CLI

다음 예 UpdateApplication 작업 요청은 애플리케이션 코드를 다시 로드하고 애플리케이션을 다시 시작합니다. CurrentApplicationVersionId를 현재 애플리케이션 버전으로 업데이트하세요. ListApplications 또는 DescribeApplication 작업을 사용하여 현재 애플리케이션 버전을 확인할 수 있습니다. 버킷 명칭 접미사 (<username>)를 종속 리소스를 생성하십시오. 섹션에서 선택한 접미사로 업데이트하십시오.

{ "ApplicationName": "test", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "ApplicationCodeConfigurationUpdate": { "CodeContentUpdate": { "S3ContentLocationUpdate": { "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username", "FileKeyUpdate": "java-getting-started-1.0.jar" } } } } }
AWS 리소스 정리

이 섹션에는 시작 자습서에서 생성한 AWS 리소스를 정리하는 절차가 포함되어 있습니다.

Apache Flink용 관리형 서비스 애플리케이션 삭제
  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Apache Flink용 관리형 서비스 패널에서 선택합니다. MyApplication

  3. 구성을 선택합니다.

  4. 스냅샷 섹션에서 비활성화를 선택한 다음 업데이트를 선택합니다.

  5. 애플리케이션 페이지에서 삭제를 선택한 다음 삭제를 확인합니다.

Kinesis 데이터 스트림을 삭제합니다.
  1. https://console.aws.amazon.com/kinesis에서 Kinesis 콘솔을 엽니다.

  2. Kinesis Data Streams 패널에서 을 선택합니다. ExampleInputStream

  3. ExampleInputStream페이지에서 Kinesis 스트림 삭제를 선택한 다음 삭제를 확인합니다.

Firehose 스트림을 삭제하세요
  1. https://console.aws.amazon.com/kinesis에서 Kinesis 콘솔을 엽니다.

  2. Firehose 패널에서 을 선택합니다. ExampleDeliveryStream

  3. ExampleDeliveryStream페이지에서 Firehose 스트림 삭제를 선택한 다음 삭제를 확인합니다.

Amazon S3 객체 및 버킷을 삭제합니다.
  1. https://console.aws.amazon.com/s3/에서 S3 콘솔을 엽니다.

  2. ka-app-code- 버킷을 선택합니다. <username>

  3. 삭제를 선택한 후 버킷 이름을 입력하여 삭제를 확인합니다.

  4. Firehose 스트림의 대상으로 Amazon S3 버킷을 만든 경우 해당 버킷도 삭제하십시오.

IAM 리소스를 삭제하세요.
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 바에서 정책을 선택합니다.

  3. 필터 컨트롤에서 kinesis를 입력합니다.

  4. kinesis-analytics-service- MyApplication -us-west-2 정책을 선택합니다.

  5. 정책 작업을 선택한 후 삭제를 선택합니다.

  6. Firehose 스트림에 대한 새 정책을 만든 경우 해당 정책도 삭제하세요.

  7. 탐색 모음에서 역할을 선택합니다.

  8. 키네시스-애널리틱스- -US-West-2 역할을 선택합니다. MyApplication

  9. 역할 삭제를 선택하고 삭제를 확인합니다.

  10. Firehose 스트림용 새 역할을 만든 경우 해당 역할도 삭제하세요.

리소스 삭제 CloudWatch
  1. https://console.aws.amazon.com/cloudwatch/ 에서 CloudWatch 콘솔을 엽니다.

  2. 탐색 바에서 로그를 선택합니다.

  3. MyApplication/aws/kinesis-analytics/ 로그 그룹을 선택합니다.

  4. 로그 그룹 삭제를 선택한 다음 삭제를 확인합니다.

예: 다른 계정의 Kinesis 스트림에서 읽기

참고

현재 예는 을 참조하십시오예제.

이 예제에서는 다른 계정의 Kinesis 스트림에서 데이터를 읽는 Managed Service for Apache Flink 애플리케이션을 만드는 방법을 보여줍니다. 이 예제에서는 소스 Kinesis 스트림에 계정 하나를 사용하고, Managed Service for Apache Flink 애플리케이션 및 싱크 Kinesis 스트림에 두 번째 계정을 사용합니다.

사전 조건
  • 이 자습서에서는 다른 계정의 Kinesis 스트림에서 데이터를 읽도록 시작하기 예제를 수정합니다. 계속하기 전에 튜토리얼: 를 사용하여 시작하기 DataStream API자습서를 완료하세요.

  • 이 가이드를 완료하려면 두 개의 AWS 계정이 필요합니다. 하나는 소스 스트림용이고 다른 하나는 애플리케이션과 싱크 스트림용입니다. 시작하기 튜토리얼에서 사용한 AWS 계정을 애플리케이션 및 싱크 스트림에 사용하세요. 소스 스트림에는 다른 AWS 계정을 사용하세요.

설치

이름이 지정된 프로필을 사용하여 두 AWS 계정에 접속할 수 있습니다. 두 계정의 지역 및 연결 정보가 포함된 프로필 두 개를 포함하도록 AWS 자격 증명 및 구성 파일을 수정하십시오.

다음 예제 보안 인증 파일에는 두 개의 명명된 프로필, ka-source-stream-account-profileka-sink-stream-account-profile이(가) 포함되어 있습니다. 싱크 스트림 계정에는 시작하기 자습서에서 사용한 계정을 사용합니다.

[ka-source-stream-account-profile] aws_access_key_id=AKIAIOSFODNN7EXAMPLE aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY [ka-sink-stream-account-profile] aws_access_key_id=AKIAI44QH8DHBEXAMPLE aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY

다음 예제 구성 파일에는 리전 및 출력 형식 정보와 함께 이름이 지정된 동일한 프로필이 포함되어 있습니다.

[profile ka-source-stream-account-profile] region=us-west-2 output=json [profile ka-sink-stream-account-profile] region=us-west-2 output=json
참고

이 자습서에서는 ka-sink-stream-account-profile를 사용하지 않습니다. 프로필을 사용하여 서로 다른 두 AWS 계정에 액세스하는 방법의 예로 들어 있습니다.

에서 명명된 프로필을 사용하는 방법에 대한 자세한 내용은 AWS Command Line Interface설명서의 명명된 프로필을 참조하십시오. AWS CLI

소스 Kinesis 스트림 생성

이 섹션에서는 소스 계정에 Kinesis 스트림을 생성합니다.

애플리케이션에서 입력에 사용할 Kinesis 스트림을 생성하려면 다음 명령을 입력합니다. 참고로 --profile 파라미터는 사용할 계정 프로필을 지정합니다.

$ aws kinesis create-stream \ --stream-name SourceAccountExampleInputStream \ --shard-count 1 \ --profile ka-source-stream-account-profile
IAM 역할 및 정책 생성 및 업데이트

AWS 계정 간 객체 액세스를 허용하려면 원본 계정에서 IAM 역할 및 정책을 생성합니다. 그런 다음 싱크 계정에서 IAM 정책을 수정합니다. IAM 역할과 정책을 생성하고 관리하는 방법에 대한 자세한 내용은 AWS Identity and Access Management 사용 설명서에서 다음 주제를 참조하세요.

싱크 계정 역할 및 정책
  1. 시작하기 자습서에서 kinesis-analytics-service-MyApplication-us-west-2정책을 편집하세요. 이 정책을 사용하면 소스 계정의 역할을 맡아 소스 스트림을 읽을 수 있습니다.

    참고

    콘솔을 사용하여 애플리케이션을 만들면 콘솔에서 kinesis-analytics-service-<application name>-<application region>라는 정책과 kinesisanalytics-<application name>-<application region>이라는 역할을 생성합니다.

    아래에 강조 표시된 섹션을 정책에 추가하세요. 샘플 계정 ID(SOURCE01234567)를 소스 스트림에 사용할 계정 ID로 바꾸세요.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AssumeRoleInSourceAccount", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::SOURCE01234567:role/KA-Source-Stream-Role" }, { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-username/aws-kinesis-analytics-java-apps-1.0.jar" ] }, { "Sid": "ListCloudwatchLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:SINK012345678:log-group:*" ] }, { "Sid": "ListCloudwatchLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:SINK012345678:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutCloudwatchLogs", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:SINK012345678:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] } ] }
  2. kinesis-analytics-MyApplication-us-west-2 역할을 열고 Amazon 리소스 이름(ARN)을 기록해 둡니다. 다음 섹션에서 이 값을 사용하게 됩니다. 역할 ARN 번호는 다음과 같습니다.

    arn:aws:iam::SINK012345678:role/service-role/kinesis-analytics-MyApplication-us-west-2
소스 계정 역할 및 정책
  1. KA-Source-Stream-Policy라는 소스 계정에서 정책을 생성합니다. 정책에는 다음 JSON을 사용합니다. 샘플 계정 번호를 소스 계정의 계정 번호로 바꾸세요.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadInputStream", "Effect": "Allow", "Action": [ "kinesis:DescribeStream", "kinesis:GetRecords", "kinesis:GetShardIterator", "kinesis:ListShards" ], "Resource": "arn:aws:kinesis:us-west-2:SOURCE123456784:stream/SourceAccountExampleInputStream" } ] }
  2. MF-Source-Stream-Role라는 소스 계정에서 역할을 생성합니다. Managed Flink 사용 사례를 사용하여 역할을 만들려면 다음과 같이 하세요.

    1. IAM Managed Console에서 역할 생성을 선택합니다.

    2. 역할 생성 페이지에서 AWS 서비스를 선택합니다. 서비스 목록에서 Kinesis를 선택합니다.

    3. 사용 사례 선택 섹션에서 Managed Service for Apache Flink를 선택합니다.

    4. 다음: 권한을 선택합니다.

    5. 이전 단계에서 만든 KA-Source-Stream-Policy 권한 정책을 추가합니다. 다음: 태그를 선택합니다.

    6. 다음: 검토를 선택합니다.

    7. 역할 이름을 KA-Source-Stream-Role로 지정합니다. 애플리케이션은 이 역할을 사용하여 소스 스트림에 액세스합니다.

  3. 싱크 계정의 kinesis-analytics-MyApplication-us-west-2 ARN을 소스 계정 내 KA-Source-Stream-Role 역할의 신뢰 관계에 추가합니다.

    1. IAM 콘솔에서 KA-Source-Stream-Role를 엽니다.

    2. 신뢰 관계(Trust Relationships) 탭을 선택합니다.

    3. 신뢰 관계 편집(Edit trust relationship)을 선택합니다.

    4. 신뢰 관계에 대해 다음 코드를 사용합니다. 샘플 계정 ID(SINK012345678)를 싱크 계정 ID로 바꿉니다.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::SINK012345678:role/service-role/kinesis-analytics-MyApplication-us-west-2" }, "Action": "sts:AssumeRole" } ] }
Python 스크립트 업데이트

이 섹션에서는 소스 계정 프로필을 사용하도록 샘플 데이터를 생성하는 Python 스크립트를 업데이트합니다.

다음과 같이 강조 표시된 변경 사항으로 stock.py 스크립트를 업데이트하세요.

import json import boto3 import random import datetime import os os.environ['AWS_PROFILE'] ='ka-source-stream-account-profile' os.environ['AWS_DEFAULT_REGION'] = 'us-west-2' kinesis = boto3.client('kinesis') def getReferrer(): data = {} now = datetime.datetime.now() str_now = now.isoformat() data['event_time'] = str_now data['ticker'] = random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']) price = random.random() * 100 data['price'] = round(price, 2) return data while True: data = json.dumps(getReferrer()) print(data) kinesis.put_record( StreamName="SourceAccountExampleInputStream", Data=data, PartitionKey="partitionkey")
Java 애플리케이션 업데이트

이 섹션에서는 소스 스트림에서 읽을 때 소스 계정 역할을 맡도록 Java 애플리케이션 코드를 업데이트합니다.

BasicStreamingJob.java 파일을 다음과 같이 변경합니다. 예제 소스 계정 번호(SOURCE01234567)를 소스 계정 번호로 바꾸세요.

package com.amazonaws.services.managed-flink; import com.amazonaws.services.managed-flink.runtime.KinesisAnalyticsRuntime; import org.apache.flink.api.common.serialization.SimpleStringSchema; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.connectors.kinesis.FlinkKinesisConsumer; import org.apache.flink.streaming.connectors.kinesis.FlinkKinesisProducer; import org.apache.flink.streaming.connectors.kinesis.config.ConsumerConfigConstants; import org.apache.flink.streaming.connectors.kinesis.config.AWSConfigConstants; import java.io.IOException; import java.util.Map; import java.util.Properties; /** * A basic Managed Service for Apache Flink for Java application with Kinesis data streams * as source and sink. */ public class BasicStreamingJob { private static final String region = "us-west-2"; private static final String inputStreamName = "SourceAccountExampleInputStream"; private static final String outputStreamName = ExampleOutputStream; private static final String roleArn = "arn:aws:iam::SOURCE01234567:role/KA-Source-Stream-Role"; private static final String roleSessionName = "ksassumedrolesession"; private static DataStream<String> createSourceFromStaticConfig(StreamExecutionEnvironment env) { Properties inputProperties = new Properties(); inputProperties.setProperty(AWSConfigConstants.AWS_CREDENTIALS_PROVIDER, "ASSUME_ROLE"); inputProperties.setProperty(AWSConfigConstants.AWS_ROLE_ARN, roleArn); inputProperties.setProperty(AWSConfigConstants.AWS_ROLE_SESSION_NAME, roleSessionName); inputProperties.setProperty(ConsumerConfigConstants.AWS_REGION, region); inputProperties.setProperty(ConsumerConfigConstants.STREAM_INITIAL_POSITION, "LATEST"); return env.addSource(new FlinkKinesisConsumer<>(inputStreamName, new SimpleStringSchema(), inputProperties)); } private static KinesisStreamsSink<String> createSinkFromStaticConfig() { Properties outputProperties = new Properties(); outputProperties.setProperty(AWSConfigConstants.AWS_REGION, region); return KinesisStreamsSink.<String>builder() .setKinesisClientProperties(outputProperties) .setSerializationSchema(new SimpleStringSchema()) .setStreamName(outputProperties.getProperty("OUTPUT_STREAM", "ExampleOutputStream")) .setPartitionKeyGenerator(element -> String.valueOf(element.hashCode())) .build(); } public static void main(String[] args) throws Exception { // set up the streaming execution environment final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); DataStream<String> input = createSourceFromStaticConfig(env); input.addSink(createSinkFromStaticConfig()); env.execute("Flink Streaming Java API Skeleton"); } }
애플리케이션 빌드, 업로드, 실행

애플리케이션을 업데이트하고 실행하려면 다음을 수행합니다.

  1. pom.xml 파일이 있는 디렉토리에서 다음 명령을 실행하여 애플리케이션을 다시 빌드합니다.

    mvn package -Dflink.version=1.15.3
  2. Amazon Simple Storage Service(S3) 버킷에서 이전 JAR 파일을 삭제한 후 새 aws-kinesis-analytics-java-apps-1.0.jar파일을 S3 버킷으로 업로드합니다.

  3. Managed Service for Apache Flink 콘솔의 애플리케이션 페이지에서 구성, 업데이트를 선택하여 애플리케이션 JAR 파일을 다시 로드합니다.

  4. stock.py 스크립트를 실행하여 소스 스트림으로 데이터를 전송합니다.

    python stock.py

이제 애플리케이션은 다른 계정의 Kinesis 스트림에서 데이터를 읽습니다.

애플리케이션이 작동하는지 확인하려면 ExampleOutputStream 스트림의 PutRecords.Bytes 지표를 확인하면 됩니다. 출력 스트림에 활동이 있는 경우 애플리케이션이 제대로 작동하는 것입니다.

자습서: Amazon MSK에서 사용자 지정 트러스트 스토어 사용

참고

현재 예는 을 참조하십시오. 예제

현재 데이터 소스 API

최신 데이터 소스 API를 사용하는 경우, 애플리케이션은 여기에 설명된 Amazon MSK Config Providers 유틸리티를 활용할 수 있습니다. 이렇게 하면 KafkaSource 함수가 Amazon S3의 상호 TLS를 위해 키스토어와 신뢰 저장소에 액세스할 수 있습니다.

... // define names of config providers: builder.setProperty("config.providers", "secretsmanager,s3import"); // provide implementation classes for each provider: builder.setProperty("config.providers.secretsmanager.class", "com.amazonaws.kafka.config.providers.SecretsManagerConfigProvider"); builder.setProperty("config.providers.s3import.class", "com.amazonaws.kafka.config.providers.S3ImportConfigProvider"); String region = appProperties.get(Helpers.S3_BUCKET_REGION_KEY).toString(); String keystoreS3Bucket = appProperties.get(Helpers.KEYSTORE_S3_BUCKET_KEY).toString(); String keystoreS3Path = appProperties.get(Helpers.KEYSTORE_S3_PATH_KEY).toString(); String truststoreS3Bucket = appProperties.get(Helpers.TRUSTSTORE_S3_BUCKET_KEY).toString(); String truststoreS3Path = appProperties.get(Helpers.TRUSTSTORE_S3_PATH_KEY).toString(); String keystorePassSecret = appProperties.get(Helpers.KEYSTORE_PASS_SECRET_KEY).toString(); String keystorePassSecretField = appProperties.get(Helpers.KEYSTORE_PASS_SECRET_FIELD_KEY).toString(); // region, etc.. builder.setProperty("config.providers.s3import.param.region", region); // properties builder.setProperty("ssl.truststore.location", "${s3import:" + region + ":" + truststoreS3Bucket + "/" + truststoreS3Path + "}"); builder.setProperty("ssl.keystore.type", "PKCS12"); builder.setProperty("ssl.keystore.location", "${s3import:" + region + ":" + keystoreS3Bucket + "/" + keystoreS3Path + "}"); builder.setProperty("ssl.keystore.password", "${secretsmanager:" + keystorePassSecret + ":" + keystorePassSecretField + "}"); builder.setProperty("ssl.key.password", "${secretsmanager:" + keystorePassSecret + ":" + keystorePassSecretField + "}"); ...

자세한 내용 및 안내는 여기에서 확인할 수 있습니다.

레거시 API SourceFunction

레거시 SourceFunction API를 사용하는 경우 애플리케이션은 메서드를 재정의하는 사용자 지정 직렬화 및 역직렬화 스키마를 사용하여 사용자 지정 신뢰 저장소를 로드합니다open. 이렇게 하면 애플리케이션이 다시 시작되거나 스레드를 교체한 후에 애플리케이션에서 트러스트 스토어를 사용할 수 있습니다.

사용자 지정 트러스트 스토어는 다음 코드를 사용하여 검색 및 저장됩니다.

public static void initializeKafkaTruststore() { ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); URL inputUrl = classLoader.getResource("kafka.client.truststore.jks"); File dest = new File("/tmp/kafka.client.truststore.jks"); try { FileUtils.copyURLToFile(inputUrl, dest); } catch (Exception ex) { throw new FlinkRuntimeException("Failed to initialize Kakfa truststore", ex); } }
참고

Apache Flink를 사용하려면 트러스트 스토어가 JKS 형식이어야 합니다.

참고

이 연습에 필수 사전 조건을 설정하려면 먼저 튜토리얼: 를 사용하여 시작하기 DataStream API 연습을 완료하세요.

다음 자습서에서는 사용자 지정, 사설 또는 자체 호스팅 CA(인증 기관)에서 발급한 서버 인증서를 사용하는 Kafka 클러스터에 안전하게 연결(전송 중 암호화)하는 방법을 설명합니다.

Kafka 클라이언트 (예: Flink 애플리케이션) 는 TLS를 통해 Kafka 클러스터에 안전하게 연결하기 위해 Kafka 클러스터 서버 인증서 (예: 발급 CA에서 루트 수준 CA까지) 가 제공하는 완전한 신뢰 체인을 신뢰해야 합니다. 사용자 지정 신뢰 저장소의 예로 상호 TLS (MTLS) 인증이 활성화된 Amazon MSK 클러스터를 사용하겠습니다. 이는 MSK 클러스터 노드가 AWS Certificate Manager 사설 인증 기관 (ACM Private CA) 에서 발급한 서버 인증서를 사용한다는 것을 의미합니다. 이 인증서는 사용자 계정 및 지역 전용이므로 Flink 응용 프로그램을 실행하는 JVM (Java Virtual Machine) 의 기본 신뢰 저장소에서 신뢰하지 않습니다.

참고
  • 키스토어는 애플리케이션이 확인을 위해 서버나 클라이언트 모두에 제공해야 하는 개인 키와 ID 인증서를 저장하는 데 사용됩니다.

  • 신뢰 저장소는 SSL 연결을 통해 서버가 제공하는 인증서를 확인하는 인증 기관 (CA) 의 인증서를 저장하는 데 사용됩니다.

이 자습서의 기법은 다음과 같이 Managed Service for Apache Flink 애플리케이션과 다른 Apache Kafka 소스 간의 상호 작용에도 사용할 수 있습니다.

Amazon MSK 클러스터를 사용하여 VPC를 생성합니다.

Managed Service for Apache Flink 애플리케이션에서 액세스할 샘플 VPC 및 Amazon MSK 클러스터를 생성하려면 Amazon MSK 사용 시작하기 자습서를 따르세요.

자습서를 완료할 때는 다음 작업도 수행하세요.

  • 3단계: 주제 만들기에서 kafka-topics.sh --create 명령을 반복하여 AWS KafkaTutorialTopicDestination라는 이름의 대상 주제를 생성합니다.

    bin/kafka-topics.sh --create --bootstrap-server ZooKeeperConnectionString --replication-factor 3 --partitions 1 --topic AWSKafkaTutorialTopicDestination
    참고

    kafka-topics.sh 명령이 ZooKeeperClientTimeoutException를 반환하는 경우 Kafka 클러스터의 보안 그룹에 클라이언트 인스턴스의 프라이빗 IP 주소에서 들어오는 모든 트래픽을 허용하는 인바운드 규칙이 있는지 확인하세요.

  • 클러스터의 부트스트랩 서버 목록을 기록합니다. 다음 명령을 사용하여 부트스트랩 서버 목록을 가져올 수 있습니다 (MSK 클러스터의 ClusterArnARN으로 대체).

    aws kafka get-bootstrap-brokers --region us-west-2 --cluster-arn ClusterArn {... "BootstrapBrokerStringTls": "b-2.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094,b-1.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094,b-3.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094" }
  • 이 자습서의 단계와 사전 필수 자습서를 따를 때는 코드, 명령 및 콘솔 항목에서 선택한 AWS 지역을 사용해야 합니다.

사용자 지정 신뢰 저장소를 만들어 클러스터에 적용하세요.

이 섹션에서는 사용자 지정 CA(인증 기관)를 만들고, 이를 사용하여 사용자 지정 트러스트 스토어를 생성하고, 이를 MSK 클러스터에 적용합니다.

사용자 지정 트러스트 스토어를 생성하고 적용하려면 Amazon Managed Streaming for Apache Kafka 개발자 안내서클라이언트 인증 자습서를 따르세요.

애플리케이션 코드 생성

이 섹션에서는 애플리케이션 JAR 파일을 다운로드하고 컴파일합니다.

이 예제의 Java 애플리케이션 코드는 에서 사용할 수 GitHub 있습니다. 애플리케이션 코드를 다운로드하려면 다음을 수행하세요.

  1. 아직 설치하지 않았다면 Git 클라이언트를 설치합니다. 자세한 정보는 Git 설치를 참조하세요.

  2. 다음 명령을 사용하여 원격 리포지토리를 복제합니다:

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. 애플리케이션 코드는 amazon-kinesis-data-analytics-java-examples/CustomKeystore에 있습니다. 코드를 검토하여 Managed Service for Apache Flink 코드의 구조를 익힐 수 있습니다.

  4. 명령줄 Maven 도구 또는 원하는 개발 환경을 사용하여 JAR 파일을 만드세요. 명령줄 Maven 도구를 사용하여 JAR 파일을 컴파일하려면 다음을 입력합니다.

    mvn package -Dflink.version=1.15.3

    빌드가 성공하면 다음 파일이 생성됩니다.

    target/flink-app-1.0-SNAPSHOT.jar
    참고

    제공된 소스 코드는 Java 11의 라이브러리를 사용합니다.

아파치 플링크 스트리밍 자바 코드를 업로드하세요.

이 섹션에서는 튜토리얼: 를 사용하여 시작하기 DataStream API 자습서에서 생성한 Amazon S3 버킷으로 애플리케이션 코드를 업로드합니다.

참고

시작 자습서에서 Amazon S3 버킷을 삭제한 경우 애플리케이션 코드 JAR 파일을 업로드하세요. 단계를 다시 수행하세요.

  1. Amazon S3 콘솔에서 ka-app-code- <username>버킷을 선택하고 업로드를 선택합니다.

  2. 파일 선택 단계에서 파일 추가를 선택합니다. 이전 단계에서 생성한 flink-app-1.0-SNAPSHOT.jar 파일로 이동합니다.

  3. 개체 정보에 대한 설정은 변경할 필요가 없으므로 업로드를 선택합니다.

이제 애플리케이션 코드가 애플리케이션에서 액세스할 수 있는 Amazon S3 버킷에 저장됩니다.

애플리케이션 생성
  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Managed Service for Apache Flink 대시보드에서 분석 애플리케이션 생성을 선택합니다.

  3. Managed Service for Apache Flink - 애플리케이션 생성 페이지에서 다음과 같이 애플리케이션 세부 정보를 제공합니다.

    • 애플리케이션 명칭MyApplication을 입력합니다.

    • 런타임에서 Apache Flink 버전 1.15.2를 선택합니다.

  4. 액세스 권한에서 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  5. 애플리케이션 생성을 선택합니다.

참고

콘솔을 사용하여 Managed Service for Apache Flink를 만들 때 내 애플리케이션에 대한 IAM 역할 및 정책을 둘 수 있는 옵션이 있습니다. 귀하의 애플리케이션은 이 역할 및 정책을 사용하여 종속 리소스에 액세스합니다. 이러한 IAM 리소스의 이름은 애플리케이션 명칭과 리전을 사용하여 다음과 같이 지정됩니다.

  • 정책: kinesis-analytics-service-MyApplication-us-west-2

  • 역할: kinesisanalytics-MyApplication-us-west-2

애플리케이션을 구성합니다.
  1. MyApplication페이지에서 구성을 선택합니다.

  2. 애플리케이션 구성 페이지에서 코드 위치를 입력합니다.

    • Amazon S3 버킷의 경우 ka-app-code-<username>를 입력합니다.

    • Amazon S3 객체 경로에는 flink-app-1.0-SNAPSHOT.jar를 입력합니다.

  3. 애플리케이션 리소스에 대한 액세스 아래에서 액세스 권한의 경우 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

    참고

    콘솔을 사용하여 애플리케이션 리소스(예: 로그 또는 VPC)를 지정하면 콘솔은 애플리케이션 실행 역할을 수정하여 해당 리소스에 액세스할 권한을 부여합니다.

  4. 속성에서 그룹 추가를 선택합니다. 다음 속성을 입력합니다.

    그룹 ID
    KafkaSource 주제 AWS KafkaTutorialTopic
    KafkaSource bootstrap.servers 이전에 저장한 부트스트랩 서버 목록
    KafkaSource security.protocol SSL
    KafkaSource ssl.truststore.location /usr/lib/jvm/java-11-amazon-corretto/lib/security/cacerts
    KafkaSource ssl.truststore.password changeit
    참고

    기본 인증서의 ssl.truststore.password는 “changeit”입니다. 기본 인증서를 사용하는 경우에는 이 값을 변경할 필요가 없습니다.

    그룹 추가를 다시 선택합니다. 다음 속성을 입력합니다.

    그룹 ID
    KafkaSink 주제 AWS KafkaTutorialTopicDestination
    KafkaSink bootstrap.servers 이전에 저장한 부트스트랩 서버 목록
    KafkaSink security.protocol SSL
    KafkaSink ssl.truststore.location /usr/lib/jvm/java-11-amazon-corretto/lib/security/cacerts
    KafkaSink ssl.truststore.password changeit
    KafkaSink transaction.timeout.ms 1000

    애플리케이션 코드는 위의 애플리케이션 속성을 읽고 VPC 및 Amazon MSK 클러스터와 상호 작용하는 데 사용되는 소스 및 싱크를 구성합니다. 클러스터 속성 사용에 대한 자세한 내용은 런타임 속성 섹션을 참조하세요.

  5. 스냅샷에서 비활성화를 선택합니다. 이렇게 하면 잘못된 애플리케이션 상태 데이터를 로드하지 않고도 애플리케이션을 더 쉽게 업데이트할 수 있습니다.

  6. 모니터링에서 지표 수준 모니터링애플리케이션으로 설정되어 있는지 확인합니다.

  7. CloudWatch 로깅하려면 활성화 확인란을 선택합니다.

  8. Virtual Private Cloud(VPC) 섹션에서 애플리케이션과 연결할 VPC를 선택합니다. 애플리케이션이 VPC 리소스에 액세스하는 데 사용할 VPC와 연결된 서브넷 및 보안 그룹을 선택합니다.

  9. 업데이트를 선택합니다.

참고

CloudWatch 로깅을 활성화하도록 선택하면 Apache Flink용 관리형 서비스에서 로그 그룹과 로그 스트림을 자동으로 생성합니다. 이러한 리소스의 이름은 다음과 같습니다.

  • 로그 그룹: /aws/kinesis-analytics/MyApplication

  • 로그 스트림: kinesis-analytics-log-stream

이 로그 스트림은 애플리케이션을 모니터링하는 데 사용됩니다.

애플리케이션을 실행합니다

애플리케이션을 실행하고 Apache Flink 대시보드를 연 다음 원하는 Flink 작업을 선택하면 Flink 작업 그래프를 볼 수 있습니다.

애플리케이션 테스트

이 섹션에서는 소스 주제에 레코드를 쓰기 합니다. 애플리케이션은 소스 주제에서 레코드를 읽고 대상 주제에 쓰기 합니다. 소스 주제에 레코드를 쓰고 대상 주제에서 레코드를 읽어 애플리케이션이 작동 중인지 확인합니다.

주제에서 레코드를 쓰고 읽으려면 Amazon MSK 사용 시작하기 자습서의 6단계: 데이터 생성 및 소비의 단계를 따르세요.

대상 주제에서 읽으려면 클러스터에 대한 두 번째 연결에서 소스 주제 대신 대상 주제 이름을 사용하세요.

bin/kafka-console-consumer.sh --bootstrap-server BootstrapBrokerString --consumer.config client.properties --topic AWS KafkaTutorialTopicDestination --from-beginning

대상 주제에 레코드가 표시되지 않는 경우 문제 해결 주제의 VPC의 리소스에 액세스할 수 없음 섹션을 참조하세요.

Python 예제

다음 예제는 Apache Flink Table API와 함께 Python을 사용하여 애플리케이션을 만드는 방법을 보여줍니다.

예: Python에서 텀블링 윈도우 만들기

참고

현재 예제는 을 참조하십시오. 예제

이 연습에서는 텀블링 창을 사용하여 데이터를 집계하는 Python Managed Service for Apache Flink 애플리케이션을 생성합니다.

참고

이 연습에 필수 사전 조건을 설정하려면 먼저 튜토리얼: Python 사용하기 시작하기 연습을 완료하세요.

종속 리소스 생성

이 연습을 위해 Managed Service for Apache Flink 애플리케이션을 생성하기 전에 다음과 같은 종속 리소스를 생성해야 합니다.

  • 두 개의 Kinesis Data Streams(ExampleInputStreamExampleOutputStream)

  • 애플리케이션 코드를 저장할 Amazon S3 버킷(ka-app-code-<username>)

콘솔을 사용하여 Kinesis 스트림과 Amazon S3 버킷을 만들 수 있습니다. 이러한 리소스를 만드는 방법 설명은 다음 주제를 참조하세요.

입력 스트림에 샘플 레코드 쓰기

이 섹션에서는 Python 스크립트를 사용하여 애플리케이션에서 처리할 샘플 레코드를 스트림에 쓰기 합니다.

참고

이 섹션에서는 AWS SDK for Python (Boto)이 필요합니다.

참고

이 섹션의 Python 스크립트는 AWS CLI를 사용합니다. 계정 자격 증명과 기본 지역을 사용하도록 구성해야 합니다. AWS CLI 를 AWS CLI구성하려면 다음을 입력합니다.

aws configure
  1. 다음 콘텐츠를 가진 stock.py이라는 파일을 생성합니다:

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { 'event_time': datetime.datetime.now().isoformat(), 'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']), 'price': round(random.random() * 100, 2)} def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey") if __name__ == '__main__': generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  2. stock.py 스크립트를 실행합니다.

    $ python stock.py

    자습서의 나머지 부분을 완료하는 동안 스크립트가 계속 돌아가게 둡니다.

애플리케이션 코드 다운로드 및 검토

이 예제의 Python 응용 프로그램 코드는 에서 사용할 수 GitHub 있습니다. 애플리케이션 코드를 다운로드하려면 다음을 수행하세요.

  1. 아직 설치하지 않았다면 Git 클라이언트를 설치합니다. 자세한 정보는 Git 설치를 참조하세요.

  2. 다음 명령을 사용하여 원격 리포지토리를 복제합니다:

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. amazon-kinesis-data-analytics-java-examples/python/TumblingWindow 디렉터리로 이동합니다.

애플리케이션 코드는 tumbling-windows.py 파일에 있습니다. 애플리케이션 코드에 대해 다음을 유의하십시오:

  • 애플리케이션은 Kinesis 테이블 소스를 사용하여 소스 스트림에서 읽습니다. 다음 스니펫은 create_table 함수를 호출하여 Kinesis 테이블 소스를 생성합니다.

    table_env.execute_sql( create_input_table(input_table_name, input_stream, input_region, stream_initpos) )

    create_table 함수는 SQL 명령을 사용하여 스트리밍 소스가 지원하는 테이블을 생성합니다.

    def create_input_table(table_name, stream_name, region, stream_initpos): return """ CREATE TABLE {0} ( ticker VARCHAR(6), price DOUBLE, event_time TIMESTAMP(3), WATERMARK FOR event_time AS event_time - INTERVAL '5' SECOND ) PARTITIONED BY (ticker) WITH ( 'connector' = 'kinesis', 'stream' = '{1}', 'aws.region' = '{2}', 'scan.stream.initpos' = '{3}', 'format' = 'json', 'json.timestamp-format.standard' = 'ISO-8601' ) """.format(table_name, stream_name, region, stream_initpos)
  • 애플리케이션은 Tumble 연산자를 사용하여 지정된 텀블링 윈도우 내에서 레코드를 집계하고 집계된 레코드를 테이블 객체로 반환합니다.

    tumbling_window_table = ( input_table.window( Tumble.over("10.seconds").on("event_time").alias("ten_second_window") ) .group_by("ticker, ten_second_window") .select("ticker, price.min as price, to_string(ten_second_window.end) as event_time")
  • 애플리케이션은 flink-sql-connector-kinesis-1.15.2.jar의 Kinesis Flink 커넥터를 사용합니다.

아파치 플링크 스트리밍 Python 코드 압축 및 업로드

이 섹션에서는 종속 리소스 생성 섹션에서 생성한 Amazon S3 버킷에 애플리케이션 코드를 업로드합니다.

  1. 선호하는 압축 애플리케이션을 사용하여 tumbling-windows.pyflink-sql-connector-kinesis-1.15.2.jar 파일을 압축합니다. 아카이브 이름은 myapp.zip라고 짓습니다.

  2. Amazon S3 콘솔에서 ka-app-code- <username>버킷을 선택하고 업로드를 선택합니다.

  3. 파일 선택 단계에서 파일 추가를 선택합니다. 이전 단계에서 생성한 myapp.zip 파일로 이동합니다.

  4. 개체 정보에 대한 설정은 변경할 필요가 없으므로 업로드를 선택합니다.

이제 애플리케이션 코드가 애플리케이션에서 액세스할 수 있는 Amazon S3 버킷에 저장됩니다.

Apache Flink용 관리형 서비스 애플리케이션을 생성하고 실행합니다.

콘솔을 사용하여 애플리케이션을 생성, 구성, 업데이트 및 실행하려면 다음 단계를 수행하세요.

애플리케이션 생성
  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Managed Service for Apache Flink 대시보드에서 분석 애플리케이션 생성을 선택합니다.

  3. Managed Service for Apache Flink - 애플리케이션 생성 페이지에서 다음과 같이 애플리케이션 세부 정보를 제공합니다.

    • 애플리케이션 명칭MyApplication을 입력합니다.

    • 런타임에서 Apache Flink를 선택합니다.

      참고

      Managed Service for Apache Flink는 Apache Flink 버전 1.15.2를 사용합니다.

    • 버전 풀다운은 Apache Flink 버전 1.15.2(권장 버전)로 그대로 두세요.

  4. 액세스 권한에서 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  5. 애플리케이션 생성을 선택합니다.

참고

콘솔을 사용하여 Managed Service for Apache Flink 애플리케이션을 만들 때 내 애플리케이션에 대한 IAM 역할 및 정책을 둘 수 있는 옵션이 있습니다. 귀하의 애플리케이션은 이 역할 및 정책을 사용하여 종속 리소스에 액세스합니다. 이러한 IAM 리소스의 이름은 애플리케이션 명칭과 리전을 사용하여 다음과 같이 지정됩니다.

  • 정책: kinesis-analytics-service-MyApplication-us-west-2

  • 역할: kinesisanalytics-MyApplication-us-west-2

애플리케이션 구성
  1. MyApplication페이지에서 구성을 선택합니다.

  2. 애플리케이션 구성 페이지에서 코드 위치를 입력합니다.

    • Amazon S3 버킷의 경우 ka-app-code-<username>를 입력합니다.

    • Amazon S3 객체 경로에는 myapp.zip를 입력합니다.

  3. 애플리케이션 리소스에 대한 액세스 아래에서 액세스 권한의 경우 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  4. 속성에서 그룹 추가를 선택합니다.

  5. 다음을 입력합니다:

    그룹 ID
    consumer.config.0 input.stream.name ExampleInputStream
    consumer.config.0 aws.region us-west-2
    consumer.config.0 scan.stream.initpos LATEST

    저장을 선택합니다.

  6. 속성에서 그룹 추가를 다시 선택합니다.

  7. 다음을 입력합니다:

    그룹 ID
    producer.config.0 output.stream.name ExampleOutputStream
    producer.config.0 aws.region us-west-2
    producer.config.0 shard.count 1
  8. 속성에서 그룹 추가를 다시 선택합니다. 그룹 IDkinesis.analytics.flink.run.options를 입력합니다. 이 특수 속성 그룹은 애플리케이션에 코드 리소스를 찾을 수 있는 위치를 알려줍니다. 자세한 내용을 알아보려면 코드 파일 지정 섹션을 참조하세요.

  9. 다음을 입력합니다:

    그룹 ID
    kinesis.analytics.flink.run.options python tumbling-windows.py
    kinesis.analytics.flink.run.options jarfile flink-sql-connector-kinesis-1.15.2.jar
  10. 모니터링에서 지표 수준 모니터링애플리케이션으로 설정되어 있는지 확인합니다.

  11. CloudWatch 로깅의 경우 활성화 확인란을 선택합니다.

  12. 업데이트를 선택합니다.

참고

CloudWatch 로깅을 활성화하도록 선택하면 Apache Flink용 관리형 서비스에서 로그 그룹과 로그 스트림을 자동으로 생성합니다. 이러한 리소스의 이름은 다음과 같습니다.

  • 로그 그룹: /aws/kinesis-analytics/MyApplication

  • 로그 스트림: kinesis-analytics-log-stream

이 로그 스트림은 애플리케이션을 모니터링하는 데 사용됩니다. 이 로그 스트림은 애플리케이션이 결과를 전송하는 데 사용하는 로그 스트림과 다릅니다.

IAM 정책을 편집합니다.

IAM 정책을 편집하여 Kinesis Data Streams에 액세스할 수 있는 권한을 추가합니다.

  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 여세요.

  2. 정책을 선택하세요. 이전 섹션에서 콘솔이 생성한 kinesis-analytics-service-MyApplication-us-west-2 정책을 선택합니다.

  3. 요약 페이지에서 정책 편집을 선택합니다. JSON 탭을 선택합니다.

  4. 다음 정책 예제의 강조 표시된 부분을 정책에 추가하세요. 샘플 계정 ID(012345678901)를 내 계정 ID로 바꿉니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "logs:DescribeLogGroups", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*", "arn:aws:s3:::ka-app-code-<username>/myapp.zip" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": "logs:DescribeLogStreams", "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": "logs:PutLogEvents", "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" }, { "Sid": "ListCloudwatchLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }
애플리케이션을 실행합니다

애플리케이션을 실행하고 Apache Flink 대시보드를 연 다음 원하는 Flink 작업을 선택하면 Flink 작업 그래프를 볼 수 있습니다.

CloudWatch 콘솔에서 Apache Flink용 관리형 서비스 메트릭을 확인하여 애플리케이션이 작동하는지 확인할 수 있습니다.

리소스를 정리하세요. AWS

이 섹션에는 텀블링 윈도우 튜토리얼에서 만든 AWS 리소스를 정리하는 절차가 포함되어 있습니다.

Apache Flink용 관리형 서비스 애플리케이션 삭제
  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Apache Flink용 관리형 서비스 패널에서 선택합니다. MyApplication

  3. 애플리케이션 페이지에서 삭제를 선택한 다음 삭제를 확인합니다.

Kinesis 데이터 스트림을 삭제합니다.
  1. https://console.aws.amazon.com/kinesis에서 Kinesis 콘솔을 엽니다.

  2. Kinesis Data Streams 패널에서 을 선택합니다. ExampleInputStream

  3. ExampleInputStream페이지에서 Kinesis 스트림 삭제를 선택한 다음 삭제를 확인합니다.

  4. Kinesis 스트림 페이지에서 를 선택하고 작업을 선택하고 삭제를 선택한 다음 삭제를 확인합니다. ExampleOutputStream

Amazon S3 객체 및 버킷을 삭제합니다.
  1. https://console.aws.amazon.com/s3/에서 S3 콘솔을 엽니다.

  2. ka-app-code- 버킷을 선택합니다. <username>

  3. 삭제를 선택한 후 버킷 이름을 입력하여 삭제를 확인합니다.

IAM 리소스를 삭제합니다.
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 바에서 정책을 선택합니다.

  3. 필터 컨트롤에서 kinesis를 입력합니다.

  4. kinesis-analytics-service- MyApplication -us-west-2 정책을 선택합니다.

  5. 정책 작업을 선택한 후 삭제를 선택합니다.

  6. 탐색 모음에서 역할을 선택합니다.

  7. 키네시스-애널리틱스- -US-West-2 역할을 선택합니다. MyApplication

  8. 역할 삭제를 선택하고 삭제를 확인합니다.

CloudWatch 리소스 삭제하기
  1. https://console.aws.amazon.com/cloudwatch/ 에서 CloudWatch 콘솔을 엽니다.

  2. 탐색 바에서 로그를 선택합니다.

  3. MyApplication/aws/kinesis-analytics/ 로그 그룹을 선택합니다.

  4. 로그 그룹 삭제를 선택한 다음 삭제를 확인합니다.

예: Python에서 슬라이딩 윈도우 만들기

참고

현재 예제는 을 참조하십시오예제.

참고

이 연습에 필수 사전 조건을 설정하려면 먼저 튜토리얼: Python 사용하기 시작하기 연습을 완료하세요.

종속 리소스 생성

이 연습을 위해 Managed Service for Apache Flink 애플리케이션을 생성하기 전에 다음과 같은 종속 리소스를 생성해야 합니다.

  • 두 개의 Kinesis Data Streams(ExampleInputStreamExampleOutputStream)

  • 애플리케이션 코드를 저장할 Amazon S3 버킷(ka-app-code-<username>)

콘솔을 사용하여 Kinesis 스트림과 Amazon S3 버킷을 만들 수 있습니다. 이러한 리소스를 만드는 방법 설명은 다음 주제를 참조하세요.

입력 스트림에 샘플 레코드 쓰기

이 섹션에서는 Python 스크립트를 사용하여 애플리케이션에서 처리할 샘플 레코드를 스트림에 쓰기 합니다.

참고

이 섹션에서는 AWS SDK for Python (Boto)이 필요합니다.

참고

이 섹션의 Python 스크립트는 AWS CLI를 사용합니다. 계정 자격 증명과 기본 지역을 사용하도록 구성해야 합니다. AWS CLI 를 AWS CLI구성하려면 다음을 입력합니다.

aws configure
  1. 다음 콘텐츠를 가진 stock.py이라는 파일을 생성합니다:

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { 'event_time': datetime.datetime.now().isoformat(), 'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']), 'price': round(random.random() * 100, 2)} def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey") if __name__ == '__main__': generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  2. stock.py 스크립트를 실행합니다.

    $ python stock.py

    자습서의 나머지 부분을 완료하는 동안 스크립트가 계속 돌아가게 둡니다.

애플리케이션 코드 다운로드 및 검토

이 예제의 Python 응용 프로그램 코드는 에서 사용할 수 GitHub 있습니다. 애플리케이션 코드를 다운로드하려면 다음을 수행하세요.

  1. 아직 설치하지 않았다면 Git 클라이언트를 설치합니다. 자세한 정보는 Git 설치를 참조하세요.

  2. 다음 명령을 사용하여 원격 리포지토리를 복제합니다:

    git clone https://github.com/aws-samples/>amazon-kinesis-data-analytics-java-examples
  3. amazon-kinesis-data-analytics-java-examples/python/SlidingWindow 디렉터리로 이동합니다.

애플리케이션 코드는 sliding-windows.py 파일에 있습니다. 애플리케이션 코드에 대해 다음을 유의하십시오:

  • 애플리케이션은 Kinesis 테이블 소스를 사용하여 소스 스트림에서 읽습니다. 다음 스니펫은 create_input_table 함수를 호출하여 Kinesis 테이블 소스를 생성합니다.

    table_env.execute_sql( create_input_table(input_table_name, input_stream, input_region, stream_initpos) )

    create_input_table 함수는 SQL 명령을 사용하여 스트리밍 소스가 지원하는 테이블을 생성합니다.

    def create_input_table(table_name, stream_name, region, stream_initpos): return """ CREATE TABLE {0} ( ticker VARCHAR(6), price DOUBLE, event_time TIMESTAMP(3), WATERMARK FOR event_time AS event_time - INTERVAL '5' SECOND ) PARTITIONED BY (ticker) WITH ( 'connector' = 'kinesis', 'stream' = '{1}', 'aws.region' = '{2}', 'scan.stream.initpos' = '{3}', 'format' = 'json', 'json.timestamp-format.standard' = 'ISO-8601' ) """.format(table_name, stream_name, region, stream_initpos) }
  • 애플리케이션은 Slide 연산자를 사용하여 지정된 슬라이딩 윈도우 내에서 레코드를 집계하고 집계된 레코드를 테이블 객체로 반환합니다.

    sliding_window_table = ( input_table .window( Slide.over("10.seconds") .every("5.seconds") .on("event_time") .alias("ten_second_window") ) .group_by("ticker, ten_second_window") .select("ticker, price.min as price, to_string(ten_second_window.end) as event_time") )
  • 애플리케이션은 -1.15.2.jar 파일의 Kinesis Flink 커넥터를 사용합니다. flink-sql-connector-kinesis

아파치 플링크 스트리밍 Python 코드 압축 및 업로드

이 섹션에서는 종속 리소스 생성 섹션에서 생성한 Amazon S3 버킷에 애플리케이션 코드를 업로드합니다.

이 섹션에서는 Python 애플리케이션을 패키징하는 방법을 설명합니다.

  1. 선호하는 압축 애플리케이션을 사용하여 sliding-windows.pyflink-sql-connector-kinesis-1.15.2.jar파일을 압축합니다. 아카이브 이름은 myapp.zip라고 짓습니다.

  2. Amazon S3 콘솔에서 ka-app-code- <username>버킷을 선택하고 업로드를 선택합니다.

  3. 파일 선택 단계에서 파일 추가를 선택합니다. 이전 단계에서 생성한 myapp.zip 파일로 이동합니다.

  4. 개체 정보에 대한 설정은 변경할 필요가 없으므로 업로드를 선택합니다.

이제 애플리케이션 코드가 애플리케이션에서 액세스할 수 있는 Amazon S3 버킷에 저장됩니다.

Apache Flink용 관리형 서비스 애플리케이션을 생성하고 실행합니다.

콘솔을 사용하여 애플리케이션을 생성, 구성, 업데이트 및 실행하려면 다음 단계를 수행하세요.

애플리케이션 생성
  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Managed Service for Apache Flink 대시보드에서 분석 애플리케이션 생성을 선택합니다.

  3. Managed Service for Apache Flink - 애플리케이션 생성 페이지에서 다음과 같이 애플리케이션 세부 정보를 제공합니다.

    • 애플리케이션 명칭MyApplication을 입력합니다.

    • 런타임에서 Apache Flink를 선택합니다.

      참고

      Managed Service for Apache Flink는 Apache Flink 버전 1.15.2를 사용합니다.

    • 버전 풀다운은 Apache Flink 버전 1.15.2(권장 버전)로 그대로 두세요.

  4. 액세스 권한에서 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  5. 애플리케이션 생성을 선택합니다.

참고

콘솔을 사용하여 Managed Service for Apache Flink 애플리케이션을 만들 때 내 애플리케이션에 대한 IAM 역할 및 정책을 둘 수 있는 옵션이 있습니다. 귀하의 애플리케이션은 이 역할 및 정책을 사용하여 종속 리소스에 액세스합니다. 이러한 IAM 리소스의 이름은 애플리케이션 명칭과 리전을 사용하여 다음과 같이 지정됩니다.

  • 정책: kinesis-analytics-service-MyApplication-us-west-2

  • 역할: kinesisanalytics-MyApplication-us-west-2

애플리케이션 구성
  1. MyApplication페이지에서 구성을 선택합니다.

  2. 애플리케이션 구성 페이지에서 코드 위치를 입력합니다.

    • Amazon S3 버킷의 경우 ka-app-code-<username>를 입력합니다.

    • Amazon S3 객체 경로에는 myapp.zip를 입력합니다.

  3. 애플리케이션 리소스에 대한 액세스 아래에서 액세스 권한의 경우 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  4. 속성에서 그룹 추가를 선택합니다.

  5. 다음 애플리케이션 속성 및 값을 입력합니다:

    그룹 ID
    consumer.config.0 input.stream.name ExampleInputStream
    consumer.config.0 aws.region us-west-2
    consumer.config.0 scan.stream.initpos LATEST

    저장을 선택합니다.

  6. 속성에서 그룹 추가를 다시 선택합니다.

  7. 다음 애플리케이션 속성 및 값을 입력합니다:

    그룹 ID
    producer.config.0 output.stream.name ExampleOutputStream
    producer.config.0 aws.region us-west-2
    producer.config.0 shard.count 1
  8. 속성에서 그룹 추가를 다시 선택합니다. 그룹 IDkinesis.analytics.flink.run.options를 입력합니다. 이 특수 속성 그룹은 애플리케이션에 코드 리소스를 찾을 수 있는 위치를 알려줍니다. 자세한 내용을 알아보려면 코드 파일 지정 섹션을 참조하세요.

  9. 다음 애플리케이션 속성 및 값을 입력합니다:

    그룹 ID
    kinesis.analytics.flink.run.options python sliding-windows.py
    kinesis.analytics.flink.run.options jarfile flink-sql-connector-kinesis_1.15.2.jar
  10. 모니터링에서 지표 수준 모니터링애플리케이션으로 설정되어 있는지 확인합니다.

  11. CloudWatch 로깅의 경우 활성화 확인란을 선택합니다.

  12. 업데이트를 선택합니다.

참고

CloudWatch 로깅을 활성화하도록 선택하면 Apache Flink용 관리형 서비스에서 로그 그룹과 로그 스트림을 자동으로 생성합니다. 이러한 리소스의 이름은 다음과 같습니다.

  • 로그 그룹: /aws/kinesis-analytics/MyApplication

  • 로그 스트림: kinesis-analytics-log-stream

이 로그 스트림은 애플리케이션을 모니터링하는 데 사용됩니다. 이 로그 스트림은 애플리케이션이 결과를 전송하는 데 사용하는 로그 스트림과 다릅니다.

IAM 정책을 편집합니다.

IAM 정책을 편집하여 Kinesis Data Streams에 액세스할 수 있는 권한을 추가합니다.

  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 여세요.

  2. 정책을 선택하세요. 이전 섹션에서 콘솔이 생성한 kinesis-analytics-service-MyApplication-us-west-2 정책을 선택합니다.

  3. 요약 페이지에서 정책 편집을 선택합니다. JSON 탭을 선택합니다.

  4. 다음 정책 예제의 강조 표시된 부분을 정책에 추가하세요. 샘플 계정 ID(012345678901)를 내 계정 ID로 바꿉니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "logs:DescribeLogGroups", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*", "arn:aws:s3:::ka-app-code-<username>/myapp.zip" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": "logs:DescribeLogStreams", "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": "logs:PutLogEvents", "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" }, { "Sid": "ListCloudwatchLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }
애플리케이션을 실행합니다

애플리케이션을 실행하고 Apache Flink 대시보드를 연 다음 원하는 Flink 작업을 선택하면 Flink 작업 그래프를 볼 수 있습니다.

CloudWatch 콘솔에서 Apache Flink용 관리형 서비스 메트릭을 확인하여 애플리케이션이 작동하는지 확인할 수 있습니다.

리소스를 정리하세요. AWS

이 섹션에는 슬라이딩 윈도우 튜토리얼에서 만든 AWS 리소스를 정리하는 절차가 포함되어 있습니다.

Apache Flink용 관리 서비스 애플리케이션을 삭제하십시오.
  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Apache Flink용 관리형 서비스 패널에서 선택합니다. MyApplication

  3. 애플리케이션 페이지에서 삭제를 선택한 다음 삭제를 확인합니다.

Kinesis 데이터 스트림을 삭제합니다.
  1. https://console.aws.amazon.com/kinesis에서 Kinesis 콘솔을 엽니다.

  2. Kinesis Data Streams 패널에서 을 선택합니다. ExampleInputStream

  3. ExampleInputStream페이지에서 Kinesis 스트림 삭제를 선택한 다음 삭제를 확인합니다.

  4. Kinesis 스트림 페이지에서 를 선택하고 작업을 선택하고 삭제를 선택한 다음 삭제를 확인합니다. ExampleOutputStream

Amazon S3 객체 및 버킷을 삭제합니다.
  1. https://console.aws.amazon.com/s3/에서 S3 콘솔을 엽니다.

  2. ka-app-code- 버킷을 선택합니다. <username>

  3. 삭제를 선택한 후 버킷 이름을 입력하여 삭제를 확인합니다.

IAM 리소스를 삭제합니다.
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 바에서 정책을 선택합니다.

  3. 필터 컨트롤에서 kinesis를 입력합니다.

  4. kinesis-analytics-service- MyApplication -us-west-2 정책을 선택합니다.

  5. 정책 작업을 선택한 후 삭제를 선택합니다.

  6. 탐색 모음에서 역할을 선택합니다.

  7. 키네시스-애널리틱스- -US-West-2 역할을 선택합니다. MyApplication

  8. 역할 삭제를 선택하고 삭제를 확인합니다.

CloudWatch 리소스 삭제하기
  1. https://console.aws.amazon.com/cloudwatch/ 에서 CloudWatch 콘솔을 엽니다.

  2. 탐색 바에서 로그를 선택합니다.

  3. MyApplication/aws/kinesis-analytics/ 로그 그룹을 선택합니다.

  4. 로그 그룹 삭제를 선택한 다음 삭제를 확인합니다.

예: Python으로 Amazon S3에 스트리밍 데이터 전송

참고

현재 예제는 을 참조하십시오예제.

이 연습에서는 Amazon Simple Storage Service 싱크로 데이터를 스트리밍하는 Python Managed Service for Apache Flink 애플리케이션을 생성합니다.

참고

이 연습에 필수 사전 조건을 설정하려면 먼저 튜토리얼: Python 사용하기 시작하기 연습을 완료하세요.

종속 리소스 생성

이 연습을 위해 Managed Service for Apache Flink 애플리케이션을 생성하기 전에 다음과 같은 종속 리소스를 생성해야 합니다.

  • Kinesis Data Streams(ExampleInputStream)

  • 애플리케이션 코드와 출력을 저장할 Amazon S3 버킷(ka-app-code-<username>)

참고

Managed Service for Apache Flink는 Managed Service for Apache Flink에서 서버 측 암호화가 활성화된 상태에서는 Amazon S3에 데이터를 쓸 수 없습니다.

콘솔을 사용하여 Kinesis 스트림과 Amazon S3 버킷을 만들 수 있습니다. 이러한 리소스를 만드는 방법 설명은 다음 주제를 참조하세요.

입력 스트림에 샘플 레코드 쓰기

이 섹션에서는 Python 스크립트를 사용하여 애플리케이션에서 처리할 샘플 레코드를 스트림에 쓰기 합니다.

참고

이 섹션에서는 AWS SDK for Python (Boto)이 필요합니다.

참고

이 섹션의 Python 스크립트는 AWS CLI를 사용합니다. 계정 자격 증명과 기본 지역을 사용하도록 구성해야 합니다. AWS CLI 를 AWS CLI구성하려면 다음을 입력합니다.

aws configure
  1. 다음 콘텐츠를 가진 stock.py이라는 파일을 생성합니다:

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { 'event_time': datetime.datetime.now().isoformat(), 'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']), 'price': round(random.random() * 100, 2)} def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey") if __name__ == '__main__': generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  2. stock.py 스크립트를 실행합니다.

    $ python stock.py

    자습서의 나머지 부분을 완료하는 동안 스크립트가 계속 돌아가게 둡니다.

애플리케이션 코드 다운로드 및 검토

이 예제의 Python 응용 프로그램 코드는 에서 사용할 수 GitHub 있습니다. 애플리케이션 코드를 다운로드하려면 다음을 수행하세요.

  1. 아직 설치하지 않았다면 Git 클라이언트를 설치합니다. 자세한 정보는 Git 설치를 참조하세요.

  2. 다음 명령을 사용하여 원격 리포지토리를 복제합니다:

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. amazon-kinesis-data-analytics-java-examples/python/S3Sink 디렉터리로 이동합니다.

애플리케이션 코드는 streaming-file-sink.py 파일에 있습니다. 애플리케이션 코드에 대해 다음을 유의하십시오:

  • 애플리케이션은 Kinesis 테이블 소스를 사용하여 소스 스트림에서 읽습니다. 다음 스니펫은 create_source_table 함수를 호출하여 Kinesis 테이블 소스를 생성합니다.

    table_env.execute_sql( create_source_table(input_table_name, input_stream, input_region, stream_initpos) )

    create_source_table 함수는 SQL 명령을 사용하여 스트리밍 소스가 지원하는 테이블을 생성합니다.

    import datetime import json import random import boto3 STREAM_NAME = "ExampleInputStream" def get_data(): return { 'event_time': datetime.datetime.now().isoformat(), 'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']), 'price': round(random.random() * 100, 2)} def generate(stream_name, kinesis_client): while True: data = get_data() print(data) kinesis_client.put_record( StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey") if __name__ == '__main__': generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  • 애플리케이션은 filesystem 커넥터를 사용하여 레코드를 Amazon S3 버킷으로 전송합니다.

    def create_sink_table(table_name, bucket_name): return """ CREATE TABLE {0} ( ticker VARCHAR(6), price DOUBLE, event_time VARCHAR(64) ) PARTITIONED BY (ticker) WITH ( 'connector'='filesystem', 'path'='s3a://{1}/', 'format'='json', 'sink.partition-commit.policy.kind'='success-file', 'sink.partition-commit.delay' = '1 min' ) """.format(table_name, bucket_name)
  • 애플리케이션은 -1.15.2.jar 파일의 Kinesis Flink 커넥터를 사용합니다. flink-sql-connector-kinesis

아파치 플링크 스트리밍 Python 코드 압축 및 업로드

이 섹션에서는 종속 리소스 생성 섹션에서 생성한 Amazon S3 버킷에 애플리케이션 코드를 업로드합니다.

  1. 선호하는 압축 애플리케이션을 사용하여 및 -1.15.2.jar 파일을 압축합니다streaming-file-sink.py. flink-sql-connector-kinesis 아카이브 이름은 myapp.zip라고 짓습니다.

  2. Amazon S3 콘솔에서 ka-app-code- <username>버킷을 선택하고 업로드를 선택합니다.

  3. 파일 선택 단계에서 파일 추가를 선택합니다. 이전 단계에서 생성한 myapp.zip 파일로 이동합니다.

  4. 개체 정보에 대한 설정은 변경할 필요가 없으므로 업로드를 선택합니다.

이제 애플리케이션 코드가 애플리케이션에서 액세스할 수 있는 Amazon S3 버킷에 저장됩니다.

Apache Flink용 관리형 서비스 애플리케이션을 생성하고 실행합니다.

콘솔을 사용하여 애플리케이션을 생성, 구성, 업데이트 및 실행하려면 다음 단계를 수행하세요.

애플리케이션 생성
  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Managed Service for Apache Flink 대시보드에서 분석 애플리케이션 생성을 선택합니다.

  3. Managed Service for Apache Flink - 애플리케이션 생성 페이지에서 다음과 같이 애플리케이션 세부 정보를 제공합니다.

    • 애플리케이션 명칭MyApplication을 입력합니다.

    • 런타임에서 Apache Flink를 선택합니다.

      참고

      Managed Service for Apache Flink는 Apache Flink 버전 1.15.2를 사용합니다.

    • 버전 풀다운은 Apache Flink 버전 1.15.2(권장 버전)로 그대로 두세요.

  4. 액세스 권한에서 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  5. 애플리케이션 생성을 선택합니다.

참고

콘솔을 사용하여 Managed Service for Apache Flink 애플리케이션을 만들 때 내 애플리케이션에 대한 IAM 역할 및 정책을 둘 수 있는 옵션이 있습니다. 귀하의 애플리케이션은 이 역할 및 정책을 사용하여 종속 리소스에 액세스합니다. 이러한 IAM 리소스의 이름은 애플리케이션 명칭과 리전을 사용하여 다음과 같이 지정됩니다.

  • 정책: kinesis-analytics-service-MyApplication-us-west-2

  • 역할: kinesisanalytics-MyApplication-us-west-2

애플리케이션 구성
  1. MyApplication페이지에서 구성을 선택합니다.

  2. 애플리케이션 구성 페이지에서 코드 위치를 입력합니다.

    • Amazon S3 버킷의 경우 ka-app-code-<username>를 입력합니다.

    • Amazon S3 객체 경로에는 myapp.zip를 입력합니다.

  3. 애플리케이션 리소스에 대한 액세스 아래에서 액세스 권한의 경우 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  4. 속성에서 그룹 추가를 선택합니다.

  5. 다음 애플리케이션 속성 및 값을 입력합니다:

    그룹 ID
    consumer.config.0 input.stream.name ExampleInputStream
    consumer.config.0 aws.region us-west-2
    consumer.config.0 scan.stream.initpos LATEST

    저장을 선택합니다.

  6. 속성에서 그룹 추가를 다시 선택합니다. 그룹 IDkinesis.analytics.flink.run.options를 입력합니다. 이 특수 속성 그룹은 애플리케이션에 코드 리소스를 찾을 수 있는 위치를 알려줍니다. 자세한 내용을 알아보려면 코드 파일 지정 섹션을 참조하세요.

  7. 다음 애플리케이션 속성 및 값을 입력합니다:

    그룹 ID
    kinesis.analytics.flink.run.options python streaming-file-sink.py
    kinesis.analytics.flink.run.options jarfile S3Sink/lib/flink-sql-connector-kinesis-1.15.2.jar
  8. 속성에서 그룹 추가를 다시 선택합니다. 그룹 IDsink.config.0를 입력합니다. 이 특수 속성 그룹은 애플리케이션에 코드 리소스를 찾을 수 있는 위치를 알려줍니다. 자세한 내용을 알아보려면 코드 파일 지정 섹션을 참조하세요.

  9. 다음 애플리케이션 속성 및 값을 입력합니다(bucket-name을 실제 Amazon S3 버킷의 이름으로 바꿉니다).

    그룹 ID
    sink.config.0 output.bucket.name bucket-name
  10. 모니터링에서 지표 수준 모니터링애플리케이션으로 설정되어 있는지 확인합니다.

  11. CloudWatch 로깅의 경우 활성화 확인란을 선택합니다.

  12. 업데이트를 선택합니다.

참고

CloudWatch 로깅을 활성화하도록 선택하면 Apache Flink용 관리형 서비스에서 로그 그룹과 로그 스트림을 자동으로 생성합니다. 이러한 리소스의 이름은 다음과 같습니다.

  • 로그 그룹: /aws/kinesis-analytics/MyApplication

  • 로그 스트림: kinesis-analytics-log-stream

이 로그 스트림은 애플리케이션을 모니터링하는 데 사용됩니다. 이 로그 스트림은 애플리케이션이 결과를 전송하는 데 사용하는 로그 스트림과 다릅니다.

IAM 정책을 편집합니다.

IAM 정책을 편집하여 Kinesis Data Streams에 액세스할 수 있는 권한을 추가합니다.

  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 여세요.

  2. 정책을 선택하세요. 이전 섹션에서 콘솔이 생성한 kinesis-analytics-service-MyApplication-us-west-2 정책을 선택합니다.

  3. 요약 페이지에서 정책 편집을 선택합니다. JSON 탭을 선택합니다.

  4. 다음 정책 예제의 강조 표시된 부분을 정책에 추가하세요. 샘플 계정 ID(012345678901)를 내 계정 ID로 바꿉니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "logs:DescribeLogGroups", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*", "arn:aws:s3:::ka-app-code-<username>/myapp.zip" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": "logs:DescribeLogStreams", "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": "logs:PutLogEvents", "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" }, { "Sid": "ListCloudwatchLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteObjects", "Effect": "Allow", "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:GetObject*", "s3:GetBucket*", "s3:List*", "s3:ListBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::ka-app-code-<username>", "arn:aws:s3:::ka-app-code-<username>/*" ] } ] }
애플리케이션을 실행합니다

애플리케이션을 실행하고 Apache Flink 대시보드를 연 다음 원하는 Flink 작업을 선택하면 Flink 작업 그래프를 볼 수 있습니다.

CloudWatch 콘솔에서 Apache Flink용 관리형 서비스 메트릭을 확인하여 애플리케이션이 작동하는지 확인할 수 있습니다.

리소스를 정리하세요. AWS

이 섹션에는 슬라이딩 윈도우 튜토리얼에서 만든 AWS 리소스를 정리하는 절차가 포함되어 있습니다.

Apache Flink용 관리 서비스 애플리케이션을 삭제하십시오.
  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Apache Flink용 관리형 서비스 패널에서 선택합니다. MyApplication

  3. 애플리케이션 페이지에서 삭제를 선택한 다음 삭제를 확인합니다.

Kinesis 데이터 스트림을 삭제합니다.
  1. https://console.aws.amazon.com/kinesis에서 Kinesis 콘솔을 엽니다.

  2. Kinesis Data Streams 패널에서 을 선택합니다. ExampleInputStream

  3. ExampleInputStream페이지에서 Kinesis 스트림 삭제를 선택한 다음 삭제를 확인합니다.

Amazon S3 객체 및 버킷을 삭제합니다.
  1. https://console.aws.amazon.com/s3/에서 S3 콘솔을 엽니다.

  2. ka-app-code- 버킷을 선택합니다. <username>

  3. 삭제를 선택한 후 버킷 이름을 입력하여 삭제를 확인합니다.

IAM 리소스를 삭제합니다.
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 바에서 정책을 선택합니다.

  3. 필터 컨트롤에서 kinesis를 입력합니다.

  4. kinesis-analytics-service- MyApplication -us-west-2 정책을 선택합니다.

  5. 정책 작업을 선택한 후 삭제를 선택합니다.

  6. 탐색 모음에서 역할을 선택합니다.

  7. 키네시스-애널리틱스- -US-West-2 역할을 선택합니다. MyApplication

  8. 역할 삭제를 선택하고 삭제를 확인합니다.

CloudWatch 리소스 삭제하기
  1. https://console.aws.amazon.com/cloudwatch/ 에서 CloudWatch 콘솔을 엽니다.

  2. 탐색 바에서 로그를 선택합니다.

  3. MyApplication/aws/kinesis-analytics/ 로그 그룹을 선택합니다.

  4. 로그 그룹 삭제를 선택한 다음 삭제를 확인합니다.

스칼라 예제

다음 예제는 Apache Flink와 함께 Scala를 사용하여 애플리케이션을 만드는 방법을 보여줍니다.

예: Scala에서 텀블링 윈도우 만들기

참고

현재 예제는 을 참조하십시오. 예제

참고

Flink 버전 1.15부터 Scala는 무료입니다. 이제 애플리케이션은 모든 Scala 버전에서 Java API를 사용할 수 있습니다. Flink는 여전히 내부적으로 몇 가지 주요 구성 요소에서 Scala를 사용하지만 사용자 코드 클래스 로더에 Scala를 노출하지는 않습니다. 따라서 사용자는 자신의 jar-acrchive에 Scala 종속성을 추가해야 합니다.

Flink 1.15의 Scala 변경 사항에 대한 자세한 내용은 Scala Free in One Fifteen을 참조하세요.

이 연습에서는 Scala 3.2.0과 Flink의 Java API를 사용하는 간단한 스트리밍 애플리케이션을 만들어 보겠습니다. DataStream 애플리케이션은 Kinesis 스트림에서 데이터를 읽고, 슬라이딩 윈도우를 사용하여 데이터를 집계하고, 결과를 Kinesis 스트림에 기록합니다.

참고

이 연습에 필수 사전 조건을 설정하려면 먼저 시작하기(Scala) 연습을 완료하세요.

애플리케이션 코드를 다운로드하고 검토하세요.

이 예제의 Python 응용 프로그램 코드는 에서 사용할 수 GitHub 있습니다. 애플리케이션 코드를 다운로드하려면 다음을 수행하세요.

  1. 아직 설치하지 않았다면 Git 클라이언트를 설치합니다. 자세한 정보는 Git 설치를 참조하세요.

  2. 다음 명령을 사용하여 원격 리포지토리를 복제합니다:

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. amazon-kinesis-data-analytics-java-examples/scala/TumblingWindow 디렉터리로 이동합니다.

애플리케이션 코드에 대해 다음을 유의하십시오:

  • build.sbt 파일에는 Managed Service for Apache Flink 라이브러리를 포함하여 애플리케이션의 구성 및 종속성에 대한 정보가 들어 있습니다.

  • BasicStreamingJob.scala 파일에는 애플리케이션의 기능을 정의하는 주요 메서드가 들어 있습니다.

  • 애플리케이션은 Kinesis 소스를 사용하여 소스 스트림에서 읽습니다. 다음 스니펫은 Kinesis 소스를 생성합니다.

    private def createSource: FlinkKinesisConsumer[String] = { val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties val inputProperties = applicationProperties.get("ConsumerConfigProperties") new FlinkKinesisConsumer[String](inputProperties.getProperty(streamNameKey, defaultInputStreamName), new SimpleStringSchema, inputProperties) }

    또한 애플리케이션은 Kinesis 싱크를 사용하여 결과 스트림에 기록합니다. 다음 조각은 Kinesis 싱크를 생성합니다.

    private def createSink: KinesisStreamsSink[String] = { val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties val outputProperties = applicationProperties.get("ProducerConfigProperties") KinesisStreamsSink.builder[String] .setKinesisClientProperties(outputProperties) .setSerializationSchema(new SimpleStringSchema) .setStreamName(outputProperties.getProperty(streamNameKey, defaultOutputStreamName)) .setPartitionKeyGenerator((element: String) => String.valueOf(element.hashCode)) .build }
  • 이 애플리케이션은 윈도우 연산자를 사용하여 5초 동안의 텀블링 윈도우에서 각 주식 기호에 대한 값의 개수를 찾습니다. 다음 코드는 연산자를 생성하고 집계된 데이터를 새로운 Kinesis Data Streams 싱크로 전송합니다.

    environment.addSource(createSource) .map { value => val jsonNode = jsonParser.readValue(value, classOf[JsonNode]) new Tuple2[String, Int](jsonNode.get("ticker").toString, 1) } .returns(Types.TUPLE(Types.STRING, Types.INT)) .keyBy(v => v.f0) // Logically partition the stream for each ticker .window(TumblingProcessingTimeWindows.of(Time.seconds(10))) .sum(1) // Sum the number of tickers per partition .map { value => value.f0 + "," + value.f1.toString + "\n" } .sinkTo(createSink)
  • 응용 프로그램은 StreamExecutionEnvironment 객체를 사용하여 외부 리소스에 액세스할 수 있는 소스 및 싱크 커넥터를 만듭니다.

  • 애플리케이션은 동적 애플리케이션 속성을 사용하여 소스 및 싱크 커넥터를 만듭니다. 런타임 애플리케이션의 속성을 읽어 커넥터를 구성합니다. 런타임 속성에 대한 자세한 내용은 런타임 속성을 참조하세요.

애플리케이션 코드 컴파일 및 업로드

이 섹션에서는 애플리케이션 코드를 컴파일하여 Amazon S3 버킷에 업로드합니다.

애플리케이션 코드 컴파일

SBT 빌드 도구를 사용하여 애플리케이션용 Scala 코드를 빌드합니다. SBT를 설치하려면 cs 설정으로 sbt 설치를 참조하십시오. 또한 Java Devopment Kit(JDK)를 설치해야 합니다. 연습 완료를 위한 사전 조건을 참조하세요.

  1. 애플리케이션 코드를 사용하려면 이를 컴파일하고 JAR 파일로 패키징합니다. SBT를 사용하여 코드를 컴파일하고 패키징할 수 있습니다.

    sbt assembly
  2. 애플리케이션이 성공적으로 컴파일되면 다음 파일이 생성됩니다:

    target/scala-3.2.0/tumbling-window-scala-1.0.jar
Apache Flink 스트리밍 Scala 코드 업로드

이 섹션에서는 Amazon S3 버킷을 만들고 애플리케이션 코드를 업로드합니다.

  1. https://console.aws.amazon.com/s3/에서 S3 콘솔을 엽니다.

  2. 버킷 만들기를 선택합니다.

  3. 버킷 명칭 필드에 ka-app-code-<username>을 입력합니다. 버킷 명칭에 사용자 이름 등의 접미사를 추가하여 전역적으로 고유하게 만듭니다. 다음을 선택합니다.

  4. 옵션 구성 단계에서 설정을 기본값 그대로 두고 다음을 선택합니다.

  5. 권한 설정 단계에서 설정을 기본값 그대로 두고 다음을 선택합니다.

  6. 버킷 생성을 선택합니다.

  7. ka-app-code-<username> 버킷을 선택한 다음 업로드를 선택합니다.

  8. 파일 선택 단계에서 파일 추가를 선택합니다. 이전 단계에서 생성한 tumbling-window-scala-1.0.jar 파일로 이동합니다.

  9. 개체 정보에 대한 설정은 변경할 필요가 없으므로 업로드를 선택합니다.

이제 애플리케이션 코드가 애플리케이션에서 액세스할 수 있는 Amazon S3 버킷에 저장됩니다.

애플리케이션 생성 및 실행 (콘솔)

콘솔을 사용하여 애플리케이션을 생성, 구성, 업데이트 및 실행하려면 다음 단계를 수행하세요.

애플리케이션 생성
  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Managed Service for Apache Flink 대시보드에서 분석 애플리케이션 생성을 선택합니다.

  3. Managed Service for Apache Flink - 애플리케이션 생성 페이지에서 다음과 같이 애플리케이션 세부 정보를 제공합니다.

    • 애플리케이션 명칭MyApplication을 입력합니다.

    • 설명My Scala test app를 입력합니다.

    • 런타임에서 Apache Flink를 선택합니다.

    • 버전은 Apache Flink 버전 1.15.2(권장 버전)로 그대로 둡니다.

  4. 액세스 권한에서 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  5. 애플리케이션 생성을 선택합니다.

참고

콘솔을 사용하여 Managed Service for Apache Flink 애플리케이션을 만들 때 내 애플리케이션에 대한 IAM 역할 및 정책을 둘 수 있는 옵션이 있습니다. 귀하의 애플리케이션은 이 역할 및 정책을 사용하여 종속 리소스에 액세스합니다. 이러한 IAM 리소스의 이름은 애플리케이션 명칭과 리전을 사용하여 다음과 같이 지정됩니다.

  • 정책: kinesis-analytics-service-MyApplication-us-west-2

  • 역할: kinesisanalytics-MyApplication-us-west-2

애플리케이션 구성

애플리케이션을 구성하려면 다음 절차를 사용합니다.

애플리케이션을 구성하려면
  1. MyApplication페이지에서 구성을 선택합니다.

  2. 애플리케이션 구성 페이지에서 코드 위치를 입력합니다.

    • Amazon S3 버킷의 경우 ka-app-code-<username>를 입력합니다.

    • Amazon S3 객체 경로에는 tumbling-window-scala-1.0.jar를 입력합니다.

  3. 애플리케이션 리소스에 대한 액세스 아래에서 액세스 권한의 경우 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  4. 속성에서 그룹 추가를 선택합니다.

  5. 다음을 입력합니다:

    그룹 ID
    ConsumerConfigProperties input.stream.name ExampleInputStream
    ConsumerConfigProperties aws.region us-west-2
    ConsumerConfigProperties flink.stream.initpos LATEST

    저장을 선택합니다.

  6. 속성에서 그룹 추가를 다시 선택합니다.

  7. 다음을 입력합니다:

    그룹 ID
    ProducerConfigProperties output.stream.name ExampleOutputStream
    ProducerConfigProperties aws.region us-west-2
  8. 모니터링에서 지표 수준 모니터링애플리케이션으로 설정되어 있는지 확인합니다.

  9. CloudWatch 로깅하려면 활성화 확인란을 선택합니다.

  10. 업데이트를 선택합니다.

참고

Amazon CloudWatch 로깅을 활성화하도록 선택하면 Apache Flink용 관리형 서비스에서 로그 그룹과 로그 스트림을 자동으로 생성합니다. 이러한 리소스의 이름은 다음과 같습니다.

  • 로그 그룹: /aws/kinesis-analytics/MyApplication

  • 로그 스트림: kinesis-analytics-log-stream

IAM 정책을 편집하십시오.

IAM 정책을 편집하여 Amazon S3 버킷에 액세스할 수 있는 권한을 추가합니다.

IAM 정책을 편집하여 S3 버킷 권한을 추가하려면
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 여세요.

  2. 정책을 선택하세요. 이전 섹션에서 콘솔이 생성한 kinesis-analytics-service-MyApplication-us-west-2 정책을 선택합니다.

  3. 요약 페이지에서 정책 편집을 선택합니다. JSON 탭을 선택합니다.

  4. 다음 정책 예제의 강조 표시된 부분을 정책에 추가하세요. 샘플 계정 ID(012345678901)를 내 계정 ID로 바꿉니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-username/tumbling-window-scala-1.0.jar" ] }, { "Sid": "DescribeLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }
애플리케이션을 실행합니다

애플리케이션을 실행하고 Apache Flink 대시보드를 연 다음 원하는 Flink 작업을 선택하면 Flink 작업 그래프를 볼 수 있습니다.

애플리케이션 중지

애플리케이션을 중지하려면 MyApplication페이지에서 중지를 선택합니다. 작업을 확인합니다.

애플리케이션 생성 및 실행(CLI)

이 섹션에서는 를 사용하여 Apache Flink용 관리 서비스 응용 프로그램을 만들고 실행합니다. AWS Command Line Interface kinesisanalyticsv2 AWS CLI 명령을 사용하여 아파치 플링크용 관리 서비스 애플리케이션을 만들고 이 애플리케이션과 상호 작용할 수 있습니다.

권한 정책 생성
참고

애플리케이션에 대한 권한 정책 및 역할을 생성해야 합니다. 이러한 IAM 리소스를 생성하지 않으면 애플리케이션은 해당 데이터 및 로그 스트림에 액세스할 수 없습니다.

먼저 소스 스트림의 읽기 작업에 대한 권한을 부여하는 설명과 싱크 스트림의 쓰기 작업에 대한 권한을 부여하는 설명 두 개를 사용하여 권한 정책을 만듭니다. 그런 다음 정책을 IAM 역할(다음 섹션에서 생성)에 연결합니다. 따라서 Managed Service for Apache Flink가 역할을 맡을 때 서비스는 소스 스트림에서 읽고 싱크 스트림에 쓸 수 있는 권한이 있습니다.

다음 코드를 사용하여 AKReadSourceStreamWriteSinkStream 권한 정책을 생성합니다. username을 애플리케이션 코드를 저장하기 위해 Amazon S3 버킷을 만들 때 사용한 사용자 이름으로 바꿉니다. Amazon 리소스 이름(ARN)의 계정 ID((012345678901))를 사용자의 계정 ID로 바꿉니다. MF-stream-rw-role 서비스 실행 역할은 고객별 역할에 맞게 조정되어야 합니다.

{ "ApplicationName": "tumbling_window", "ApplicationDescription": "Scala tumbling window application", "RuntimeEnvironment": "FLINK-1_15", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username", "FileKey": "tumbling-window-scala-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleOutputStream" } } ] } }, "CloudWatchLoggingOptions": [ { "LogStreamARN": "arn:aws:logs:us-west-2:012345678901:log-group:MyApplication:log-stream:kinesis-analytics-log-stream" } ] }

권한 정책을 생성하는 step-by-step 방법에 대한 지침은 IAM 사용 설명서의 자습서: 첫 번째 고객 관리형 정책 생성 및 연결을 참조하십시오.

IAM 역할 생성

이 섹션에서는 Managed Service for Apache Flink 애플리케이션이 소스 스트림을 읽고 싱크 스트림에 쓰기 위해 맡을 수 있는 IAM 역할을 생성합니다.

Managed Service for Apache Flink는 권한 없이 스트림에 액세스할 수 없습니다. IAM 역할을 통해 이러한 권한을 부여합니다. 각 IAM 역할에는 두 가지 정책이 연결됩니다. 신뢰 정책은 Managed Service for Apache Flink가 역할을 취할 수 있는 권한을 부여하고, 권한 정책은 역할을 취한 후 Managed Service for Apache Flink에서 수행할 수 있는 작업을 결정합니다.

이전 섹션에서 생성한 권한 정책을 이 역할에 연결합니다.

IAM 역할을 생성하려면
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 창에서 역할을 선택한 후 역할 생성을 선택합니다.

  3. 신뢰할 수 있는 유형의 자격 증명 선택에서 AWS 서비스를 선택합니다.

  4. 이 역할을 사용할 서비스 선택에서 Kinesis를 선택합니다.

  5. 사용 사례 선택에서 Managed Service for Apache Flink를 선택합니다.

  6. 다음: 권한을 선택합니다.

  7. 권한 정책 연결 페이지에서 다음: 검토를 선택합니다. 역할을 생성한 후에 권한 정책을 연결합니다.

  8. 역할 생성 페이지에서 역할 이름으로 MF-stream-rw-role을 입력합니다. 역할 생성을 선택합니다.

    MF-stream-rw-role이라는 새 IAM 역할이 생성되었습니다. 그런 다음 역할의 신뢰 정책 및 권한 정책을 업데이트합니다.

  9. 역할에 권한 정책을 연결합니다.

    참고

    이 연습에서는 Managed Service for Apache Flink가 이 역할을 취하여 Kinesis 데이터 스트림(소스)에서 데이터를 읽고 출력을 다른 Kinesis 데이터 스트림에 씁니다. 따라서 이전 단계인 권한 정책 생성에서 만든 정책을 연결합니다.

    1. 요약 페이지에서 권한 탭을 선택합니다.

    2. 정책 연결을 선택합니다.

    3. 검색 상자에 AKReadSourceStreamWriteSinkStream(이전 섹션에서 생성한 정책)을 입력합니다.

    4. AKReadSourceStreamWriteSinkStream 정책을 선택한 후 정책 연결을 선택합니다.

이제 애플리케이션이 리소스에 액세스하는 데 사용하는 서비스 실행 역할이 생성되었습니다. 새 역할의 ARN을 기록합니다.

역할 생성에 대한 step-by-step 지침은 IAM 사용 설명서의 IAM 역할 생성 (콘솔) 을 참조하십시오.

애플리케이션 생성

다음 JSON 코드를 create_request.json이라는 파일에 저장합니다. 샘플 역할 ARN을 이전에 생성한 역할을 위한 ARN으로 바꿉니다. 버킷 ARN 접미사(사용자 이름)를 이전 섹션에서 선택한 접미사로 바꿉니다. 서비스 실행 역할의 샘플 계정 ID(012345678901)를 사용자 계정 ID로 바꿉니다. ServiceExecutionRole에는 이전 섹션에서 만든 IAM 사용자 역할이 포함되어야 합니다.

"ApplicationName": "tumbling_window", "ApplicationDescription": "Scala getting started application", "RuntimeEnvironment": "FLINK-1_15", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username", "FileKey": "tumbling-window-scala-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleOutputStream" } } ] } }, "CloudWatchLoggingOptions": [ { "LogStreamARN": "arn:aws:logs:us-west-2:012345678901:log-group:MyApplication:log-stream:kinesis-analytics-log-stream" } ] }

다음 CreateApplication요청과 함께 를 실행하여 애플리케이션을 생성하십시오.

aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json

애플리케이션이 생성되었습니다. 다음 단계에서는 애플리케이션을 시작합니다.

애플리케이션을 시작합니다.

이 섹션에서는 StartApplication액션을 사용하여 애플리케이션을 시작합니다.

애플리케이션을 시작하려면
  1. 다음 JSON 코드를 start_request.json이라는 파일에 저장합니다.

    { "ApplicationName": "tumbling_window", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
  2. 위의 요청과 함께 StartApplication 작업을 실행하여 애플리케이션을 시작합니다.

    aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json

애플리케이션이 실행됩니다. Amazon CloudWatch 콘솔에서 Apache Flink용 관리형 서비스 지표를 확인하여 애플리케이션이 작동하는지 확인할 수 있습니다.

애플리케이션을 중지하십시오.

이 섹션에서는 StopApplication액션을 사용하여 애플리케이션을 중지합니다.

애플리케이션을 중지하려면
  1. 다음 JSON 코드를 stop_request.json이라는 파일에 저장합니다.

    { "ApplicationName": "tumbling_window" }
  2. 위의 요청과 함께 StopApplication 작업을 실행하여 애플리케이션을 중지합니다.

    aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json

애플리케이션이 중지됩니다.

CloudWatch 로깅 옵션 추가

를 AWS CLI 사용하여 Amazon CloudWatch 로그 스트림을 애플리케이션에 추가할 수 있습니다. 애플리케이션에서 CloudWatch 로그를 사용하는 방법에 대한 자세한 내용은 애플리케이션 로깅 설정을 참조하십시오.

환경 속성 업데이트

이 섹션에서는 애플리케이션 코드를 다시 컴파일하지 않고도 UpdateApplication액션을 사용하여 애플리케이션의 환경 속성을 변경할 수 있습니다. 이 예제에서는 원본 스트림과 대상 스트림의 리전을 변경합니다.

애플리케이션의 환경 속성 업데이트
  1. 다음 JSON 코드를 update_properties_request.json이라는 파일에 저장합니다.

    {"ApplicationName": "tumbling_window", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "EnvironmentPropertyUpdates": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleOutputStream" } } ] } } }
  2. 이전 요청과 함께 UpdateApplication 작업을 실행하여 환경 속성을 업데이트하십시오.

    aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
애플리케이션 코드 업데이트

새 버전의 코드 패키지로 애플리케이션 코드를 업데이트해야 하는 경우 UpdateApplicationCLI 작업을 사용합니다.

참고

파일 이름이 같은 새 버전의 애플리케이션 코드를 로드하려면 새 객체 버전을 지정해야 합니다. Amazon S3 객체 버전 사용에 대한 자세한 내용을 알아보려면 버전 관리 활성화 또는 비활성화를 참조하세요.

를 사용하려면 Amazon S3 버킷에서 이전 코드 패키지를 삭제하고 새 버전을 업로드한 다음 동일한 Amazon S3 버킷과 객체 이름, 새 객체 버전을 지정하여 UpdateApplication 호출합니다. AWS CLI애플리케이션이 새 코드 패키지로 다시 시작됩니다.

다음 예 UpdateApplication 작업 요청은 애플리케이션 코드를 다시 로드하고 애플리케이션을 다시 시작합니다. CurrentApplicationVersionId를 현재 애플리케이션 버전으로 업데이트하세요. ListApplications 또는 DescribeApplication 작업을 사용하여 현재 애플리케이션 버전을 확인할 수 있습니다. 버킷 명칭 접미사(<username>)를 종속 리소스 생성 섹션에서 선택한 접미사로 업데이트합니다.

{ "ApplicationName": "tumbling_window", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "ApplicationCodeConfigurationUpdate": { "CodeContentUpdate": { "S3ContentLocationUpdate": { "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username", "FileKeyUpdate": "tumbling-window-scala-1.0.jar", "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU" } } } } }
AWS 리소스를 정리하세요.

이 섹션에는 텀블링 윈도우 튜토리얼에서 만든 AWS 리소스를 정리하는 절차가 포함되어 있습니다.

Apache Flink용 관리형 서비스 애플리케이션 삭제
  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Apache Flink용 관리형 서비스 패널에서 선택합니다. MyApplication

  3. 애플리케이션 페이지에서 삭제를 선택한 다음 삭제를 확인합니다.

Kinesis 데이터 스트림을 삭제합니다.
  1. https://console.aws.amazon.com/kinesis에서 Kinesis 콘솔을 엽니다.

  2. Kinesis Data Streams 패널에서 을 선택합니다. ExampleInputStream

  3. ExampleInputStream페이지에서 Kinesis 스트림 삭제를 선택한 다음 삭제를 확인합니다.

  4. Kinesis 스트림 페이지에서 를 선택하고 작업을 선택하고 삭제를 선택한 다음 삭제를 확인합니다. ExampleOutputStream

Amazon S3 객체 및 버킷을 삭제합니다.
  1. https://console.aws.amazon.com/s3/에서 S3 콘솔을 엽니다.

  2. ka-app-code- 버킷을 선택합니다. <username>

  3. 삭제를 선택한 후 버킷 이름을 입력하여 삭제를 확인합니다.

IAM 리소스를 삭제합니다.
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 바에서 정책을 선택합니다.

  3. 필터 컨트롤에서 kinesis를 입력합니다.

  4. kinesis-analytics-service- MyApplication -us-west-2 정책을 선택합니다.

  5. 정책 작업을 선택한 후 삭제를 선택합니다.

  6. 탐색 모음에서 역할을 선택합니다.

  7. 키네시스-애널리틱스- -US-West-2 역할을 선택합니다. MyApplication

  8. 역할 삭제를 선택하고 삭제를 확인합니다.

CloudWatch 리소스 삭제하기
  1. https://console.aws.amazon.com/cloudwatch/ 에서 CloudWatch 콘솔을 엽니다.

  2. 탐색 바에서 로그를 선택합니다.

  3. MyApplication/aws/kinesis-analytics/ 로그 그룹을 선택합니다.

  4. 로그 그룹 삭제를 선택한 다음 삭제를 확인합니다.

예: Scala에서 슬라이딩 윈도우 만들기

참고

현재 예제는 을 참조하십시오예제.

참고

Flink 버전 1.15부터 Scala는 무료입니다. 이제 애플리케이션은 모든 Scala 버전에서 Java API를 사용할 수 있습니다. Flink는 여전히 내부적으로 몇 가지 주요 구성 요소에서 Scala를 사용하지만 사용자 코드 클래스 로더에 Scala를 노출하지는 않습니다. 따라서 사용자는 자신의 jar-acrchive에 Scala 종속성을 추가해야 합니다.

Flink 1.15의 Scala 변경 사항에 대한 자세한 내용은 Scala Free in One Fifteen을 참조하세요.

이 연습에서는 Scala 3.2.0과 Flink의 Java API를 사용하는 간단한 스트리밍 애플리케이션을 만들어 보겠습니다. DataStream 애플리케이션은 Kinesis 스트림에서 데이터를 읽고, 슬라이딩 윈도우를 사용하여 데이터를 집계하고, 결과를 Kinesis 스트림에 기록합니다.

참고

이 연습에 필수 사전 조건을 설정하려면 먼저 시작하기(Scala) 연습을 완료하세요.

애플리케이션 코드를 다운로드하고 검토하세요.

이 예제의 Python 응용 프로그램 코드는 에서 사용할 수 GitHub 있습니다. 애플리케이션 코드를 다운로드하려면 다음을 수행하세요.

  1. 아직 설치하지 않았다면 Git 클라이언트를 설치합니다. 자세한 정보는 Git 설치를 참조하세요.

  2. 다음 명령을 사용하여 원격 리포지토리를 복제합니다:

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. amazon-kinesis-data-analytics-java-examples/scala/SlidingWindow 디렉터리로 이동합니다.

애플리케이션 코드에 대해 다음을 유의하십시오:

  • build.sbt 파일에는 Managed Service for Apache Flink 라이브러리를 포함하여 애플리케이션의 구성 및 종속성에 대한 정보가 들어 있습니다.

  • BasicStreamingJob.scala 파일에는 애플리케이션의 기능을 정의하는 주요 메서드가 들어 있습니다.

  • 애플리케이션은 Kinesis 소스를 사용하여 소스 스트림에서 읽습니다. 다음 스니펫은 Kinesis 소스를 생성합니다.

    private def createSource: FlinkKinesisConsumer[String] = { val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties val inputProperties = applicationProperties.get("ConsumerConfigProperties") new FlinkKinesisConsumer[String](inputProperties.getProperty(streamNameKey, defaultInputStreamName), new SimpleStringSchema, inputProperties) }

    또한 애플리케이션은 Kinesis 싱크를 사용하여 결과 스트림에 기록합니다. 다음 조각은 Kinesis 싱크를 생성합니다.

    private def createSink: KinesisStreamsSink[String] = { val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties val outputProperties = applicationProperties.get("ProducerConfigProperties") KinesisStreamsSink.builder[String] .setKinesisClientProperties(outputProperties) .setSerializationSchema(new SimpleStringSchema) .setStreamName(outputProperties.getProperty(streamNameKey, defaultOutputStreamName)) .setPartitionKeyGenerator((element: String) => String.valueOf(element.hashCode)) .build }
  • 애플리케이션은 창 연산자를 사용하여 5초씩 미끄러지는 10초 동안 각 주식 종목의 값 수를 찾습니다. 다음 코드는 연산자를 생성하고 집계된 데이터를 새로운 Kinesis Data Streams 싱크로 전송합니다.

    environment.addSource(createSource) .map { value => val jsonNode = jsonParser.readValue(value, classOf[JsonNode]) new Tuple2[String, Double](jsonNode.get("ticker").toString, jsonNode.get("price").asDouble) } .returns(Types.TUPLE(Types.STRING, Types.DOUBLE)) .keyBy(v => v.f0) // Logically partition the stream for each word .window(SlidingProcessingTimeWindows.of(Time.seconds(10), Time.seconds(5))) .min(1) // Calculate minimum price per ticker over the window .map { value => value.f0 + String.format(",%.2f", value.f1) + "\n" } .sinkTo(createSink)
  • 응용 프로그램은 StreamExecutionEnvironment 객체를 사용하여 외부 리소스에 액세스할 수 있는 소스 및 싱크 커넥터를 만듭니다.

  • 애플리케이션은 동적 애플리케이션 속성을 사용하여 소스 및 싱크 커넥터를 만듭니다. 런타임 애플리케이션의 속성을 읽어 커넥터를 구성합니다. 런타임 속성에 대한 자세한 내용은 런타임 속성을 참조하세요.

애플리케이션 코드 컴파일 및 업로드

이 섹션에서는 애플리케이션 코드를 컴파일하여 Amazon S3 버킷에 업로드합니다.

애플리케이션 코드 컴파일

SBT 빌드 도구를 사용하여 애플리케이션용 Scala 코드를 빌드합니다. SBT를 설치하려면 cs 설정으로 sbt 설치를 참조하십시오. 또한 Java Devopment Kit(JDK)를 설치해야 합니다. 연습 완료를 위한 사전 조건을 참조하세요.

  1. 애플리케이션 코드를 사용하려면 이를 컴파일하고 JAR 파일로 패키징합니다. SBT를 사용하여 코드를 컴파일하고 패키징할 수 있습니다.

    sbt assembly
  2. 애플리케이션이 성공적으로 컴파일되면 다음 파일이 생성됩니다:

    target/scala-3.2.0/sliding-window-scala-1.0.jar
Apache Flink 스트리밍 Scala 코드 업로드

이 섹션에서는 Amazon S3 버킷을 만들고 애플리케이션 코드를 업로드합니다.

  1. https://console.aws.amazon.com/s3/에서 S3 콘솔을 엽니다.

  2. 버킷 만들기를 선택합니다.

  3. 버킷 명칭 필드에 ka-app-code-<username>을 입력합니다. 버킷 명칭에 사용자 이름 등의 접미사를 추가하여 전역적으로 고유하게 만듭니다. 다음을 선택합니다.

  4. 옵션 구성 단계에서 설정을 기본값 그대로 두고 다음을 선택합니다.

  5. 권한 설정 단계에서 설정을 기본값 그대로 두고 다음을 선택합니다.

  6. 버킷 생성을 선택합니다.

  7. ka-app-code-<username> 버킷을 선택한 다음 업로드를 선택합니다.

  8. 파일 선택 단계에서 파일 추가를 선택합니다. 이전 단계에서 생성한 sliding-window-scala-1.0.jar 파일로 이동합니다.

  9. 개체 정보에 대한 설정은 변경할 필요가 없으므로 업로드를 선택합니다.

이제 애플리케이션 코드가 애플리케이션에서 액세스할 수 있는 Amazon S3 버킷에 저장됩니다.

애플리케이션 생성 및 실행 (콘솔)

콘솔을 사용하여 애플리케이션을 생성, 구성, 업데이트 및 실행하려면 다음 단계를 수행하세요.

애플리케이션 생성
  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Managed Service for Apache Flink 대시보드에서 분석 애플리케이션 생성을 선택합니다.

  3. Managed Service for Apache Flink - 애플리케이션 생성 페이지에서 다음과 같이 애플리케이션 세부 정보를 제공합니다.

    • 애플리케이션 명칭MyApplication을 입력합니다.

    • 설명My Scala test app를 입력합니다.

    • 런타임에서 Apache Flink를 선택합니다.

    • 버전은 Apache Flink 버전 1.15.2(권장 버전)로 그대로 둡니다.

  4. 액세스 권한에서 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  5. 애플리케이션 생성을 선택합니다.

참고

콘솔을 사용하여 Managed Service for Apache Flink 애플리케이션을 만들 때 내 애플리케이션에 대한 IAM 역할 및 정책을 둘 수 있는 옵션이 있습니다. 귀하의 애플리케이션은 이 역할 및 정책을 사용하여 종속 리소스에 액세스합니다. 이러한 IAM 리소스의 이름은 애플리케이션 명칭과 리전을 사용하여 다음과 같이 지정됩니다.

  • 정책: kinesis-analytics-service-MyApplication-us-west-2

  • 역할: kinesisanalytics-MyApplication-us-west-2

애플리케이션 구성

애플리케이션을 구성하려면 다음 절차를 사용합니다.

애플리케이션을 구성하려면
  1. MyApplication페이지에서 구성을 선택합니다.

  2. 애플리케이션 구성 페이지에서 코드 위치를 입력합니다.

    • Amazon S3 버킷의 경우 ka-app-code-<username>를 입력합니다.

    • Amazon S3 객체 경로에는 sliding-window-scala-1.0.jar.를 입력합니다.

  3. 애플리케이션 리소스에 대한 액세스 아래에서 액세스 권한의 경우 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  4. 속성에서 그룹 추가를 선택합니다.

  5. 다음을 입력합니다:

    그룹 ID
    ConsumerConfigProperties input.stream.name ExampleInputStream
    ConsumerConfigProperties aws.region us-west-2
    ConsumerConfigProperties flink.stream.initpos LATEST

    저장을 선택합니다.

  6. 속성에서 그룹 추가를 다시 선택합니다.

  7. 다음을 입력합니다:

    그룹 ID
    ProducerConfigProperties output.stream.name ExampleOutputStream
    ProducerConfigProperties aws.region us-west-2
  8. 모니터링에서 지표 수준 모니터링애플리케이션으로 설정되어 있는지 확인합니다.

  9. CloudWatch 로깅하려면 활성화 확인란을 선택합니다.

  10. 업데이트를 선택합니다.

참고

Amazon CloudWatch 로깅을 활성화하도록 선택하면 Apache Flink용 관리형 서비스에서 로그 그룹과 로그 스트림을 자동으로 생성합니다. 이러한 리소스의 이름은 다음과 같습니다.

  • 로그 그룹: /aws/kinesis-analytics/MyApplication

  • 로그 스트림: kinesis-analytics-log-stream

IAM 정책을 편집하십시오.

IAM 정책을 편집하여 Amazon S3 버킷에 액세스할 수 있는 권한을 추가합니다.

IAM 정책을 편집하여 S3 버킷 권한을 추가하려면
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 여세요.

  2. 정책을 선택하세요. 이전 섹션에서 콘솔이 생성한 kinesis-analytics-service-MyApplication-us-west-2 정책을 선택합니다.

  3. 요약 페이지에서 정책 편집을 선택합니다. JSON 탭을 선택합니다.

  4. 다음 정책 예제의 강조 표시된 부분을 정책에 추가하세요. 샘플 계정 ID(012345678901)를 내 계정 ID로 바꿉니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-username/sliding-window-scala-1.0.jar" ] }, { "Sid": "DescribeLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }
애플리케이션을 실행합니다

애플리케이션을 실행하고 Apache Flink 대시보드를 연 다음 원하는 Flink 작업을 선택하면 Flink 작업 그래프를 볼 수 있습니다.

애플리케이션 중지

애플리케이션을 중지하려면 MyApplication페이지에서 중지를 선택합니다. 작업을 확인합니다.

애플리케이션 생성 및 실행(CLI)

이 섹션에서는 를 사용하여 Apache Flink용 관리 서비스 응용 프로그램을 만들고 실행합니다. AWS Command Line Interface kinesisanalyticsv2 AWS CLI 명령을 사용하여 아파치 플링크용 관리 서비스 애플리케이션을 만들고 이 애플리케이션과 상호 작용할 수 있습니다.

권한 정책 생성
참고

애플리케이션에 대한 권한 정책 및 역할을 생성해야 합니다. 이러한 IAM 리소스를 생성하지 않으면 애플리케이션은 해당 데이터 및 로그 스트림에 액세스할 수 없습니다.

먼저 소스 스트림의 읽기 작업에 대한 권한을 부여하는 설명과 싱크 스트림의 쓰기 작업에 대한 권한을 부여하는 설명 두 개를 사용하여 권한 정책을 만듭니다. 그런 다음 정책을 IAM 역할(다음 섹션에서 생성)에 연결합니다. 따라서 Managed Service for Apache Flink가 역할을 맡을 때 서비스는 소스 스트림에서 읽고 싱크 스트림에 쓸 수 있는 권한이 있습니다.

다음 코드를 사용하여 AKReadSourceStreamWriteSinkStream 권한 정책을 생성합니다. username을 애플리케이션 코드를 저장하기 위해 Amazon S3 버킷을 만들 때 사용한 사용자 이름으로 바꿉니다. Amazon 리소스 이름(ARN)의 계정 ID((012345678901))를 사용자의 계정 ID로 바꿉니다.

{ "ApplicationName": "sliding_window", "ApplicationDescription": "Scala sliding window application", "RuntimeEnvironment": "FLINK-1_15", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username", "FileKey": "sliding-window-scala-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleOutputStream" } } ] } }, "CloudWatchLoggingOptions": [ { "LogStreamARN": "arn:aws:logs:us-west-2:012345678901:log-group:MyApplication:log-stream:kinesis-analytics-log-stream" } ] }

권한 정책을 생성하는 step-by-step 방법에 대한 지침은 IAM 사용 설명서의 자습서: 첫 번째 고객 관리형 정책 생성 및 연결을 참조하십시오.

IAM 역할 생성

이 섹션에서는 Managed Service for Apache Flink 애플리케이션이 소스 스트림을 읽고 싱크 스트림에 쓰기 위해 맡을 수 있는 IAM 역할을 생성합니다.

Managed Service for Apache Flink는 권한 없이 스트림에 액세스할 수 없습니다. IAM 역할을 통해 이러한 권한을 부여합니다. 각 IAM 역할에는 두 가지 정책이 연결됩니다. 신뢰 정책은 Managed Service for Apache Flink가 역할을 취할 수 있는 권한을 부여하고, 권한 정책은 역할을 취한 후 Managed Service for Apache Flink에서 수행할 수 있는 작업을 결정합니다.

이전 섹션에서 생성한 권한 정책을 이 역할에 연결합니다.

IAM 역할을 생성하려면
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 창에서 역할을 선택한 후 역할 생성을 선택합니다.

  3. 신뢰할 수 있는 유형의 자격 증명 선택에서 AWS 서비스를 선택합니다.

  4. 이 역할을 사용할 서비스 선택에서 Kinesis를 선택합니다.

  5. 사용 사례 선택에서 Managed Service for Apache Flink를 선택합니다.

  6. 다음: 권한을 선택합니다.

  7. 권한 정책 연결 페이지에서 다음: 검토를 선택합니다. 역할을 생성한 후에 권한 정책을 연결합니다.

  8. 역할 생성 페이지에서 역할 이름으로 MF-stream-rw-role을 입력합니다. 역할 생성을 선택합니다.

    MF-stream-rw-role이라는 새 IAM 역할이 생성되었습니다. 그런 다음 역할의 신뢰 정책 및 권한 정책을 업데이트합니다.

  9. 역할에 권한 정책을 연결합니다.

    참고

    이 연습에서는 Managed Service for Apache Flink가 이 역할을 취하여 Kinesis 데이터 스트림(소스)에서 데이터를 읽고 출력을 다른 Kinesis 데이터 스트림에 씁니다. 따라서 이전 단계인 권한 정책 생성에서 만든 정책을 연결합니다.

    1. 요약 페이지에서 권한 탭을 선택합니다.

    2. 정책 연결을 선택합니다.

    3. 검색 상자에 AKReadSourceStreamWriteSinkStream(이전 섹션에서 생성한 정책)을 입력합니다.

    4. AKReadSourceStreamWriteSinkStream 정책을 선택한 후 정책 연결을 선택합니다.

이제 애플리케이션이 리소스에 액세스하는 데 사용하는 서비스 실행 역할이 생성되었습니다. 새 역할의 ARN을 기록합니다.

역할 생성에 대한 step-by-step 지침은 IAM 사용 설명서의 IAM 역할 생성 (콘솔) 을 참조하십시오.

애플리케이션 생성

다음 JSON 코드를 create_request.json이라는 파일에 저장합니다. 샘플 역할 ARN을 이전에 생성한 역할을 위한 ARN으로 바꿉니다. 버킷 ARN 접미사(사용자 이름)를 이전 섹션에서 선택한 접미사로 바꿉니다. 서비스 실행 역할의 샘플 계정 ID(012345678901)를 사용자 계정 ID로 바꿉니다.

{ "ApplicationName": "sliding_window", "ApplicationDescription": "Scala sliding_window application", "RuntimeEnvironment": "FLINK-1_15", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username", "FileKey": "sliding-window-scala-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleOutputStream" } } ] } }, "CloudWatchLoggingOptions": [ { "LogStreamARN": "arn:aws:logs:us-west-2:012345678901:log-group:MyApplication:log-stream:kinesis-analytics-log-stream" } ] }

다음 CreateApplication요청과 함께 를 실행하여 애플리케이션을 생성하십시오.

aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json

애플리케이션이 생성되었습니다. 다음 단계에서는 애플리케이션을 시작합니다.

애플리케이션을 시작합니다.

이 섹션에서는 StartApplication액션을 사용하여 애플리케이션을 시작합니다.

애플리케이션을 시작하려면
  1. 다음 JSON 코드를 start_request.json이라는 파일에 저장합니다.

    { "ApplicationName": "sliding_window", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
  2. 위의 요청과 함께 StartApplication 작업을 실행하여 애플리케이션을 시작합니다.

    aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json

애플리케이션이 실행됩니다. Amazon CloudWatch 콘솔에서 Apache Flink용 관리형 서비스 지표를 확인하여 애플리케이션이 작동하는지 확인할 수 있습니다.

애플리케이션을 중지하십시오.

이 섹션에서는 StopApplication액션을 사용하여 애플리케이션을 중지합니다.

애플리케이션을 중지하려면
  1. 다음 JSON 코드를 stop_request.json이라는 파일에 저장합니다.

    { "ApplicationName": "sliding_window" }
  2. 위의 요청과 함께 StopApplication 작업을 실행하여 애플리케이션을 중지합니다.

    aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json

애플리케이션이 중지됩니다.

CloudWatch 로깅 옵션 추가

를 AWS CLI 사용하여 Amazon CloudWatch 로그 스트림을 애플리케이션에 추가할 수 있습니다. 애플리케이션에서 CloudWatch 로그를 사용하는 방법에 대한 자세한 내용은 애플리케이션 로깅 설정을 참조하십시오.

환경 속성 업데이트

이 섹션에서는 애플리케이션 코드를 다시 컴파일하지 않고도 UpdateApplication액션을 사용하여 애플리케이션의 환경 속성을 변경할 수 있습니다. 이 예제에서는 원본 스트림과 대상 스트림의 리전을 변경합니다.

애플리케이션의 환경 속성 업데이트
  1. 다음 JSON 코드를 update_properties_request.json이라는 파일에 저장합니다.

    {"ApplicationName": "sliding_window", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "EnvironmentPropertyUpdates": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleOutputStream" } } ] } } }
  2. 이전 요청과 함께 UpdateApplication 작업을 실행하여 환경 속성을 업데이트하십시오.

    aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
애플리케이션 코드 업데이트

새 버전의 코드 패키지로 애플리케이션 코드를 업데이트해야 하는 경우 UpdateApplicationCLI 작업을 사용합니다.

참고

파일 이름이 같은 새 버전의 애플리케이션 코드를 로드하려면 새 객체 버전을 지정해야 합니다. Amazon S3 객체 버전 사용에 대한 자세한 내용을 알아보려면 버전 관리 활성화 또는 비활성화를 참조하세요.

를 사용하려면 Amazon S3 버킷에서 이전 코드 패키지를 삭제하고 새 버전을 업로드한 다음 동일한 Amazon S3 버킷과 객체 이름, 새 객체 버전을 지정하여 UpdateApplication 호출합니다. AWS CLI애플리케이션이 새 코드 패키지로 다시 시작됩니다.

다음 예 UpdateApplication 작업 요청은 애플리케이션 코드를 다시 로드하고 애플리케이션을 다시 시작합니다. CurrentApplicationVersionId를 현재 애플리케이션 버전으로 업데이트하세요. ListApplications 또는 DescribeApplication 작업을 사용하여 현재 애플리케이션 버전을 확인할 수 있습니다. 버킷 명칭 접미사(<username>)를 종속 리소스 생성 섹션에서 선택한 접미사로 업데이트합니다.

{ "ApplicationName": "sliding_window", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "ApplicationCodeConfigurationUpdate": { "CodeContentUpdate": { "S3ContentLocationUpdate": { "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username", "FileKeyUpdate": "-1.0.jar", "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU" } } } } }
AWS 리소스를 정리하세요.

이 섹션에는 슬라이딩 윈도우 튜토리얼에서 만든 AWS 리소스를 정리하는 절차가 포함되어 있습니다.

Apache Flink용 관리 서비스 애플리케이션을 삭제하십시오.
  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Apache Flink용 관리형 서비스 패널에서 선택합니다. MyApplication

  3. 애플리케이션 페이지에서 삭제를 선택한 다음 삭제를 확인합니다.

Kinesis 데이터 스트림을 삭제합니다.
  1. https://console.aws.amazon.com/kinesis에서 Kinesis 콘솔을 엽니다.

  2. Kinesis Data Streams 패널에서 을 선택합니다. ExampleInputStream

  3. ExampleInputStream페이지에서 Kinesis 스트림 삭제를 선택한 다음 삭제를 확인합니다.

  4. Kinesis 스트림 페이지에서 를 선택하고 작업을 선택하고 삭제를 선택한 다음 삭제를 확인합니다. ExampleOutputStream

Amazon S3 객체 및 버킷을 삭제합니다.
  1. https://console.aws.amazon.com/s3/에서 S3 콘솔을 엽니다.

  2. ka-app-code- 버킷을 선택합니다. <username>

  3. 삭제를 선택한 후 버킷 이름을 입력하여 삭제를 확인합니다.

IAM 리소스를 삭제합니다.
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 바에서 정책을 선택합니다.

  3. 필터 컨트롤에서 kinesis를 입력합니다.

  4. kinesis-analytics-service- MyApplication -us-west-2 정책을 선택합니다.

  5. 정책 작업을 선택한 후 삭제를 선택합니다.

  6. 탐색 모음에서 역할을 선택합니다.

  7. 키네시스-애널리틱스- -US-West-2 역할을 선택합니다. MyApplication

  8. 역할 삭제를 선택하고 삭제를 확인합니다.

CloudWatch 리소스 삭제하기
  1. https://console.aws.amazon.com/cloudwatch/ 에서 CloudWatch 콘솔을 엽니다.

  2. 탐색 바에서 로그를 선택합니다.

  3. MyApplication/aws/kinesis-analytics/ 로그 그룹을 선택합니다.

  4. 로그 그룹 삭제를 선택한 다음 삭제를 확인합니다.

예: 스트리밍 데이터를 스칼라의 Amazon S3로 전송

참고

현재 예제는 을 참조하십시오예제.

참고

Flink 버전 1.15부터 Scala는 무료입니다. 이제 애플리케이션은 모든 Scala 버전에서 Java API를 사용할 수 있습니다. Flink는 여전히 내부적으로 몇 가지 주요 구성 요소에서 Scala를 사용하지만 사용자 코드 클래스 로더에 Scala를 노출하지는 않습니다. 따라서 사용자는 자신의 jar-acrchive에 Scala 종속성을 추가해야 합니다.

Flink 1.15의 Scala 변경 사항에 대한 자세한 내용은 Scala Free in One Fifteen을 참조하세요.

이 연습에서는 Scala 3.2.0과 Flink의 Java API를 사용하는 간단한 스트리밍 애플리케이션을 만들어 보겠습니다. DataStream 애플리케이션은 Kinesis 스트림에서 데이터를 읽고, 슬라이딩 윈도우를 사용하여 데이터를 집계하고, 결과를 S3에 기록합니다.

참고

이 연습에 필수 사전 조건을 설정하려면 먼저 시작하기(Scala) 연습을 완료하세요. Amazon S3 data/ ka-app-code 버킷에 추가 폴더를 생성하기만 하면 됩니다. <username>

애플리케이션 코드를 다운로드하여 검토하십시오.

이 예제의 Python 응용 프로그램 코드는 에서 사용할 수 GitHub 있습니다. 애플리케이션 코드를 다운로드하려면 다음을 수행하세요.

  1. 아직 설치하지 않았다면 Git 클라이언트를 설치합니다. 자세한 정보는 Git 설치를 참조하세요.

  2. 다음 명령을 사용하여 원격 리포지토리를 복제합니다:

    git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
  3. amazon-kinesis-data-analytics-java-examples/scala/S3Sink 디렉터리로 이동합니다.

애플리케이션 코드에 대해 다음을 유의하십시오:

  • build.sbt 파일에는 Managed Service for Apache Flink 라이브러리를 포함하여 애플리케이션의 구성 및 종속성에 대한 정보가 들어 있습니다.

  • BasicStreamingJob.scala 파일에는 애플리케이션의 기능을 정의하는 주요 메서드가 들어 있습니다.

  • 애플리케이션은 Kinesis 소스를 사용하여 소스 스트림에서 읽습니다. 다음 스니펫은 Kinesis 소스를 생성합니다.

    private def createSource: FlinkKinesisConsumer[String] = { val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties val inputProperties = applicationProperties.get("ConsumerConfigProperties") new FlinkKinesisConsumer[String](inputProperties.getProperty(streamNameKey, defaultInputStreamName), new SimpleStringSchema, inputProperties) }

    또한 애플리케이션은 StreamingFileSink a를 사용하여 Amazon S3 버킷에 씁니다.

    def createSink: StreamingFileSink[String] = { val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties val s3SinkPath = applicationProperties.get("ProducerConfigProperties").getProperty("s3.sink.path") StreamingFileSink .forRowFormat(new Path(s3SinkPath), new SimpleStringEncoder[String]("UTF-8")) .build() }
  • 애플리케이션은 StreamExecutionEnvironment 객체를 사용하여 외부 리소스에 액세스할 수 있는 소스 및 싱크 커넥터를 생성합니다.

  • 애플리케이션은 동적 애플리케이션 속성을 사용하여 소스 및 싱크 커넥터를 만듭니다. 런타임 애플리케이션의 속성을 읽어 커넥터를 구성합니다. 런타임 속성에 대한 자세한 내용은 런타임 속성을 참조하세요.

애플리케이션 코드 컴파일 및 업로드

이 섹션에서는 애플리케이션 코드를 컴파일하여 Amazon S3 버킷에 업로드합니다.

애플리케이션 코드 컴파일

SBT 빌드 도구를 사용하여 애플리케이션용 Scala 코드를 빌드합니다. SBT를 설치하려면 cs 설정으로 sbt 설치를 참조하십시오. 또한 Java Devopment Kit(JDK)를 설치해야 합니다. 연습 완료를 위한 사전 조건을 참조하세요.

  1. 애플리케이션 코드를 사용하려면 이를 컴파일하고 JAR 파일로 패키징합니다. SBT를 사용하여 코드를 컴파일하고 패키징할 수 있습니다.

    sbt assembly
  2. 애플리케이션이 성공적으로 컴파일되면 다음 파일이 생성됩니다:

    target/scala-3.2.0/s3-sink-scala-1.0.jar
Apache Flink 스트리밍 Scala 코드 업로드

이 섹션에서는 Amazon S3 버킷을 만들고 애플리케이션 코드를 업로드합니다.

  1. https://console.aws.amazon.com/s3/에서 S3 콘솔을 엽니다.

  2. 버킷 만들기를 선택합니다.

  3. 버킷 명칭 필드에 ka-app-code-<username>을 입력합니다. 버킷 명칭에 사용자 이름 등의 접미사를 추가하여 전역적으로 고유하게 만듭니다. 다음을 선택합니다.

  4. 옵션 구성 단계에서 설정을 기본값 그대로 두고 다음을 선택합니다.

  5. 권한 설정 단계에서 설정을 기본값 그대로 두고 다음을 선택합니다.

  6. 버킷 생성을 선택합니다.

  7. ka-app-code-<username> 버킷을 선택한 다음 업로드를 선택합니다.

  8. 파일 선택 단계에서 파일 추가를 선택합니다. 이전 단계에서 생성한 s3-sink-scala-1.0.jar 파일로 이동합니다.

  9. 개체 정보에 대한 설정은 변경할 필요가 없으므로 업로드를 선택합니다.

이제 애플리케이션 코드가 애플리케이션에서 액세스할 수 있는 Amazon S3 버킷에 저장됩니다.

애플리케이션 생성 및 실행 (콘솔)

콘솔을 사용하여 애플리케이션을 생성, 구성, 업데이트 및 실행하려면 다음 단계를 수행하세요.

애플리케이션 생성
  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Managed Service for Apache Flink 대시보드에서 분석 애플리케이션 생성을 선택합니다.

  3. Managed Service for Apache Flink - 애플리케이션 생성 페이지에서 다음과 같이 애플리케이션 세부 정보를 제공합니다.

    • 애플리케이션 명칭MyApplication을 입력합니다.

    • 설명My java test app를 입력합니다.

    • 런타임에서 Apache Flink를 선택합니다.

    • 버전은 Apache Flink 버전 1.15.2(권장 버전)로 그대로 둡니다.

  4. 액세스 권한에서 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  5. 애플리케이션 생성을 선택합니다.

참고

콘솔을 사용하여 Managed Service for Apache Flink 애플리케이션을 만들 때 내 애플리케이션에 대한 IAM 역할 및 정책을 둘 수 있는 옵션이 있습니다. 귀하의 애플리케이션은 이 역할 및 정책을 사용하여 종속 리소스에 액세스합니다. 이러한 IAM 리소스의 이름은 애플리케이션 명칭과 리전을 사용하여 다음과 같이 지정됩니다.

  • 정책: kinesis-analytics-service-MyApplication-us-west-2

  • 역할: kinesisanalytics-MyApplication-us-west-2

애플리케이션 구성

애플리케이션을 구성하려면 다음 절차를 사용합니다.

애플리케이션을 구성하려면
  1. MyApplication페이지에서 구성을 선택합니다.

  2. 애플리케이션 구성 페이지에서 코드 위치를 입력합니다.

    • Amazon S3 버킷의 경우 ka-app-code-<username>를 입력합니다.

    • Amazon S3 객체 경로에는 s3-sink-scala-1.0.jar를 입력합니다.

  3. 애플리케이션 리소스에 대한 액세스 아래에서 액세스 권한의 경우 IAM 역할 kinesis-analytics-MyApplication-us-west-2 생성/업데이트를 선택합니다.

  4. 속성에서 그룹 추가를 선택합니다.

  5. 다음을 입력합니다:

    그룹 ID
    ConsumerConfigProperties input.stream.name ExampleInputStream
    ConsumerConfigProperties aws.region us-west-2
    ConsumerConfigProperties flink.stream.initpos LATEST

    저장을 선택합니다.

  6. 속성에서 그룹 추가를 선택합니다.

  7. 다음을 입력합니다:

    그룹 ID
    ProducerConfigProperties s3.sink.path s3a://ka-app-code-<user-name>/data
  8. 모니터링에서 지표 수준 모니터링애플리케이션으로 설정되어 있는지 확인합니다.

  9. CloudWatch 로깅하려면 활성화 확인란을 선택합니다.

  10. 업데이트를 선택합니다.

참고

Amazon CloudWatch 로깅을 활성화하도록 선택하면 Apache Flink용 관리형 서비스에서 로그 그룹과 로그 스트림을 자동으로 생성합니다. 이러한 리소스의 이름은 다음과 같습니다.

  • 로그 그룹: /aws/kinesis-analytics/MyApplication

  • 로그 스트림: kinesis-analytics-log-stream

IAM 정책을 편집하십시오.

IAM 정책을 편집하여 Amazon S3 버킷에 액세스할 수 있는 권한을 추가합니다.

IAM 정책을 편집하여 S3 버킷 권한을 추가하려면
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 여세요.

  2. 정책을 선택하세요. 이전 섹션에서 콘솔이 생성한 kinesis-analytics-service-MyApplication-us-west-2 정책을 선택합니다.

  3. 요약 페이지에서 정책 편집을 선택합니다. JSON 탭을 선택합니다.

  4. 다음 정책 예제의 강조 표시된 부분을 정책에 추가하세요. 샘플 계정 ID(012345678901)를 내 계정 ID로 바꿉니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:GetObject*", "s3:GetBucket*", "s3:List*", "s3:ListBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::ka-app-code-<username>", "arn:aws:s3:::ka-app-code-<username>/*" ] }, { "Sid": "DescribeLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" } ] }
애플리케이션을 실행합니다

애플리케이션을 실행하고 Apache Flink 대시보드를 연 다음 원하는 Flink 작업을 선택하면 Flink 작업 그래프를 볼 수 있습니다.

애플리케이션 중지

애플리케이션을 중지하려면 MyApplication페이지에서 중지를 선택합니다. 작업을 확인합니다.

애플리케이션 생성 및 실행(CLI)

이 섹션에서는 를 사용하여 Apache Flink용 관리 서비스 응용 프로그램을 만들고 실행합니다. AWS Command Line Interface kinesisanalyticsv2 AWS CLI 명령을 사용하여 아파치 플링크용 관리 서비스 애플리케이션을 만들고 이 애플리케이션과 상호 작용할 수 있습니다.

권한 정책 생성
참고

애플리케이션에 대한 권한 정책 및 역할을 생성해야 합니다. 이러한 IAM 리소스를 생성하지 않으면 애플리케이션은 해당 데이터 및 로그 스트림에 액세스할 수 없습니다.

먼저 소스 스트림의 읽기 작업에 대한 권한을 부여하는 설명과 싱크 스트림의 쓰기 작업에 대한 권한을 부여하는 설명 두 개를 사용하여 권한 정책을 만듭니다. 그런 다음 정책을 IAM 역할(다음 섹션에서 생성)에 연결합니다. 따라서 Managed Service for Apache Flink가 역할을 맡을 때 서비스는 소스 스트림에서 읽고 싱크 스트림에 쓸 수 있는 권한이 있습니다.

다음 코드를 사용하여 AKReadSourceStreamWriteSinkStream 권한 정책을 생성합니다. username을 애플리케이션 코드를 저장하기 위해 Amazon S3 버킷을 만들 때 사용한 사용자 이름으로 바꿉니다. Amazon 리소스 이름(ARN)의 계정 ID((012345678901))를 사용자의 계정 ID로 바꿉니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadCode", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::ka-app-code-username/getting-started-scala-1.0.jar" ] }, { "Sid": "DescribeLogGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:*" ] }, { "Sid": "DescribeLogStreams", "Effect": "Allow", "Action": [ "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*" ] }, { "Sid": "PutLogEvents", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream" ] }, { "Sid": "ReadInputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream" }, { "Sid": "WriteOutputStream", "Effect": "Allow", "Action": "kinesis:*", "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream" } ] }

권한 정책을 생성하는 step-by-step 방법에 대한 지침은 IAM 사용 설명서의 자습서: 첫 번째 고객 관리형 정책 생성 및 연결을 참조하십시오.

IAM 역할 생성

이 섹션에서는 Managed Service for Apache Flink 애플리케이션이 소스 스트림을 읽고 싱크 스트림에 쓰기 위해 맡을 수 있는 IAM 역할을 생성합니다.

Managed Service for Apache Flink는 권한 없이 스트림에 액세스할 수 없습니다. IAM 역할을 통해 이러한 권한을 부여합니다. 각 IAM 역할에는 두 가지 정책이 연결됩니다. 신뢰 정책은 Managed Service for Apache Flink가 역할을 취할 수 있는 권한을 부여하고, 권한 정책은 역할을 취한 후 Managed Service for Apache Flink에서 수행할 수 있는 작업을 결정합니다.

이전 섹션에서 생성한 권한 정책을 이 역할에 연결합니다.

IAM 역할을 생성하려면
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 창에서 역할을 선택한 후 역할 생성을 선택합니다.

  3. 신뢰할 수 있는 유형의 자격 증명 선택에서 AWS 서비스를 선택합니다.

  4. 이 역할을 사용할 서비스 선택에서 Kinesis를 선택합니다.

  5. 사용 사례 선택에서 Managed Service for Apache Flink를 선택합니다.

  6. 다음: 권한을 선택합니다.

  7. 권한 정책 연결 페이지에서 다음: 검토를 선택합니다. 역할을 생성한 후에 권한 정책을 연결합니다.

  8. 역할 생성 페이지에서 역할 이름으로 MF-stream-rw-role을 입력합니다. 역할 생성을 선택합니다.

    MF-stream-rw-role이라는 새 IAM 역할이 생성되었습니다. 그런 다음 역할의 신뢰 정책 및 권한 정책을 업데이트합니다.

  9. 역할에 권한 정책을 연결합니다.

    참고

    이 연습에서는 Managed Service for Apache Flink가 이 역할을 취하여 Kinesis 데이터 스트림(소스)에서 데이터를 읽고 출력을 다른 Kinesis 데이터 스트림에 씁니다. 따라서 이전 단계인 권한 정책 생성에서 만든 정책을 연결합니다.

    1. 요약 페이지에서 권한 탭을 선택합니다.

    2. 정책 연결을 선택합니다.

    3. 검색 상자에 AKReadSourceStreamWriteSinkStream(이전 섹션에서 생성한 정책)을 입력합니다.

    4. AKReadSourceStreamWriteSinkStream 정책을 선택한 후 정책 연결을 선택합니다.

이제 애플리케이션이 리소스에 액세스하는 데 사용하는 서비스 실행 역할이 생성되었습니다. 새 역할의 ARN을 기록합니다.

역할 생성에 대한 step-by-step 지침은 IAM 사용 설명서의 IAM 역할 생성 (콘솔) 을 참조하십시오.

애플리케이션 생성

다음 JSON 코드를 create_request.json이라는 파일에 저장합니다. 샘플 역할 ARN을 이전에 생성한 역할을 위한 ARN으로 바꿉니다. 버킷 ARN 접미사(사용자 이름)를 이전 섹션에서 선택한 접미사로 바꿉니다. 서비스 실행 역할의 샘플 계정 ID(012345678901)를 사용자 계정 ID로 바꿉니다.

{ "ApplicationName": "s3_sink", "ApplicationDescription": "Scala tumbling window application", "RuntimeEnvironment": "FLINK-1_15", "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role", "ApplicationConfiguration": { "ApplicationCodeConfiguration": { "CodeContent": { "S3ContentLocation": { "BucketARN": "arn:aws:s3:::ka-app-code-username", "FileKey": "s3-sink-scala-1.0.jar" } }, "CodeContentType": "ZIPFILE" }, "EnvironmentProperties": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "s3.sink.path" : "s3a://ka-app-code-<username>/data" } } ] } }, "CloudWatchLoggingOptions": [ { "LogStreamARN": "arn:aws:logs:us-west-2:012345678901:log-group:MyApplication:log-stream:kinesis-analytics-log-stream" } ] }

다음 CreateApplication요청과 함께 를 실행하여 애플리케이션을 생성하십시오.

aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json

애플리케이션이 생성되었습니다. 다음 단계에서는 애플리케이션을 시작합니다.

애플리케이션을 시작합니다.

이 섹션에서는 StartApplication액션을 사용하여 애플리케이션을 시작합니다.

애플리케이션을 시작하려면
  1. 다음 JSON 코드를 start_request.json이라는 파일에 저장합니다.

    {{ "ApplicationName": "s3_sink", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
  2. 위의 요청과 함께 StartApplication 작업을 실행하여 애플리케이션을 시작합니다.

    aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json

애플리케이션이 실행됩니다. Amazon CloudWatch 콘솔에서 Apache Flink용 관리형 서비스 지표를 확인하여 애플리케이션이 작동하는지 확인할 수 있습니다.

애플리케이션을 중지하십시오.

이 섹션에서는 StopApplication액션을 사용하여 애플리케이션을 중지합니다.

애플리케이션을 중지하려면
  1. 다음 JSON 코드를 stop_request.json이라는 파일에 저장합니다.

    { "ApplicationName": "s3_sink" }
  2. 위의 요청과 함께 StopApplication 작업을 실행하여 애플리케이션을 중지합니다.

    aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json

애플리케이션이 중지됩니다.

CloudWatch 로깅 옵션 추가

를 AWS CLI 사용하여 Amazon CloudWatch 로그 스트림을 애플리케이션에 추가할 수 있습니다. 애플리케이션에서 CloudWatch 로그를 사용하는 방법에 대한 자세한 내용은 애플리케이션 로깅 설정을 참조하십시오.

환경 속성 업데이트

이 섹션에서는 애플리케이션 코드를 다시 컴파일하지 않고도 UpdateApplication액션을 사용하여 애플리케이션의 환경 속성을 변경할 수 있습니다. 이 예제에서는 원본 스트림과 대상 스트림의 리전을 변경합니다.

애플리케이션의 환경 속성 업데이트
  1. 다음 JSON 코드를 update_properties_request.json이라는 파일에 저장합니다.

    {"ApplicationName": "s3_sink", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "EnvironmentPropertyUpdates": { "PropertyGroups": [ { "PropertyGroupId": "ConsumerConfigProperties", "PropertyMap" : { "aws.region" : "us-west-2", "stream.name" : "ExampleInputStream", "flink.stream.initpos" : "LATEST" } }, { "PropertyGroupId": "ProducerConfigProperties", "PropertyMap" : { "s3.sink.path" : "s3a://ka-app-code-<username>/data" } } ] } } }
  2. 이전 요청과 함께 UpdateApplication 작업을 실행하여 환경 속성을 업데이트하십시오.

    aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
애플리케이션 코드 업데이트

새 버전의 코드 패키지로 애플리케이션 코드를 업데이트해야 하는 경우 UpdateApplicationCLI 작업을 사용합니다.

참고

파일 이름이 같은 새 버전의 애플리케이션 코드를 로드하려면 새 객체 버전을 지정해야 합니다. Amazon S3 객체 버전 사용에 대한 자세한 내용을 알아보려면 버전 관리 활성화 또는 비활성화를 참조하세요.

를 사용하려면 Amazon S3 버킷에서 이전 코드 패키지를 삭제하고 새 버전을 업로드한 다음 동일한 Amazon S3 버킷과 객체 이름, 새 객체 버전을 지정하여 UpdateApplication 호출합니다. AWS CLI애플리케이션이 새 코드 패키지로 다시 시작됩니다.

다음 예 UpdateApplication 작업 요청은 애플리케이션 코드를 다시 로드하고 애플리케이션을 다시 시작합니다. CurrentApplicationVersionId를 현재 애플리케이션 버전으로 업데이트하세요. ListApplications 또는 DescribeApplication 작업을 사용하여 현재 애플리케이션 버전을 확인할 수 있습니다. 버킷 명칭 접미사(<username>)를 종속 리소스 생성 섹션에서 선택한 접미사로 업데이트합니다.

{ "ApplicationName": "s3_sink", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "ApplicationCodeConfigurationUpdate": { "CodeContentUpdate": { "S3ContentLocationUpdate": { "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username", "FileKeyUpdate": "s3-sink-scala-1.0.jar", "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU" } } } } }
AWS 리소스를 정리하세요.

이 섹션에는 텀블링 윈도우 튜토리얼에서 만든 AWS 리소스를 정리하는 절차가 포함되어 있습니다.

Apache Flink용 관리형 서비스 애플리케이션 삭제
  1. https://console.aws.amazon.com/flink에서 Managed Service for Apache Flink 콘솔을 엽니다.

  2. Apache Flink용 관리형 서비스 패널에서 선택합니다. MyApplication

  3. 애플리케이션 페이지에서 삭제를 선택한 다음 삭제를 확인합니다.

Kinesis 데이터 스트림을 삭제합니다.
  1. https://console.aws.amazon.com/kinesis에서 Kinesis 콘솔을 엽니다.

  2. Kinesis Data Streams 패널에서 을 선택합니다. ExampleInputStream

  3. ExampleInputStream페이지에서 Kinesis 스트림 삭제를 선택한 다음 삭제를 확인합니다.

  4. Kinesis 스트림 페이지에서 를 선택하고 작업을 선택하고 삭제를 선택한 다음 삭제를 확인합니다. ExampleOutputStream

Amazon S3 객체 및 버킷을 삭제합니다.
  1. https://console.aws.amazon.com/s3/에서 S3 콘솔을 엽니다.

  2. ka-app-code- 버킷을 선택합니다. <username>

  3. 삭제를 선택한 후 버킷 이름을 입력하여 삭제를 확인합니다.

IAM 리소스를 삭제합니다.
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 바에서 정책을 선택합니다.

  3. 필터 컨트롤에서 kinesis를 입력합니다.

  4. kinesis-analytics-service- MyApplication -us-west-2 정책을 선택합니다.

  5. 정책 작업을 선택한 후 삭제를 선택합니다.

  6. 탐색 모음에서 역할을 선택합니다.

  7. 키네시스-애널리틱스- -US-West-2 역할을 선택합니다. MyApplication

  8. 역할 삭제를 선택하고 삭제를 확인합니다.

CloudWatch 리소스 삭제하기
  1. https://console.aws.amazon.com/cloudwatch/ 에서 CloudWatch 콘솔을 엽니다.

  2. 탐색 바에서 로그를 선택합니다.

  3. MyApplication/aws/kinesis-analytics/ 로그 그룹을 선택합니다.

  4. 로그 그룹 삭제를 선택한 다음 삭제를 확인합니다.