Java AWS CDK 에서 작업 - AWS Cloud Development Kit (AWS CDK) v2

v AWS CDK 2 개발자 안내서입니다. 이전 CDK v1은 2022년 6월 1일에 유지 관리에 들어갔고 2023년 6월 1일에 지원을 종료했습니다.

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

Java AWS CDK 에서 작업

Java는 에 대해 완전히 지원되는 클라이언트 언어 AWS CDK 이며 안정적인 것으로 간주됩니다. JDK (Oracle's 또는 Amazon Corretto와 같은 OpenJDK 배포) 및 Apache Maven과 같은 친숙한 도구를 사용하여 Java에서 AWS CDK 애플리케이션을 개발할 수 있습니다.

는 Java 8 이상을 AWS CDK 지원합니다. 그러나 최신 버전의 언어에는 AWS CDK 애플리케이션 개발에 특히 편리한 개선 사항이 포함되어 있으므로 사용할 수 있는 최신 버전을 사용하는 것이 좋습니다. 예를 들어 Java 9는 Map.of() 메서드(에서 객체 리터럴로 쓰일 해시맵을 선언하는 편리한 방법)를 도입합니다 TypeScript. Java 10은 var 키워드를 사용하여 로컬 유형 추론을 도입합니다.

참고

이 개발자 안내서의 대부분의 코드 예제는 Java 8에서 작동합니다. 몇 가지 예제에서는 Map.of()를 사용합니다. 이러한 예제에는 Java 9가 필요하다는 주석이 포함되어 있습니다.

모든 텍스트 편집기 또는 Maven 프로젝트를 읽을 수 IDE 있는 Java를 사용하여 AWS CDK 앱에서 작업할 수 있습니다. 이 안내서에서는 Eclipse 힌트를 제공하지만 IntelliJ IDEA NetBeans, 및 기타 는 Maven 프로젝트를 가져올 IDEs 수 있으며 Java에서 AWS CDK 애플리케이션을 개발하는 데 사용할 수 있습니다.

Java 이외의 JVM호스팅 언어(예: Kotlin, Groovy, Clojure 또는 Scala)로 AWS CDK 애플리케이션을 작성할 수 있지만, 경험이 특별히 특이하지 않을 수 있으며 이러한 언어에 대한 지원을 제공할 수 없습니다.

시작하기 Java

를 사용하려면 AWS 계정과 보안 인증 정보가 있어야 하며 Node.js와 툴킷을 AWS CDK 설치해야 AWS CDK합니다. 시작하기 AWS CDK을 참조하세요.

Java AWS CDK 애플리케이션에는 Java 8(v1.8) 이상이 필요합니다. Amazon Corretto 를 사용하는 것이 좋지만 모든 OpenJDK 배포 또는 Oracle의 를 JDK사용할 수 있습니다. 또한 Apache Maven 3.5 이상이 필요합니다. Gradle과 같은 도구를 사용할 수도 있지만 AWS CDK Toolkit에서 생성된 애플리케이션 스켈레톤은 Maven 프로젝트입니다.

참고

타사 언어 사용 중단: 언어 버전은 공급업체 또는 커뮤니티에서 EOL (수명 종료)를 공유할 때까지만 지원되며 사전 통지에 따라 변경될 수 있습니다.

프로젝트 생성

빈 디렉터리cdk init에서 호출하여 새 AWS CDK 프로젝트를 생성합니다. --language 옵션을 사용하고 를 지정합니다java.

mkdir my-project cd my-project cdk init app --language java

cdk init 는 프로젝트 폴더의 이름을 사용하여 클래스, 하위 폴더 및 파일을 비롯한 프로젝트의 다양한 요소의 이름을 지정합니다. 폴더 이름의 하이픈은 밑줄로 변환됩니다. 하지만 이름은 Java 식별자의 형태를 따라야 합니다. 예를 들어, 숫자로 시작하거나 공백을 포함해서는 안 됩니다.

결과 프로젝트에는 software.amazon.awscdk Maven 패키지에 대한 참조가 포함됩니다. Maven에서 자동으로 설치됩니다.

를 사용하는 경우 이제 프로젝트를 열거나 가져올 IDE수 있습니다. 예를 들어 Eclipse에서 파일 > 가져오기 > Maven > 기존 Maven 프로젝트 를 선택합니다. 프로젝트 설정이 Java 8(1.8)을 사용하도록 설정되어 있는지 확인합니다.

AWS 구성 라이브러리 모듈 관리

Maven을 사용하여 그룹 에 있는 AWS Construct Library 패키지를 설치합니다software.amazon.awscdk. 대부분의 구성은 아티팩트 에 있으며aws-cdk-lib, 이는 기본적으로 새 Java 프로젝트에 추가됩니다. 더 높은 수준의 CDK 지원이 아직 개발 중인 서비스의 모듈은 서비스 이름의 짧은 버전( 접두사 없음 AWS 또는 Amazon 접두사)으로 명명된 별도의 '실험적' 패키지에 있습니다. Maven Central 리포지토리를 검색하여 모든 AWS CDK 및 AWS 구성 모듈 라이브러리의 이름을 찾습니다.

참고

CDK API 참조의 Java 에디션에는 패키지 이름도 표시됩니다.

일부 services' AWS Construct Library 지원은 둘 이상의 네임스페이스에 있습니다. 예를 들어 Amazon Route 53에는 , software.amazon.awscdk.route53, route53resolver, route53-patterns로 구분된 기능이 있습니다route53-targets.

기본 AWS CDK 패키지는 Java 코드에서 로 가져옵니다software.amazon.awscdk. AWS Construct Library의 다양한 서비스에 대한 모듈은 에 있으며 Maven 패키지 이름과 비슷하게 이름이 지정software.amazon.awscdk.services됩니다. 예를 들어 Amazon S3 모듈의 네임스페이스는 입니다software.amazon.awscdk.services.s3.

각 Java 소스 파일에 사용하는 각 AWS Construct Library 클래스에 대해 별도의 Java import 문을 작성하고 와일드카드를 가져오지 않는 것이 좋습니다. import 문 없이 항상 형식의 정규화된 이름(네임스페이스 포함)을 사용할 수 있습니다.

애플리케이션이 실험 패키지에 의존하는 경우 프로젝트의 를 편집pom.xml하고 <dependencies> 컨테이너에 새 <dependency> 요소를 추가합니다. 예를 들어 다음 <dependency> 요소는 CodeStar 실험 구성 라이브러리 모듈을 지정합니다.

<dependency> <groupId>software.amazon.awscdk</groupId> <artifactId>codestar-alpha</artifactId> <version>2.0.0-alpha.10</version> </dependency>
작은 정보

Java 를 사용하는 경우 Maven 종속성을 관리하는 기능이 있을 IDE수 있습니다. 그러나 의 IDE기능이 직접 수행하는 작업과 일치하는지 완전히 확신하지 않는 한 pom.xml 직접 편집하는 것이 좋습니다.

에서 종속성 관리 Java

Java에서 종속성은 에 지정pom.xml되고 Maven을 사용하여 설치됩니다. <dependencies> 컨테이너에는 각 패키지에 대한 <dependency> 요소가 포함되어 있습니다. 다음은 일반적인 CDK Java 앱에 pom.xml 대한 섹션입니다.

<dependencies> <dependency> <groupId>software.amazon.awscdk</groupId> <artifactId>aws-cdk-lib</artifactId> <version>2.14.0</version> </dependency> <dependency> <groupId>software.amazon.awscdk</groupId> <artifactId>appsync-alpha</artifactId> <version>2.10.0-alpha.0</version> </dependency> </dependencies>
작은 정보

많은 JavaIDEs에는 Maven 지원 및 시각적 pom.xml 편집기가 통합되어 있어 종속성을 편리하게 관리할 수 있습니다.

Maven은 종속성 잠금을 지원하지 않습니다. 에서 버전 범위를 지정할 수 있지만 빌드를 반복 가능하게 유지하려면 항상 정확한 버전을 사용하는 것이 pom.xml좋습니다.

Maven은 전이 종속성을 자동으로 설치하지만 각 패키지의 복사본은 하나만 설치할 수 있습니다. POM 트리에서 가장 높게 지정된 버전이 선택됩니다. 애플리케이션에는 항상 설치할 패키지 버전에 마지막 단어가 있습니다.

Maven은 프로젝트를 빌드(mvn compile)하거나 패키지(mvn package)할 때마다 종속성을 자동으로 설치하거나 업데이트합니다. CDK Toolkit은 이 작업을 실행할 때마다 자동으로 수행하므로 일반적으로 Maven을 수동으로 호출할 필요가 없습니다.

AWS CDK Java의 idioms

프롭

모든 AWS Construct Library 클래스는 세 가지 인수, 즉 구성이 정의되는 범위(작성 트리의 상위), ID프롭, 구성이 생성하는 리소스를 구성하는 데 사용하는 키/값 페어 번들을 사용하여 인스턴스화됩니다. 다른 클래스 및 메서드도 인수에 '속성 번들' 패턴을 사용합니다.

Java에서 프롭은 Builder 패턴 을 사용하여 표현됩니다. 각 구성 유형에는 해당하는 프롭 유형이 있습니다. 예를 들어 Bucket 구성 요소(Amazon S3 버킷을 나타냄)는 인스턴스를 프롭으로 사용합니다BucketProps.

BucketProps 클래스(모든 AWS Construct Library props 클래스와 같이)에는 라는 내부 클래스가 있습니다Builder. 이 BucketProps.Builder 유형은 BucketProps 인스턴스의 다양한 속성을 설정하는 방법을 제공합니다. 각 메서드는 Builder 인스턴스를 반환하므로 메서드 호출을 연결해 여러 속성을 설정할 수 있습니다. 체인이 끝나면 를 호출build()하여 실제로 BucketProps 객체를 생성합니다.

Bucket bucket = new Bucket(this, "amzn-s3-demo-bucket", new BucketProps.Builder() .versioned(true) .encryption(BucketEncryption.KMS_MANAGED) .build());

프롭과 같은 객체를 최종 인수로 사용하는 구성 및 기타 클래스는 바로 가기를 제공합니다. 클래스에는 클래스와 해당 프롭 객체를 한 번에 인스턴스화하는 자체 Builder 가 있습니다. 이렇게 하면 BucketProps 및 를 모두 명시적으로 인스턴스화(예:)할 필요가 Bucket없으며 프롭 유형에 대한 가져오기가 필요하지 않습니다.

Bucket bucket = Bucket.Builder.create(this, "amzn-s3-demo-bucket") .versioned(true) .encryption(BucketEncryption.KMS_MANAGED) .build();

기존 구성에서 자체 구성을 파생할 때 추가 속성을 수락할 수 있습니다. 이러한 빌더 패턴을 따르는 것이 좋습니다. 하지만 이는 구성 클래스를 하위 클래스로 분류하는 것만큼 간단한 것은 아닙니다. 두 새 Builder 클래스의 이동 부분을 직접 제공해야 합니다. 구성 요소가 하나 이상의 추가 인수를 수락하도록 하는 것이 좋습니다. 인수가 선택 사항인 경우 추가 생성자를 제공해야 합니다.

일반 구조

일부 에서 APIs는 JavaScript 배열 또는 입력되지 않은 객체를 메서드에 대한 입력으로 AWS CDK 사용합니다. (예: AWS CodeBuild의 BuildSpec.fromObject() 메서드 참조) Java에서 이러한 객체는 로 표시됩니다java.util.Map<String, Object>. 값이 모두 문자열인 경우 를 사용할 수 있습니다Map<String, String>.

Java는 다른 언어와 마찬가지로 이러한 컨테이너에 리터럴을 쓸 수 있는 방법을 제공하지 않습니다. Java 9 이상에서는 java.util.Map.of()를 사용하여 이러한 호출 중 하나와 일치하는 최대 10개의 항목 맵을 편리하게 정의할 수 있습니다.

java.util.Map.of( "base-directory", "dist", "files", "LambdaStack.template.json" )

항목이 10개 이상인 맵을 생성하려면 를 사용합니다java.util.Map.ofEntries().

Java 8을 사용하는 경우 이와 유사한 자체 메서드를 제공할 수 있습니다.

JavaScript 배열은 JavaList<String>에서 List<Object> 또는 로 표시됩니다. 이 방법은 짧은 를 정의하는 데 java.util.Arrays.asList 편리List합니다.

List<String> cmds = Arrays.asList("cd lambda", "npm install", "npm install typescript")

누락된 값

Java에서는 소품과 같은 AWS CDK 객체의 누락된 값이 로 표시됩니다null. 값을 가지고 아무 작업도 수행하기 전에 값을 포함하는지 확인하기 null 위해 할 수 있는 모든 값을 명시적으로 테스트해야 합니다. Java에는 다른 언어와 마찬가지로 null 값을 처리하는 데 도움이 되는 '동기 설탕'이 없습니다. 일부 상황에서는 Apache defaultIfNull 및 ObjectUtil가 firstNonNull 유용할 수 있습니다. 또는 자체 정적 헬퍼 메서드를 작성하여 잠재적으로 null 값을 더 쉽게 처리하고 코드를 더 쉽게 읽을 수 있도록 하세요.

CDK 애플리케이션 빌드 및 실행

는 실행하기 전에 앱을 AWS CDK 자동으로 컴파일합니다. 그러나 오류를 확인하고 테스트를 실행하기 위해 앱을 수동으로 빌드하는 것이 유용할 수 있습니다. 에서IDE(예: Eclipse에서 Control-B를 누름) 또는 프로젝트의 루트 디렉터리mvn compile에 있는 동안 명령 프롬프트에서 를 실행하여 이 작업을 수행할 수 있습니다.

명령 프롬프트mvn test에서 를 실행하여 작성한 테스트를 실행합니다.