SST: 당신이 발견해야 할 가장 과소평가된 서버 없는 프레임워크 (두 번째 부분)
9993 단어 awscdkserverlesssst
따라서 서버 없음 원칙을 사용하여 구축을 시작했고 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에서만 작업할 수 있도록 설계되었습니다. (이 제한을 깨기 위한 도구가 존재하지만, 이것은 본고의 목표가 아닙니다.)
여기 있다 무엇이 구조입니까?
시작 :
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"),
},
});
이 객체는 다음을 작성합니다.여기 있다 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/",
});
이 세 줄 코드는 다음 작업을 수행합니다.어플리케이션 배포
frontend/
S3 전용 스토리지 통으로 ReactJs 애플리케이션 구축 버전 밀어넣기
CloudFront 배포를 무효화(CDN에 있는 기존 캐시 데이터 활용)
다음 정거장 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, 서버 프레임워크 없음
이 시리즈의 다음 회에서, 나는 이 프레임워크의 로컬 개발 특성을 소개할 것입니다. 당신은 이 프레임워크가 발표될 때 통지를 받을 수 있습니다.
Reference
이 문제에 관하여(SST: 당신이 발견해야 할 가장 과소평가된 서버 없는 프레임워크 (두 번째 부분)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/julbrs/sst-the-most-underrated-serverless-framework-you-need-to-discover-part-2-jnc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)