AWS CodeBuild
사용 설명서 (API 버전 2016-10-06)

AWS CodeBuild용 AWS Elastic Beanstalk 샘플

이 샘플은 AWS CodeBuild에 Maven을 사용하여 my-web-app.war이라는 단일 WAR 파일을 빌드 출력으로 생성하도록 지시합니다. Elastic Beanstalk 환경의 인스턴스에 WAR 파일을 배포하도록 지시합니다.

중요

이 샘플을 실행하면 AWS 계정에 요금이 발생할 수 있습니다. 여기에는 CodeBuild 및 AWS 리소스에 대한 요금 및 Amazon S3, AWS KMS, CloudWatch Logs, Amazon EC2과 관련된 작업이 포함됩니다. 자세한 정보는 CodeBuild 요금, Amazon S3 요금, AWS Key Management Service 요금, Amazon CloudWatch 요금, Amazon EC2 요금을 참조하십시오.

소스 코드 생성

이 섹션에서는 Maven을 사용하여 소스 코드를 생성합니다. 그런 다음, AWS CodeBuild를 사용하여 이 소스 코드를 기반으로 WAR 파일을 빌드합니다.

  1. Maven을 다운로드하고 설치합니다. 자세한 정보는 Apache Maven 웹 사이트의 Downloading Apache MavenInstalling Apache Maven 단원을 참조하십시오.

  2. 로컬 컴퓨터나 인스턴스의 빈 디렉터리로 전환한 다음, 아래 Maven 명령을 실행합니다.

    mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-web-app -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

    성공하면 다음 디렉터리 구조 및 파일이 생성됩니다.

    (root directory name) `-- my-web-app |-- pom.xml `-- src `-- main |-- resources `-- webapp |-- WEB-INF | `-- web.xml `-- index.jsp
  3. (root directory name)/my-web-app 디렉터리에서 .ebextensions라는 하위 디렉터리를 만듭니다. .ebextensions 하위 디렉터리에 다음 내용이 포함된 fix-path.config라는 파일을 만듭니다.

    container_commands: fix_path: command: "unzip my-web-app.war 2>&1 > /var/log/my_last_deploy.log"

Maven을 실행한 후 다음 중 하나의 시나리오를 계속하십시오.

시나리오 A: 수동으로 AWS CodeBuild 실행 및 수동으로 Elastic Beanstalk 배포

이 시나리오에서는 소스 코드를 수동으로 생성 및 업로드합니다. 그런 다음 AWS CodeBuild 및 Elastic Beanstalk 콘솔을 사용하여 소스 코드를 빌드하고, Elastic Beanstalk 애플리케이션 및 환경을 생성하고, 환경에 빌드 출력을 배포합니다.

A1단계: 소스 코드에 파일 추가

이 단계에서는 소스 코드 생성의 코드에 Elastic Beanstalk 구성 파일 및 빌드 사양 파일을 추가합니다. 그런 다음 소스 코드를 Amazon S3 입력 버킷이나 AWS CodeCommit 또는 GitHub 리포지토리에 업로드합니다.

  1. 다음 콘텐츠를 통해 buildspec.yml이라는 파일을 생성합니다. 파일을 (root directory name)/my-web-app 디렉터리에 저장합니다.

    version: 0.2 phases: install: runtime-versions: java: corretto11 post_build: commands: - mvn package - mv target/my-web-app.war my-web-app.war artifacts: files: - my-web-app.war - .ebextensions/**/*
  2. 파일 구조가 아래와 같이 나타날 것입니다.

    (root directory name) `-- my-web-app |-- .ebextensions | `-- fix-path.config |-- src | `-- main | |-- resources | `-- webapp | |-- WEB-INF | | `-- web.xml | `-- index.jsp |-- buildpsec.yml `-- pom.xml
  3. 이러한 my-web-app 디렉터리의 내용을 Amazon S3 입력 버킷이나 CodeCommit, GitHub 또는 Bitbucket 리포지토리에 업로드합니다.

    중요

    (root directory name) 또는 (root directory name)/my-web-app은 업로드하지 말고, (root directory name)/my-web-app 안에 있는 디렉터리 및 파일만 업로드하십시오.

    Amazon S3 입력 버킷을 사용하는 경우 버전이 지정된 입력 버킷이어야 합니다. 디렉터리 구조 및 파일을 포함하는 ZIP 파일을 생성한 다음, 이를 입력 버킷에 업로드하십시오. (root directory name) 또는 (root directory name)/my-web-app을 ZIP 파일에 추가하지 말고, (root directory name)/my-web-app 안에 있는 디렉터리 및 파일만 추가하십시오. 자세한 내용은 버킷의 버전관리를 구성하는 방법 단원을 참조하십시오.

A2단계: 빌드 프로젝트 만들기 및 빌드 실행

이 단계에서는 AWS CodeBuild 콘솔을 사용하여 빌드 프로젝트를 만든 후 빌드를 실행합니다.

  1. 빌드 출력을 저장할 Amazon S3 출력 버킷을 생성하거나 지정합니다. Amazon S3 입력 버킷에 소스 코드를 저장하고 있는 경우, 출력 버킷이 입력 버킷과 같은 AWS 리전에 있어야 합니다.

  2. Open the AWS CodeBuild console at https://console.aws.amazon.com/codesuite/codebuild/home.

    AWS 리전 선택기를 사용하여 CodeBuild를 지원하는 리전을 선택하고 Amazon S3 출력 버킷이 저장되는 리전과 연결합니다.

  3. 빌드 프로젝트를 생성한 후 빌드를 실행합니다. 자세한 정보는 빌드 프로젝트 만들기(콘솔)빌드 실행(콘솔) 단원을 참조하십시오. 다음 설정을 제외하고 모든 설정을 기본값 그대로 둡니다.

    • 환경:

      • 환경 이미지에서 이미지 관리를 선택합니다.

      • 운영 체제에서 Amazon Linux 2를 선택합니다.

      • 런타임에서 표준을 선택합니다.

      • 이미지의 경우 aws/codebuild/amazonlinux2-x86_64-standard:1.0을 선택합니다.

    • 결과물:

      • 유형에서 Amazon S3를 선택합니다.

      • 버킷 이름에서 Amazon S3 버킷의 이름을 입력합니다.

      • 이름에, 기억하기 쉬운 빌드 출력 파일 이름을 입력합니다. .zip 확장명을 포함합니다.

      • [Artifacts packaging]에서 Zip을 선택합니다.

A3단계: 애플리케이션 및 환경 생성과 배포

이 단계에서는 Elastic Beanstalk 콘솔을 사용하여 애플리케이션 및 환경을 만듭니다. 환경 생성 과정에는 이전 단계에서 나온 빌드 출력을 환경에 배포하는 작업이 포함됩니다.

  1. https://console.aws.amazon.com/elasticbeanstalk에서 Elastic Beanstalk 콘솔을 엽니다.

    AWS 리전 선택기를 사용하여 Amazon S3 출력 버킷이 저장되는 리전을 선택합니다.

  2. Elastic Beanstalk 애플리케이션을 만듭니다. 자세한 정보는 AWS Elastic Beanstalk 애플리케이션 관리 및 구성 단원을 참조하십시오.

  3. 이 애플리케이션을 위한 Elastic Beanstalk 환경을 만듭니다. 자세한 정보는 새 환경 만들기 마법사 단원을 참조하십시오. 다음 설정을 제외하고 모든 설정을 기본값 그대로 둡니다.

    • [Platform]에서 [Tomcat]을 선택합니다.

    • [Application code]에서 [Upload your code]를 선택한 다음 [Upload]를 선택합니다. 소스 코드 오리진에서 퍼블릭 S3 URL을 선택한 다음, 출력 버킷의 빌드 출력 ZIP 파일에 대한 전체 URL을 입력합니다. 업로드를 선택합니다.

  4. Elastic Beanstalk가 환경에 빌드 출력을 배포하면 웹 브라우저에 결과가 표시됩니다. 인스턴스의 환경 URL로 이동합니다(예: http://my-environment-name.random-string.region-ID.elasticbeanstalk.com). 웹 브라우저에 Hello World!라는 텍스트가 표시되어야 합니다.

시나리오 B: CodePipeline를 사용하여 AWS CodeBuild 실행 및 Elastic Beanstalk에 배포

이 시나리오에서는 소스 코드 준비 및 업로드 단계를 완료합니다. CodeBuild를 사용하여 빌드 프로젝트를 생성하고 AWS Elastic Beanstalk 콘솔을 사용하여 AWS Elastic Beanstalk 애플리케이션 및 환경을 생성합니다. 그런 다음 AWS CodePipeline 콘솔을 사용하여 파이프라인을 생성합니다. 파이프라인을 생성하면 CodePipeline는 소스 코드를 빌드하는 작업 및 빌드 출력을 환경에 배포하는 작업이 수행됩니다.

B1단계: 소스 코드에 빌드 사양 파일 추가

이 단계에서는 빌드 사양 파일을 생성하고 이를 소스 코드 생성 섹션에서 생성한 코드에 추가합니다. 그런 다음 소스 코드를 Amazon S3 입력 버킷이나 CodeCommit 또는 GitHub 리포지토리에 업로드합니다.

  1. 다음 콘텐츠를 통해 buildspec.yml이라는 파일을 생성합니다. 파일을 (root directory name)/my-web-app 디렉터리에 저장합니다.

    version: 0.2 phases: install: runtime-versions: java: corretto11 post_build: commands: - mvn package - mv target/my-web-app.war my-web-app.war artifacts: files: - my-web-app.war - .ebextensions/**/* base-directory: 'target/my-web-app'
  2. 파일 구조가 아래와 같이 나타날 것입니다.

    (root directory name) `-- my-web-app |-- .ebextensions | `-- fix-path.config |-- src | `-- main | |-- resources | `-- webapp | |-- WEB-INF | | `-- web.xml | `-- index.jsp |-- buildpsec.yml `-- pom.xml
  3. 이러한 my-web-app 디렉터리의 내용을 Amazon S3 입력 버킷이나 CodeCommit, GitHub 또는 Bitbucket 리포지토리에 업로드합니다.

    중요

    (root directory name) 또는 (root directory name)/my-web-app은 업로드하지 말고, (root directory name)/my-web-app 안에 있는 디렉터리 및 파일만 업로드하십시오.

    Amazon S3 입력 버킷을 사용하는 경우 버전이 지정된 입력 버킷이어야 합니다. 디렉터리 구조 및 파일을 포함하는 ZIP 파일을 생성한 다음, 이를 입력 버킷에 업로드하십시오. (root directory name) 또는 (root directory name)/my-web-app을 ZIP 파일에 추가하지 말고, (root directory name)/my-web-app 안에 있는 디렉터리 및 파일만 추가하십시오. 자세한 내용은 버킷의 버전관리를 구성하는 방법 단원을 참조하십시오.

B2단계: 빌드 프로젝트 생성

이 단계에서는 파이프라인에 사용할 AWS CodeBuild 빌드 프로젝트를 생성합니다.

  1. Open the AWS CodeBuild console at https://console.aws.amazon.com/codesuite/codebuild/home.

  2. 빌드 프로젝트를 생성합니다. 자세한 내용은 빌드 프로젝트 만들기(콘솔)빌드 실행(콘솔) 섹션을 참조하십시오. 다음 설정을 제외하고 모든 설정을 기본값 그대로 둡니다.

    • 환경:

      • 환경 이미지에서 이미지 관리를 선택합니다.

      • 운영 체제에서 Amazon Linux 2를 선택합니다.

      • 런타임에서 표준을 선택합니다.

      • 이미지의 경우 aws/codebuild/amazonlinux2-x86_64-standard:1.0을 선택합니다.

    • 결과물:

      • 유형에서 Amazon S3를 선택합니다.

      • 버킷 이름에서 Amazon S3 버킷의 이름을 입력합니다.

      • 이름에, 기억하기 쉬운 빌드 출력 파일 이름을 입력합니다. .zip 확장명을 포함합니다.

      • [Artifacts packaging]에서 Zip을 선택합니다.

B3단계: AWS Elastic Beanstalk 애플리케이션 및 환경 생성

이 단계에서는 CodePipeline에 사용할 AWS Elastic Beanstalk 애플리케이션 및 환경을 생성합니다.

  1. Open the Elastic Beanstalk console at https://console.aws.amazon.com/elasticbeanstalk/.

  2. Elastic Beanstalk 콘솔을 사용하여 애플리케이션을 생성합니다. 자세한 정보는 AWS Elastic Beanstalk 애플리케이션 관리 및 구성 단원을 참조하십시오.

  3. Elastic Beanstalk 콘솔을 사용하여 환경을 생성합니다. 자세한 정보는 새 환경 만들기 마법사 단원을 참조하십시오. 플랫폼을 제외하고 모든 설정을 기본값 그대로 둡니다. [Platform]에서 [Tomcat]을 선택합니다.

B4단계: 파이프라인 생성 및 배포

이 단계에서는 CodePipeline 콘솔을 사용하여 파이프라인을 생성합니다. 파이프라인이 생성하여 시행한 후 CodePipeline에서 AWS CodeBuild를 사용하여 소스 코드를 빌드합니다. 그런 다음 CodePipeline에서 Elastic Beanstalk를 사용하여 환경에 빌드 출력을 배포합니다.

  1. CodePipeline, CodeBuild 및 Elastic Beanstalk가 작업을 자동으로 수행하는 데 사용할 수 있는 서비스 역할을 생성하거나 지정합니다. 자세한 정보는 사전 조건 단원을 참조하십시오.

  2. https://console.aws.amazon.com/codesuite/codepipeline/home에서 CodePipeline 콘솔을 엽니다.

    AWS 리전 선택기를 사용하여 CodeBuild를 지원하는 리전을 선택하고, Amazon S3 입력 버킷에 소스 코드를 저장하고 있는 경우 입력 버킷이 저장되는 리전을 선택합니다.

  3. 파이프라인을 생성합니다. 자세한 정보는 CodeBuild를 사용하는 파이프라인 생성(CodePipeline 콘솔) 단원을 참조하십시오. 다음 설정을 제외하고 모든 설정을 기본값 그대로 둡니다.

    • 빌드 단계 추가빌드 공급자에서 AWS CodeBuild를 선택합니다. 프로젝트 이름에서 방금 생성한 빌드 프로젝트를 선택합니다.

    • 배포 단계 추가배포 공급자에서 AWS Elastic Beanstalk를 선택합니다.

      • 애플리케이션 이름에서 방금 생성한 Elastic Beanstalk 애플리케이션을 선택합니다.

      • 환경 이름에서 방금 생성한 환경을 선택합니다.

  4. 파이프라인이 성공적으로 실행되면 웹 브라우저에 결과가 표시됩니다. 인스턴스의 환경 URL로 이동합니다(예: http://my-environment-name.random-string.region-ID.elasticbeanstalk.com). 웹 브라우저에 Hello World!라는 텍스트가 표시되어야 합니다.

이제, 소스 코드를 변경하고 이러한 변경 사항을 원래의 Amazon S3 입력 버킷이나 CodeCommit, GitHub 또는 Bitbucket 리포지토리에 업로드할 때마다 CodePipeline은 변경을 감지하고 파이프라인을 다시 실행합니다. 이에 따라 CodeBuild는 코드를 재빌드하며, Elastic Beanstalk는 재빌드한 출력을 환경에 배포합니다.

시나리오 C: Elastic Beanstalk CLI를 사용하여 AWS CodeBuild 실행 및 Elastic Beanstalk 환경에 배포

이 시나리오에서는 소스 코드 준비 및 업로드 단계를 완료합니다. 그런 다음 Elastic Beanstalk CLI를 실행하여 Elastic Beanstalk 애플리케이션 및 환경을 생성하고, CodeBuild를 사용하여 소스 코드를 빌드한 다음, 환경에 빌드 출력을 배포합니다. 자세한 정보는 AWS Elastic Beanstalk Developer GuideCodeBuild에서 EB CLI 사용을 참조하십시오.

C1단계: 소스 코드에 파일 추가

이 단계에서는 소스 코드 생성 단원에서 생성한 코드에 Elastic Beanstalk 구성 파일 및 빌드 사양 파일을 추가합니다. 또한 빌드 사양 파일에 대한 서비스 역할도 만들거나 지정합니다.

  1. Elastic Beanstalk와 CLI가 사용자 대신 사용할 수 있는 서비스 역할을 생성하거나 지정합니다. 자세한 정보는 CodeBuild 서비스 역할 만들기 단원을 참조하십시오.

  2. 다음 콘텐츠를 통해 buildspec.yml이라는 파일을 생성합니다. 파일을 (root directory name)/my-web-app 디렉터리에 저장합니다.

    version: 0.2 phases: install: runtime-versions: java: corretto11 post_build: commands: - mvn package - mv target/my-web-app.war my-web-app.war artifacts: files: - my-web-app.war - .ebextensions/**/* eb_codebuild_settings: CodeBuildServiceRole: my-service-role-name ComputeType: BUILD_GENERAL1_SMALL Image: aws/codebuild/standard:2.0 Timeout: 60

    앞의 코드에서 my-service-role-name을 앞부분에서 생성하거나 지정한 서비스 역할 이름으로 바꿉니다.

  3. 파일 구조가 아래와 같이 나타날 것입니다.

    (root directory name) `-- my-web-app |-- .ebextensions | `-- fix-path.config |-- src | `-- main | |-- resources | `-- webapp | |-- WEB-INF | | `-- web.xml | `-- index.jsp |-- buildpsec.yml `-- pom.xml

C2단계: EB CLI 설치 및 실행

  1. 아직 수행하지 않았다면 소스 코드를 생성한 동일한 컴퓨터나 인스턴스에 EB CLI를 설치하고 구성합니다. 자세한 정보는 AWS Elastic Beanstalk Developer GuideElastic Beanstalk 명령줄 인터페이스(EB CLI) 설치EB CLI 구성을 참조하십시오.

  2. 컴퓨터나 인스턴스의 명령줄이나 터미널에서 cd 명령이나 이와 유사한 명령을 실행하여 (root directory name)/my-web-app 디렉터리로 전환합니다. eb init 명령을 실행하여 EB CLI를 구성합니다.

    eb init

    해당 메시지가 표시되면:

    • AWS CodeBuild를 지원하는 AWS 리전을 선택하고 Elastic Beanstalk 애플리케이션 및 환경을 생성하려는 위치를 연결합니다.

    • Elastic Beanstalk 애플리케이션을 생성하고 애플리케이션의 이름을 입력합니다.

    • Tomcat 플랫폼을 선택합니다.

    • Tomcat 8 Java 8 버전을 선택합니다.

    • SSH를 사용하여 환경의 인스턴스에 대한 액세스를 설정할지 여부를 선택합니다.

  3. 동일한 디렉터리에서 eb create 명령을 실행하여 Elastic Beanstalk 환경을 만듭니다.

    eb create

    해당 메시지가 표시되면:

    • 환경의 이름을 입력하거나 제시된 이름을 그대로 사용합니다.

    • 환경에 대해 DNS CNAME 접두사를 입력하거나 제시된 값을 그대로 사용합니다.

    • 이 샘플에서는 Classic Load Balancer 유형을 그대로 사용합니다.

  4. eb create 명령을 실행하면 EB CLI가 다음 작업을 수행합니다.

    1. 소스 코드로부터 ZIP 파일을 만든 다음, 해당 ZIP 파일을 사용자 계정의 Amazon S3 버킷에 업로드합니다.

    2. Elastic Beanstalk 애플리케이션 및 애플리케이션 버전을 생성합니다.

    3. AWS CodeBuild 프로젝트를 생성합니다.

    4. 세 프로젝트를 기반으로 빌드를 실행합니다.

    5. 빌드가 완료되면 프로젝트를 삭제합니다.

    6. Elastic Beanstalk 환경을 만듭니다.

    7. 환경에 빌드 출력을 배포합니다.

  5. EB CLI가 환경에 빌드 출력을 배포하면 웹 브라우저에 결과가 표시됩니다. 인스턴스의 환경 URL로 이동합니다(예: http://my-environment-name.random-string.region-ID.elasticbeanstalk.com). 웹 브라우저에 Hello World!라는 텍스트가 표시되어야 합니다.

원하는 경우 소스 코드를 변경한 후 동일한 디렉터리에서 eb deploy 명령을 실행할 수 있습니다. EB CLI는 eb create 명령과 동일한 단계를 수행하지만 새로운 환경을 만드는 대신 기존 환경에 빌드 출력을 배포합니다.

관련 리소스