SST: 당신이 발견해야 할 가장 과소평가된 서버 없는 프레임워크 (두 번째 부분)

9993 단어 awscdkserverlesssst
이 글은 SST 시리즈 기사의 두 번째 편이다.서버가 없는 세계에서 이 특정한 해결 방안의 놀라운 부분을 발견하도록 시도해 보겠습니다.너는 첫 번째 문장을 찾을 수 있다.
따라서 서버 없음 원칙을 사용하여 구축을 시작했고 Serverless framework를 발견했습니다.위대하다당신은 여기서 또 다른 옵션을 발견할 것입니다. 저는 여러 분야에서 더욱 우수하다고 생각합니다. Serverless Stack (SST)두 번째 문장에서 나는 이 개념을 소개한 후에 쓸만한 구조를 중점적으로 소개할 것이다.그것은 네가 더욱 빨리 구축하는 것을 도울 수 있다.

개념을 소개하다


CDK란 무엇입니까?


Serverless Stack (SST) 기반AWS Cloud Development Kit (CDK).AWS는 몇 년 전에 이 해결 방안을 도입했는데, 진정한 프로그래밍 언어를 사용하여 코드 (IaC) 의 형식으로 인프라 시설을 구축할 수 있게 했다.만약 당신이 이미 알고 있다면, 그것은 일종의 등효 제품입니다.
Terraform에서는 HashiCorp 구성 언어(HCL)를 통해 클라우드 리소스를 선언할 수 있습니다.
resource "aws_instance" "iac_in_action" {
  ami               = var.ami_id
  instance_type     = var.instance_type
  availability_zone = var.availability_zone

  // dynamically retrieve SSH Key Name
  key_name = aws_key_pair.iac_in_action.key_name

  // dynamically set Security Group ID (firewall)
  vpc_security_group_ids = [aws_security_group.iac_in_action.id]

  tags = {
    Name = "Terraform-managed EC2 Instance for IaC in Action"
  }
}
반대로 CDK는 TypeScript, Python, 자바, 자바를 통해 클라우드 자원을 설명할 수 있습니다.Net(현재 더 많을 수 있음?)!
import * as ec2 from '@aws-cdk/aws-ec2';
import * as iam from '@aws-cdk/aws-iam';
import * as cdk from '@aws-cdk/core';

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

    // ... rest

    // 👇 create the EC2 Instance
    const ec2Instance = new ec2.Instance(this, 'ec2-instance', {
      vpc,
      vpcSubnets: {
        subnetType: ec2.SubnetType.PUBLIC,
      },
      role: webserverRole,
      securityGroup: webserverSG,
      instanceType: ec2.InstanceType.of(
        ec2.InstanceClass.T2,
        ec2.InstanceSize.MICRO,
      ),
      machineImage: new ec2.AmazonLinuxImage({
        generation: ec2.AmazonLinuxGeneration.AMAZON_LINUX_2,
      }),
      keyName: 'ec2-key-pair',
    });
  }
}
Terraform의 TypeScript 예입니다.
두 솔루션 간의 차이점은 다음과 같습니다.

  • Terraform은 지원되는 클라우드 공급자에 배치할 수 있지만 CDK는 AWS에서만 작업할 수 있도록 설계되었습니다. (이 제한을 깨기 위한 도구가 존재하지만, 이것은 본고의 목표가 아닙니다.)
  • CDK는 CloudFormation 템플릿과 창고에 의존하기 때문에 인프라 시설의 상태는 CloudFormation 창고에 직접 저장된다(로컬 json 파일이나 S3 bucket,Terraform의 고전적인 해결 방안이 아닌)
  • 이것은 당신에게 다음 중요한 개념인 구조!

    여기 있다 무엇이 구조입니까?


    시작 :

    Constructs are the basic building blocks of AWS CDK apps. A construct represents a "cloud component" and encapsulates everything AWS CloudFormation needs to create the component.


    하나의 구조 뒤에서 기본적인 클라우드 자원을 관리하는 것을 고려할 수 있습니다. 이것은 복잡성을 더욱 쉽게 처리할 수 있도록 도와 줍니다. 아주 적은 줄만 있으면 됩니다.
    예를 들어 AWS Documentation 우리는 몇 줄 코드에서 구조를 어떻게 사용하는지 볼 수 있다ApplicationLoadBalancedFargateService.
    const loadBalancedFargateService = new ecsPatterns.ApplicationLoadBalancedFargateService(stack, 'Service', {
      cluster,
      memoryLimitMiB: 1024,
      cpu: 512,
      taskImageOptions: {
        image: ecs.ContainerImage.fromRegistry("amazon/amazon-ecs-sample"),
      },
    });
    
    이 객체는 다음을 작성합니다.
  • ECS 작업 정의
  • Fargate
  • 기반 ECS 서비스
  • 어플리케이션 로드 밸런서
  • VPC를 제공하면 ECS 클러스터를 생성할 수도 있습니다.따라서 8줄만 있으면 4~5개의 AWS 리소스를 만들 수 있습니다!

    여기 있다 SST에서 제공하는 아키텍처


    앞에서 말한 바와 같이 SST는 CDK를 바탕으로 하기 때문에 본질적으로 모든 CDK 개념을 사용했고 구조를 포함한다.
    첫 번째 예는 사용Api 대상입니다. 이것은 사용 가능한 가장 기본적인 SST 구조일 수 있습니다!프레임워크에서 가장 중요한 구조를 살펴보고 프레임워크가 어떻게 당신을 돕는지 알아보겠습니다.

    를 클릭하여 전체 목록을 획득하세요!)

    여기 있다 응용 프로그램 프로그래밍 인터페이스


    const api = new Api(this, "Api", {
      routes: {
        "GET  /notes": "src/list.main",
        "POST /notes": "src/create.main",
      },
    })
    
    가장 간단한 방법은 API HTTP 끝점을 매우 빠르게 선언하는 것입니다.그것은 고전적인 서버 없는 프레임워크를 모방했다.자세한 비교는 내 를 참조하십시오.

    인증


    import { Auth } from "@serverless-stack/resources";
    
    const auth = new Auth(this, "Auth", {
      cognito: true,
    });
    
    Auth에서 응용 프로그램, API...AWS 서비스: Cognito User Pool를 기반으로 합니다.
    그런 다음 권한을 관리할 수 있습니다.
    auth.attachPermissionsForAuthUsers([
      api,
    ]);
    
    auth 개체의 인증된 사용자는 개체가 선언한 API 엔드포인트에 액세스할 수 있습니다Cognito Identity Pool. 이를 위해서는 API가 필요합니다. 기본적으로 API는 안전하지 않으며 모든 사람이 사용할 수 있습니다.

    온당하다 탁자.


    구성은 DynamoDB 테이블을 처리합니다.
    import { Table, TableFieldType } from "@serverless-stack/resources";
    
    const table = new Table(this, "Notes", {
      fields: {
        userId: TableFieldType.STRING,
        noteId: TableFieldType.STRING,
      },
      primaryIndex: { partitionKey: "noteId", sortKey: "userId" },
    });
    
    그런 다음 api 객체의 Lambda 함수를 테이블에서 읽기/쓰기를 허용하려면 api 속성 지정을 사용해야 합니다.
    new Api(this, "Api", {
      defaultFunctionProps: {
        permissions: [table],
      },
      routes: {
        "GET  /notes": "src/list.main",
        "POST /notes": "src/create.main",
      },
    });
    

    탁자. 반응성 사이트


    는 SST 응용 프로그램에 전방 응용 프로그램을 포함할 수 있는 매우 간결한 구조입니다!
    SST 프로그램에 permissions 폴더와 클래식ReactJs 프로그램이 있다고 가정하십시오.SST 스택에 다음을 추가합니다.
    const site = new ReactStaticSite(this, "ReactSite", {
      path: "frontend/",
    });
    
    이 세 줄 코드는 다음 작업을 수행합니다.
  • 프런트엔드 파일을 호스팅할 S3 스토리지 통을 만듭니다
  • .
  • 전면 CDN
  • 을 관리하는 CloudFront 배포를 만듭니다.

  • 어플리케이션 배포frontend/
  • 시 ReactJs 어플리케이션 구축

  • S3 전용 스토리지 통으로 ReactJs 애플리케이션 구축 버전 밀어넣기

  • CloudFront 배포를 무효화(CDN에 있는 기존 캐시 데이터 활용)
  • 너도 ReactStaticSite 또는 StaticSite 구조 뒤의 힘을 상상할 수 있다😅

    다음 정거장 ReactStaticSite를 사용하여 환경 변수 처리


    일반적으로 API의 URL 끝점, Cognito 사용자 풀 Id 등을 공유하기 위해 ReactJs 응용 프로그램에서 몇 가지sst deploy 변수를 사용합니다.이를 실현하는 고전적인 방법은 ReactJs 응용 프로그램의 루트 단계에서 REACT_APP_* 파일을 만드는 것이다( ReactApp 문서를 만드는 데 사용한다)
    SST는 더 이상 파일을 흐트러뜨리지 않고 이 문제를 처리하는 데 매우 효과적인 방법을 제공했다.먼저 .env 구조의 변수를 다음과 같이 정의합니다.
    new ReactStaticSite(this, "ReactSite", {
      path: "path/to/src",
      environment: {
        REACT_APP_API_URL: api.url,
        REACT_APP_USER_POOL_CLIENT: auth.cognitoUserPoolClient.userPoolClientId,
      },
    });
    
    그리고 here 환경과 결합(이것은 나의 다음 문장이 될 것이다!)SST live 정보를 사용하여 로컬 React 애플리케이션을 시작할 수 있습니다!
    ReactJs 응용 프로그램에 다음 패키지를 추가합니다.
    npm install --save-dev @serverless-stack/static-site-env
    
    .env에서 스크립트 변경ReactStaticSite:
    "scripts": {
      "start": "sst-env -- react-scripts start",
      "build": "react-scripts build",
      "test": "react-scripts test",
      "eject": "react-scripts eject"
    },
    
    이 기능에 대한 자세한 내용은 Live Lambda Development를 참조하십시오.

    특수 문서 결론


    SST 프레임워크에 대한 두 번째 기사는 이것으로 끝냅니다.나는 당신이 틀이 제공하는 모든 구조 배후의 힘을 더욱 잘 이해할 수 있기를 바랍니다.막후 팀은 매우 활발하여 자주 새로운 기능을 발표한다.몇 달 전, 나는 자신에게 "어떤 정적 사이트가 SST에 끼워 넣을 수 있다면 정말 신기하다."라고 말한 것을 기억한다.그리고 알았어 😱.
    다음 리소스만 확인하면 됩니다.

  • v0.33.0 업계 최고 수준

  • documentation, 서버 프레임워크 없음
  • 과 비교한 예가 많음
    이 시리즈의 다음 회에서, 나는 이 프레임워크의 로컬 개발 특성을 소개할 것입니다. 당신은 이 프레임워크가 발표될 때 통지를 받을 수 있습니다.

    좋은 웹페이지 즐겨찾기