AWS CDK를 사용하여 유연한 Beanstalk 어플리케이션 배포

14954 단어 awscdkcloud
AWS CDK은 AWS의'기초 구조 즉 코드'도구 패키지로서 코드를 사용하여 AWS 자원을 구축할 수 있습니다.나는 이미 클라우드 포메이션을 광범위하게 사용했다. 비록 문서가 쉽게 이해되는 것을 발견했지만 개발자의 체험은 존재하지 않는다.개발 백엔드의 같은 언어로 인프라를 작성할 수 있다는 것은 커다란 장점으로 AWS 인프라는 AWS 생태계에서 풍부한 경험이 없는 사람들에게 더욱 쉽게 접근할 수 있게 한다.저도 Typescript의 슈퍼 팬이기 때문에 CDK에 첨부된 Typescript는 상자를 열면 바로 사용할 수 있다는 점이 놀랍습니다.AWS CDK가 점점 인기를 끌고 있지만 (이것은 옳다) 문서가 매우 부족해서 읽기가 어렵다.나는 CloudFormation 문서를 보고 CDK에 비추는 데 대부분의 시간을 들인 것을 발견했다.
나는 최근에 CDK를 이용하여 Elastic Beanstalk 프로그램을 설치했는데 몇 가지 문제에 부딪혔다. 나는 다른 사람을 위해 해결할 수 있기를 바란다.이 문서에서, 나는 AWS CDK를 사용하여 간단한 Elastic Beanstalk 프로그램을 만들고, 호환되는 웹 프로그램을 배치할 수 있는 방법을 설명할 것이다.

플랫폼 as a Service 기술


Heroku나 Digital Ocean의 새로운 앱 플랫폼에 익숙하면 빠르게 시작하고 실행할 수 있을 것이다.EB는 대부분의 웹 응용 프로그램 프레임워크를 지원하는 웹 응용 프로그램을 배치하는 데 사용되는 간단하고 쉬운 서비스다.EB CLI 를 사용하면 간단한 eb deploy 명령을 사용하여 NodeJS, Django 및 기타 애플리케이션을 구축할 수 있습니다.EB는 자동 크기 조절 구성을 사용하여 크기 조절을 처리할 수 있는 기존 로드 밸런싱을 제공합니다.NodeJs 웹 응용 프로그램을 설정하고 EB CLI를 사용하여 EB에 배포합니다.
다음은 최종 아키텍처의 예입니다.

선결 조건


응용 프로그램을 만들고 배치하려면 AWS CDK 및 Elastic Beanstalk CLI를 설치해야 합니다.CDK는 npm -g install aws-cdk, EB CLI는 시스템에 따라 apt 또는 brew을 통해 설치할 수 있습니다.CDK를 사용하여 프로젝트를 만들고 부트한 다음 EB CLI 배포 코드를 사용합니다.AWS CLI를 설치하고 구성 파일을 구성해야 합니다.이 방법은 here 을 참조하십시오.

차리다


먼저 CDK 프로젝트를 초기화해야 합니다.CLI는 새로운 프로젝트를 시작하는 간단한 방법을 제공합니다.나는 typescript를 사용할 것이지만, 너는 네가 좋아하는 어떤 언어도 사용할 수 있다.새 디렉토리에서 다음을 실행합니다.
cdk init --app myApp --language typescript
CDK가 폴더 그룹을 만들었습니다: lib/, bin/, test.lib 폴더에 모든 스택을 만들고 test 폴더에 테스트를 작성하며 배포를 준비할 때 bin 폴더에 배포할 스택을 초기화합니다.

CDK 라이브러리 설치


CDK는 각각 각종 자원을 그 라이브러리에 포장한다.우리는 방대한 라이브러리를 가지고 있는 것이 아니라 프로젝트에 필요한 내용만 포함할 수 있다.IAM 및 Elastic Beanstalk 라이브러리는 다음과 같은 방법으로 설치할 수 있습니다.
npm install @aws-cdk/aws-elasticbeanstalk @aws-cdk/aws-iam
참고: 여러 라이브러리를 사용할 때는 같은 버전의 라이브러리를 사용해야 합니다.@aws-cdk/core 패키지에서 V1을 사용할 때 호환성 문제가 발생했습니다.@aws-cdk/aws-iam 라이브러리는 V1을 사용합니다.85.0. 모든 소프트웨어 패키지를 동일한 버전(예: V1.94.0 또는 V1.85.0)으로 업데이트하여 이 문제를 해결했습니다.

스택 만들기


다음은 lib/ 폴더의 내용을 살펴보겠습니다.프로젝트를 초기화할 때 지정한 프로그램 이름으로 된 파일을 볼 수 있습니다.너는 반드시 유사한 것을 보아야 한다.
import * as cdk from '@aws-cdk/core';
import * as elasticbeanstalk from '@aws-cdk/aws-elasticbeanstalk';
import * as iam from '@aws-cdk/aws-iam';

export class AppStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
  }
}

const app = new cdk.App();

new AppStack(app, 'Production');

app.synth();
CDK는 스택을 작성하여 작동합니다.CloudFormation에 익숙하지 않으면, 스택은 AWS 자원 설정 (자원, 데이터베이스, 서버, 용기 등) 의 집합입니다.창고 자체는 자원을 포함하지 않습니다. 자원 설정의 집합일 뿐입니다.스택을 배포할 때 AWS는 이러한 구성을 사용하여 리소스를 작성합니다.클라우드 포메이션에 대해 어떤 비용도 지불할 필요가 없지만, 클라우드 포메이션이 만든 모든 것에 대해 비용을 지불해야 한다.
어플리케이션을 시작하고 실행하려면 다음과 같은 3가지 리소스를 만들어야 합니다.
  • IAM 역할 및 인스턴스 프로파일 1개, EB 관리 서버
  • 권한 부여
  • 전자상거래 환경
  • 전자상거래 응용
  • IAM 권한부터 시작하겠습니다.
    // EBS IAM Roles
    const EbInstanceRole = new iam.Role(this, `${appName}-aws-elasticbeanstalk-ec2-role`, {
      assumedBy: new iam.ServicePrincipal('ec2.amazonaws.com'),
    });
    
    const managedPolicy = iam.ManagedPolicy.fromAwsManagedPolicyName('AWSElasticBeanstalkWebTier')
    EbInstanceRole.addManagedPolicy(managedPolicy);
    
    const profileName = `${appName}-InstanceProfile`
    const instanceProfile = new iam.CfnInstanceProfile(this, profileName, {
      instanceProfileName: profileName,
      roles: [
        EbInstanceRole.roleName
      ]
    });
    
    그러면 IAM 정책을 호스팅하는 AWSElasticBeanstalkWebTier IAM 역할이 추가됩니다.다음에, 우리는 실례 개요 파일을 만들고, 방금 만든 캐릭터를 사용합니다.이것은 서버에 EB 서버로 실행하는 데 필요한 권한을 제공합니다.
    그런 다음 EB 애플리케이션 및 환경을 만듭니다.
    
    const node = this.node;
    const platform = node.tryGetContext("platform");
    
    const optionSettingProperties: elasticbeanstalk.CfnEnvironment.OptionSettingProperty[] = [
      {
        namespace: 'aws:autoscaling:launchconfiguration',
        optionName: 'InstanceType',
        value: 't3.small',
      },
      {
        namespace: 'aws:autoscaling:launchconfiguration',
        optionName: 'IamInstanceProfile',
        value: profileName
      }
    ];
    
    // EBS Application and Environment
    const app = new elasticbeanstalk.CfnApplication(this, 'Application', {
      applicationName: `${appName}-EB-App`
    });
    
    const env = new elasticbeanstalk.CfnEnvironment(this, 'Environment', {
      environmentName: `${appName}-EB-Env`,
      applicationName: `${appName}-EB-App`,
      platformArn: platform,
      solutionStackName: '64bit Amazon Linux 2 v5.3.0 running Node.js 14',
      optionSettings: optionSettingProperties
    });
    
    env.addDependsOn(app);
    
    옵션 설정에서, 우리는 앞에서 만든 실례 설정 파일과 실행할 실례 형식을 지정합니다.나는 방금 t3 작은 것을 선택했지만, 만약 당신이 더 많은 작업량을 원한다면, 당신은 더 큰 것을 원할 것이다.응용 프로그램과 환경을 설정하는 것은 매우 간단하다.다른 solutionStackName을 사용해야 할 수도 있습니다.NodeJs 서버를 실행할 것이기 때문에 Node가 있는 Amazon Linux를 선택했습니다.js 14.사용 가능한 모든 솔루션 스택 here을 볼 수 있습니다.

    스택 배포


    스택을 배치하려면 Typescript 코드를 CloudFormation 템플릿으로 변환하는 데 문제가 없도록 synth 명령을 실행해야 합니다.다음은 CDK가 AWS에서 스택을 초기화하는 bootstrap 명령을 호출합니다.이렇게 하면 스택 상태를 관리하는 데 사용되는 CDK의 추가 리소스가 만들어집니다.CloudFormation에서 만든 "CDK 키트"라는 스택을 볼 수 있습니다.마지막으로 우리는 창고를 배치할 것이다.IAM 권한에 대한 경고가 표시될 수 있습니다.CDK는 스택이 보안 조치로 IAM 권한을 만들거나 변경하는 경우 경고를 보냅니다.
    cdk synth
    cdk bootstrap
    cdk deploy
    
    지금 우리는 기다린다.스택 작성에 대한 자세한 내용과 장애가 발생했는지 확인하려면 AWS 콘솔에서 CloudFormation 페이지로 이동합니다.
    스택이 완료되면 EB 콘솔에서 EB 환경과 응용 프로그램을 볼 수 있고 서버의 상태가 정상적이어야 합니다.다음에 우리는 서버에 코드를 배치하는 것을 연구할 것이다.

    Dell 서버 배포


    새로 만든 서버에 코드를 배치하기 위해서는 먼저 EB로 프로젝트를 초기화해야 합니다.제가 사용하는 것은 간단한 Express 프로그램입니다. 인터넷에는 자원을 어떻게 설정하는지에 대한 설명이 많기 때문입니다.시작하려면 다음을 실행하십시오.
    eb init
    
    CDK 스택을 배포할 때 사용하는 프로파일과 동일한 프로파일을 사용하는 경우 터미널에서 EB 환경을 옵션 옵션으로 표시할 수 있습니다.환경을 선택하고 프로젝트가 초기화될 때까지 기다립니다.완료하면 다음과 같이 간단해야 합니다.
    eb deploy
    

    EB 배포 문제 디버깅


    배포에 문제가 있을 경우 유용한 명령을 실행하여 서버의 최신 로그나 SSH를 볼 수 있습니다.
    eb logs
    eb ssh
    

    테스트 및 결론


    이제 AWS 콘솔에서 응용 프로그램의 URL을 찾을 수 있어야 합니다.지금부터 데이터베이스, S3 메모리통, 네트워크, lambda를 만들어서 창고를 구축하기를 원할 수도 있습니다.계속해서 창고에 자원을 추가하거나 그 중 일부를 단독 창고로 나누어 모듈화할 수 있습니다.나는 또한 두 개의 창고 실례를 만들 것을 건의한다. 하나는 개발/임시 저장에 사용되고, 하나는 생산에 사용된다.만약 당신이 취미 항목이 아니라면, 단독 계정에서 이렇게 하고, 보안 그룹이 있는 VPC와 웹 응용 프로그램 방화벽에 응용 프로그램을 추가해서 안전성을 높이는 것을 권장합니다.그러나 작은 프로젝트라면 완벽해야 한다. scale을 수천 명의 사용자에게 쉽게 보낼 수 있다.
    원본 게시물 및 추가 정보 보기 here

    좋은 웹페이지 즐겨찾기