서버 없는 프레임워크와 CDK 결합

16053 단어 sstserverlessawscdk
Serverless Stack guide을 배우는 데 도움을 주는 동시에 대부분의 사람들이 CloudFormation 템플릿을 사용하여 그들의 AWS 인프라를 정의하는 데 매우 어렵다는 것을 알게 되었다.그래서 우리는 AWS CDK에 대해 매우 흥분한 것도 이상할 것이 없다.AWS 인프라를 현대 프로그래밍 언어로 정의할 수 있습니다.CDK, 진정한 인프라 코드 작성
한편, Serverless Framework은 AWS에서 서버 없는 응용 프로그램을 구축하기에 매우 적합하다.비록 당신은 순수하게 CDK로 서버 없는 응용 프로그램을 구축할 수 있지만, 그것은 결코 좋은 개발자 체험을 하지 못한다.한편, 서버 프레임워크가 없으면 서버 없는 AWS 인프라를 구축할 수 있습니다.그러나 YAML 또는 JSON으로 작성된 CloudFormation 템플릿을 사용해야 합니다.
이 두 프레임 사이의 중첩 부분은 led folks to write으로 약 why you should use one versus the other이다.그러나 우리는 그것들을 동시에 사용해야 한다고 생각한다.우리는 이미 이렇게 하는 도구-Serverless Stack Toolkit(SST)을 만들었다.양쪽 다 좋게 해줄게!
이것을 자세히 봅시다.

출신 배경


깊이 연구하기 전에 우리는 이 틀의 배경 지식을 신속하게 이해합시다.

서버 프레임워크 없음


Serverless Framework은 2015년 10월에 발표되었다.이것은 로컬에서 서버 없는 응용 프로그램을 개발하고 쉽게 배치할 수 있도록 합니다.serverless.yml 구성 파일에 의해 구동되며 다음과 같습니다.
service: serverless-example

provider:
  name: aws
  runtime: nodejs12.x

functions:
  hello:
    handler: handler.hello
다음 명령을 사용하여 Lambda 함수를 로컬에서 호출할 수 있습니다.
$ serverless invoke local -f hello
다음과 같은 방식으로 배포할 수 있습니다.
$ serverless deploy
서버 프레임워크가 없으면 Lambda 함수가 자동으로 패키지되어 AWS에 업로드됩니다.
YAML의 CloudFormation 템플릿을 사용하여 다른 AWS 인프라를 추가할 수도 있습니다.예를 들어, 다음 방법으로 DynamoDB 테이블을 추가할 수 있습니다.
Resources:
  NotesTable:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: ${self:custom.tableName}
      AttributeDefinitions:
        - AttributeName: userId
          AttributeType: S
        - AttributeName: noteId
          AttributeType: S
      KeySchema:
        - AttributeName: userId
          KeyType: HASH
        - AttributeName: noteId
          KeyType: RANGE
      BillingMode: PAY_PER_REQUEST

AWS CDK


AWS CDK(클라우드 개발 도구 패키지)은 released in Developer Preview back in August 2018이다.TypeScript, JavaScript, Java를 사용할 수 있습니다.NET 및 Python은 AWS 인프라를 구축합니다.
예를 들어, 다음은 DynamoDB 테이블의 CloudFormation 템플릿과 CDK 버전의 비교입니다.
- Resources:
-   NotesTable:
-     Type: AWS::DynamoDB::Table
-     Properties:
-       TableName: ${self:custom.tableName}
-       AttributeDefinitions:
-         - AttributeName: userId
-           AttributeType: S
-         - AttributeName: noteId
-           AttributeType: S
-       KeySchema:
-         - AttributeName: userId
-           KeyType: HASH
-         - AttributeName: noteId
-           KeyType: RANGE
-       BillingMode: PAY_PER_REQUEST


+ const table = new dynamodb.Table(this, "notes", {
+   partitionKey: {
+     name: 'userId', type: dynamodb.AttributeType.STRING,
+   },
+   sortKey: {
+     name: 'noteId', type: dynamodb.AttributeType.STRING,
+   },
+   billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
+ });
또한 고급 구조를 생성할 수 있습니다.이것은 새로운 재사용 가능한 위젯을 만들기 위해 낮은 등급의 자원을 통합하고 조합할 수 있다는 것을 의미한다.
서버 프레임워크가 없는 것과 마찬가지로 다음 도구를 사용하여 CDK 응용 프로그램을 배포할 수 있습니다.
$ cdk deploy
또한 Lambda 함수를 정의할 수 있습니다.
const helloSrc = fs.readFileSync('handler.js').toString();

const helloLambda = new lambda.Function(this, 'HelloLambda', {
  runtime: lambda.Runtime.NODEJS_12_X,
  handler: 'handler.hello',
  code: new lambda.InlineCode(helloSrc, {
    encoding: 'utf-8',
  })
});
그러나, 이것은 당신의 Lambda 함수에 좋은 로컬 개발 체험을 제공할 수 없습니다.

서버 없는 프레임워크와 CDK 결합


결론적으로 서버 프레임워크와 CDK가 없는 비교입니다.
서버 프레임워크 없음
AWS CDK
Lambda 함수에 적합합니다.

〰️
다른 인프라에 적합
〰️

따라서 다른 AWS 인프라를 포함하는 서버 없는 프로그램을 구축하고 있다면, 서버 없는 프레임워크를 Lambda 함수에 사용하고 CDK를 나머지 함수에 사용하는 것은 매우 의미가 있습니다.
또한 서버 없는 커뮤니티와 we recommend it over on Serverless Stack에서 Lambda 기능을 다른 기초 구조에서 분리하는 유사한 디자인 모델은 흔히 볼 수 있다.
그러나 이 두 가지 사이에는 디자인상의 차이가 존재하므로 주의해야 한다.

서버 프레임워크와 CDK 간의 설계 차이 없음


서버 없는 응용 프로그램은 여러 개의 서비스로 구성되어 있으며 전체 응용 프로그램은 같은 환경에 배치되어 있다.

각 서비스는 대상 AWS 계정에 클라우드 정보 스택으로 배포됩니다.사용자화를 위한 단계, 영역 및 AWS 구성 파일을 지정할 수 있습니다.
 $ AWS_PROFILE=development serverless deploy --stage dev --region us-east-1
여기에서 --stage 옵션은 스택 이름 앞에 단계 이름을 추가합니다.따라서 동일한 AWS 계정에 여러 단계를 배치하려는 경우 리소스 이름은 영향을 받지 않습니다.
따라서 서버 없는 애플리케이션을 여러 환경에 쉽게 배포할 수 있습니다.같은 AWS 계정에 있더라도

한편 AWS CDK 애플리케이션은 여러 스택으로 구성됩니다.각 스택은 CloudFormation 스택으로 대상 AWS 계정에 배포됩니다.그러나 서버가 없는 응용 프로그램과 달리 각 스택은 서로 다른 AWS 계정이나 지역에 배치할 수 있다.

이것은 CDK 응용 프로그램을 배치할 때마다 여러 환경에서 스택을 만들 수 있음을 의미합니다.이런 관건적인 디자인 차이는 우리가 서버 없는 서비스를 사용하는 동시에 CDK 응용 프로그램을 사용하는 것을 막는다.
본 문서와 같이 CDK 응용 프로그램에서 특정 규칙에 따라 이 문제를 해결할 수 있습니다.그러나 이 공약들을 집행해야만 효과가 있다.

진입, 서버 스택 도구 패키지 없음


이 문제를 해결하기 위해 Serverless Stack Toolkit(SST)을 만들었습니다.
SST를 사용하면 서버 프레임워크가 없는 것과 같은 규칙을 따를 수 있습니다.이것은 다음과 같은 방법으로 Lambda 함수를 배치할 수 있음을 의미합니다.
$ AWS_PROFILE=production serverless deploy --stage prod --region us-east-1
CDK를 AWS 인프라의 나머지 부분에 사용합니다.
$ AWS_PROFILE=production npx sst deploy --stage prod --region us-east-1
서버 프레임워크가 없는 것처럼 CDK 응용 프로그램의 스택은 단계 이름을 접두사로 합니다.이제 서버 없는 프레임워크와 CDK를 함께 사용할 수 있습니다!다음 작업을 수행할 수 있습니다.

다음과 같이 AWS 계정이나 영역을 CDK 스택의 일부로 정의할 수 있습니다.
new MyStack(app, "my-stack", { env: { account: "1234", region: "us-east-1" } });
너는 잘못을 하나 얻게 될 것이다.
Error: Do not directly set the environment for a stack

더 있어!


SST에는 몇 가지 주요 이점이 있습니다.

  • 병렬 배치
    AWS CDK 배포는 현재 매우 느립니다.CDK는 순차적으로 CloudFormation 스택을 배포합니다.CloudFormation 템플릿을 배포하고 완료될 때까지 기다린 다음 다음을 시작합니다.이는 대규모 애플리케이션의 CDK 배포에 최소 30분이 소요될 수 있음을 의미합니다.SST는 CloudFormation 스택을 동시에 배치하여 이 문제를 해결합니다.

  • 비동기식 배포
    SST는 또한 비동기식 배포 CloudFormation 스택도 지원합니다.따라서 CloudFormation이 완료될 때까지 CI 구축 시간을 낭비할 필요가 없습니다.Seed natively supports concurrent asynchronous deployments for your SST apps.은 5배 가까이 속도를 높여 거의 무료로 배포할 수 있습니다!
  • 은(는) ES6(및 TypeScript)를 지원합니다.
  • ESLint
  • 자동 lint CDK 코드 사용하기

    SST와 CDK 간의 차이


    SST는 CDK의 간단한 확장으로 몇 가지 작은 차이가 있습니다.

  • 없음 cdk.json대신 스테이지와 영역이 기본값인 sst.json입니다.
    {
      "name": "my-sst-app",
      "type": "@serverless-stack/resources",
      "stage": "dev",
      "region": "us-east-1"
    }
    

  • 없음 bin/*.js반면 기본 내보내기 기능이 있는 lib/index.js은 스택을 추가할 수 있습니다.SST는 응용 프로그램 객체를 작성합니다.
    import MyStack from "./MyStack";
    
    export default function main(app) {
      new MyStack(app, "my-stack");
    
      // Add more stacks
    }
    

  • 스택 확장 sst.Stack스택 클래스는 sst.Stack이 아니라 cdk.Stack으로 확장되었습니다.이것은 SST가 스택 이름 앞에 배치할 단계를 추가할 수 있도록 합니다.
    import * as sst from "@serverless-stack/resources";
    
    export default class MyStack extends sst.Stack {
      constructor(scope, id, props) {}
    }
    
  • moving a CDK app to SST here에 대한 더 많은 정보를 읽을 수 있습니다.따라서 SST를 사용하고 싶지만 기존의 CDK 응용 프로그램이 있다면 다음과 같은 몇 가지 간단한 절차를 통해 실현할 수 있다.

    총결산


    우리는 AWS CDK이 YAML 또는 JSON으로 작성된 CloudFormation 템플릿에 대한 큰 개선이라고 생각한다.Serverless Framework과 CDK의 결합으로 이 두 분야의 장점을 충분히 활용할 수 있습니다.서버 없는 프레임워크를 사용하여 Lambda 기능을 개발하고 배치하며 CDK를 사용하여 AWS 인프라의 나머지 부분을 정의합니다.이 두 가지를 동시에 사용할 수 있도록 Serverless Stack Toolkit(SST)을 만들었습니다.CDK의 간단한 확장으로 서버 프레임워크 없는 서비스와 CDK 응용 프로그램을 함께 배치할 수 있습니다!

    좋은 웹페이지 즐겨찾기