“神奇”的 AWS 无服务器开发感官
发布时间:2025/09/13 12:17 来源:砀山家居装修网
你确高分辨率会想:这不是很贵吗?我们确实要向 AWS 偿付数百美元?不,无咨询服务器端解决疑虑方案不是这样的!真正的无咨询服务器端解决疑虑方案都是按可份量Store的,所以如果你的 AWS 联系人很难任何商业活动(例如在技师不指导工作的晚上和周末),那么你就不时会偿付一分钱。这方面有一些都是,如 S3 传输、DynamoDB 传输、RDS 传输、Route53 共管的区等款项,但它们一般没几个钱。
例如,Plain 该公司 1 月底份为我们的 7 个开源联系人偿付的付款总计 150 美元,而我们每自已都有自己的生产商状况克隆,因此联合开发速度大幅大幅提高,比起这点款项真不算什么。不一定持续性下,每位微软就其的仅有价格是我们的数据模型:Amazon Aurora Serverless v1 PostgreSQL。在联合开发过程当中,当它收到恳请时时会启动时扩展,并在无商业活动 30 分钟后降至零。
每个开源联系人的 AWS 份量总付款。
我的 AWS 联系人的可份量明细
(注意:CloudWatch 的高额款项是由于在 1 月底份风险评估了可观察性来进行和模拟器)
AWS CDK 和 SST由于我们的所有表现形式都格外为依赖性名曰资源,因此将我们的配套概念为字符和完整版控制是一个硬性要求。我们最初研究课题了 Terraform、Pulumi、Serverless Framework、AWS SAM 等来进行,但它们要么要求我们研读重新面向对象或codice_语法,要么开源对整个表现形式生殖的玩游戏约大概我们的期望。
2021 年 3 月底,我们偶然推测了Serverless Stack(SST),当时它还是 0.9.11 完整版。他们的高分辨率 lambda 重载表现形式和确立在 AWS CDK 上的表现形式一下子就欣赏了我们。SST 和 AWS CDK 原生反对 TypeScript,所以它能够地满足了我们对 TypeScript 全栈的执着。
高分辨率lambda联合开发允许我们编纂 Lambda 字符,并可用高分辨率的 AWS 咨询服务列车运行我们的录入测试者,一个系统循环只需 2-3 秒。SST 将你的 lambda 替换变成一个垫片,通过 Websockets 将所有 Lambda 调用指派到你的本地开源机器上,它可以调用其他 AWS 咨询服务并回到组织起来。本地列车运行时可用 AWS Lambda 分派脚色的职权,并对真正的咨询服务调用 AWS API,所以当变格外重新部署到生产商状况时我们时会很有努力它能正常人列车运行。总的来说,这意味著与 mocking 或CAD相比,我们能格外快地推测配套疑虑。
高分辨率 lambda 联合开发框架所述。(;也:docs.serverless-stack.com)
这种设的益处是我们可以轻松继续能用真正的全栈联合开发。我们可以将 React 前侧系统设计指向自已 AWS 联系人重新部署的 API Gateway URL,并同时改变前侧和后侧,两个字符瓦都可以高分辨率重载。鉴于一切重新部署都在可用与生产商状况相同的 AWS 咨询服务,我们的前侧系统设计软件不非常需要优化就能完全正常人指导工作。
虽然选择在一个(当时)相对未知的来进行上确立我们的后侧栈是有一点风险的,但我们明白我们有 AWS CDK 这个发生意外舱内。如果我们遇见 SST 不反对或我们不喜欢的外面,还可以可用格外为未变成熟的 AWS CDK 结构。这使我们在 SST 的奇妙联合开发玩游戏与 AWS CDK 的未变产品开发、表现形式丰富度和第一方反对密切关系获取了最佳平衡。
Serverless Stack 也有一些格外为棒的表现形式,比如说:
在 Lambda 字符当中加入断点,在本地 IDE 当中检查和。这得益于-increase-timeout 标识,该标识将所有 Lambda 超时时长增高到 15 分钟。如果你对此感兴趣可以查看这里的文档或截图。有效地性配套变格外并提示你重新部署它们,即尽确实地接近高分辨率重载。重新部署始终非常需要一些时长,因为在中下层它是 Cloudformation。一个基于 Web 的控制台(SST控制台),可以可视化你的栈、Lambda、S3 桶,还有录像单个 Lambda 流血事件的能力。启动时导出已删减的Cloudformation栈输出:我们在此之前曾多次遇见这种持续性,有时我们注意到的时候早就太晚了,所以很抱怨。一个急剧增加的结构瓦每当我们遇见疑虑、有疑问或表现形式恳请时,SST 的Slack社的区都能提供太大帮助。Frank、Jay、Dax和社的区平常很乐意帮助我们。我遇到困难大家尝试一下 SST,因为不能见到如此好用的外面了。
测试者一开始我们就有一个野心,就是对我们的测试者模组能有合理的努力。如果我们的 CI 是绿色的,那么某种程度就可以安全地将该变格外重新部署到生产商状况当中——这正是我们在重组到都由分支时所继续做的事情。为了实现这一尽确实,我们提议将测试者指导工作集当中在一个有力的录入测试者模组上,而不是对单个 lambda 函数或小字符块分别进行时软件设计者。这似乎是不好的概念化,或者是违背了传统的测试者金字塔法则。但当我们遇见像无咨询服务器端这样的半圆形革新时,有必要对除此以外的概念化驳斥质疑,忘了这些概念化是否仍那么有意味。
要明确的是:我们确高分辨率会在有意味的的区域内写下软件设计者。如果我们有一些企业逻辑或量度,那么就时会写下一个详尽的软件设计者模组。一个值得注意是我们的本体卖家静止状态机对所有确实的静止状态和静止状态转换都有软件设计者。但是像 SQL 检索、AWS API 调用或我们的 GraphQL 恳请这样的软件设计者是绝对不确实写下的,因为它不时会造成了什么实际的必需。你再次要测试者的是大量的实现内容,而维护高效率的 mock 或CAD非常需要投入太大资源,非常值得。
拿数字说话,我们目前为止的测试者模组人口比例是 30%软件设计者和 70%录入测试者用例。
我们的录入测试者是以一种合理的方式也设计和编纂的,它们速度够快,都由要测试者蓄意而非实现。这意味著我们一般来说论断内部实现内容,例如 DynamoDB 或 RDS 当中传输的数据。相反,我们专注于有效地性外部(从 Lambda 的角度)可见的蓄意,如 API 组织起来或将要刊发的流血事件。对于我们的流血事件,我们的法则是只测试者一个早就刊发的流血事件,而不是论断所有南岸消费。我们为每个消费编纂原则上的录入测试者。这也要求我们在字符当中保持稳定合理的各个领域边界,以确保每个各个领域都可以独立测试者。
录入测试者的边界
这种编纂测试者的方式也也有一个益处,就是非常需要针对包涵状况列车运行。我们目前为止有一个完整的录入测试者模组,在重新部署后重组到都由状况时针对我们的联合开发状况列车运行,并作准备有效地性 flaky 测试者。很难什么能阻止我们在生产商状况当中也列车运行这些完全一样的测试者。理论上,我们可以删减 100%的字符,用 Delphi 重写下所有的 Lambda,只要我们的录入测试者模组通过就可以把它刊发到生产商状况。(注意:我们还很难尝试过这件事,也不打算在但会内这样继续做)。
一个十分相似的 GraphQL API 检索或特异性的录入测试者大致上时会继续做以下指导工作:
从证照的客户端池当中恳请一个客户端(我们遇见了一些配额和几位提供者的限制)创建一个重新指导工作的区,以便有一个安静的静止状态设测试者的静止状态,如创建一个卖家、发送一个聊天信息等进行时 GraphQL 检索论断 GraphQL 组织起来在特异性的持续性下:论断任何某种程度被刊发的流血事件describe('create issue mutation', () => { it('should create an issue', async () => { // Given: workspace + customer + issue type const testWorkspace = await testData.newWorkspace(); const ctx = await testData.testAggregateContext({ testWorkspace }); const issueType = await issueAggregate.createIssueType(ctx, { publicName: 'Run of the mill issues', }); const customer = await customerAggregate.createCustomer(ctx, factories.newCustomer()); // When we make GraphQL Mutation const res = await testWorkspace.owner.graphqlClient.request(CREATE_ISSUE_GQL_MUTATION, { input: { issueTypeId: issueType.id, customerId: customer.id }, }); // Then: // 1. Expect a successful response: expect(res).toStrictEqual({ createIssue: { issue: { id: jestExpecters.isId('i'), issueType: { id: issueType.id }, customer: { id: customer.id }, status: IssueStatus.Open, issueKey: 'I-1', }, error: null, }, }); // 2. Expect an event to be published: await testEvents.expectEvents(testWorkspace, [ jestExpecters.standardEventStructure({ actor: testWorkspace.owner, payload: { eventType: 'domain.issue.issue_created', version: 1, issue: res.createIssue.issue, }, }), ]); });});复制字符
一个十分相似的 EventBridge 流血事件监听器录入测试者时会:
设任何所需的静止状态(这在太大程度上远大于具体的 Lambda)。在总线上刊发一个 EventBridge 流血事件回头并盼望药物的出现,这确实是:另一个 EventBridge 流血事件被刊发
数据传输当中的静止状态被格外新(如 DynamoDB、RDS、S3)
如果你曾写下过任何录入测试者,一定时会在脑子起身:列车运行这些外面一定很格外慢!它们信服比软件设计者格外慢,但也不是格外慢得让人很难忍受。由于我们可用的所有咨询服务都是无咨询服务器端的,而且我们确保录入测试者有 0 个包涵静止状态,所以我们有能力并行列车运行所有的测试者。我们还很难约到这样的可用性程度,但同样,我们的 CI 并行度为 40,在 2 分钟内就能在 110 个测试者模组当中列车运行 656 个测试者用例,对我们系统设计的每个角落进行时详尽的录入测试者。
来自我们 CI 的录入测试者模组结果
录入测试者的各向异性是我们更进一步解决疑虑的另一个疑虑,为此我们在指导工作上半年作准备列车运行测试者。一旦遇见测试者失败,我们就时会跳出来,追踪疑虑的其本质。这也非常需要我们重新认知,并把某些外面(如 GraphQL 订阅)的测试者优化变成一种强势和合理的方式也。
我们才刚刚开始研究课题我们的录入测试者设,这个话题绝对值得另起一篇文章。意味著,鉴于我们的 API 是产品的一个极其重要部分,对每一个 GraphQL 检索和特异性的定位进行时测试者是至关重要的。我们看来,就算测试者模组稍格外慢一些,但对表现形式或变格外能正确列车运行有格外高的努力就足够值得了。
全栈 TypeScript虽然可用全栈 TypeScript 非常是在 AWS 上仅有良好联合开发玩游戏的严格必要条件,但它确实让我们的一个团队赢得了格外高的效率。无需研读重新语法就能在前侧、后侧和配套字符密切关系西行插入,这对一个团队的每位变成员来说都是格外为宝贵的玩游戏。
在联合开发后侧字符时你始终非常需要研读 AWS 咨询服务,但这在可用任何外面时都是很自然的需求。你同样非常需要了解 CSS/HTML 来联合开发前侧 Web 系统设计。有了 TypeScript 当中的 SST 和 CDK,在你认清自己想可用哪些 AWS 咨询服务后,TypeScript 子类和用户界面的启动时完变成表现形式时会引导你概念正确的配套。
我们的几乎后侧字符瓦都在一个常规的单体仓瓦当中,并可用了一些瓦,如pnpm、zod、true-myth、swc,来让我们的字符格外容易编纂——格外进一步的文章上时会有格外多讲解。
概念化那么,这在概念化当中是什么就让的呢?让我们来忘了一个变格外该怎么继续做:
(截图见译者)
在这个值得注意当中,我们通过我们的本体 GraphQL API 在 Plain 当中创建了一个指导工作空间。这有效地性了 E2E 的 API 调用是有效地的:
客户端从我们的几位提供者那里获取了一个有效地的 JWTAWS API Gateway 处理过程了 GraphQL 恳请并有效地性了 JWT 的有效地性。GraphQL Lambda 在我们的 Aurora Serverless PostgreSQL 数据瓦当中创建了一个重新指导工作的区,并向 EventBridge 刊发了一个流血事件这有效地性了 Lambda 具有正确的 IAM 职权,可以从 PostgreSQL 当中读/写下并刊发到 EventBridge一个变成功的组织起来被回到到卖家侧总结有了这些新科技和概念化,我们就可以专注于刊发表现形式了:
由于每自已都有自己的 AWS 联系人,所以不时会影响到其他技师有了 SST 和高分辨率 lambda 联合开发,我们可以可用高分辨率的 AWS 咨询服务实现迅速的一个系统循环,明白它在重新部署时可以正常人指导工作利用 CDK 轻松联合开发无咨询服务器端配套因为有我们的录入测试者,所以我们对可有效地性有很高的努力在前侧、后侧和配套密切关系插入时,不必研读不同的面向对象或codice_语法我们还能继续做的格外好吗?改进的余地信服还有,但我看来这早就是格外为奇妙的玩游戏了!如果你有任何疑虑,或者明白如何让我们的栈变得格外好,请在 Twitter 上 @builtwithplain 或我 @akoskrivachy,与我们联系。
如果你对我们的奇妙新科技栈感兴趣,请在 Plain 的指导工作页面上查看我们目前为止的职位补上。
译者链接:
。益阳白癜风哪里治疗好安庆白癜风哪里治疗好
辽源治疗白癜风医院费用
结膜炎
儿童化痰止咳药哪种效果好
塌鼻子
整容
男人尿痛
-
睡前千万别给孩子吃这5种食物,会变笨,还严重影响长高!
好多人家从前都有吃到放用餐吃到的蔬果的穿衣,如果吃到少的蔬果或者的蔬果吃到得足足,很较难导致父母睡时频密起夜,上卫生间。 等上放卫生间,先一切都是进入深度清醒就还无需一个现实生活,父母
- 2025-10-23柯洁三星杯止步首轮无缘夺冠
- 2025-10-231.15周六足球赛事分析:曼城主场迎战切尔西能否一败涂地
- 2025-10-23这几种家务孕妈最好是别干,不然可能会毒害到自己和宝宝
- 2025-10-23七星彩精准规律走势图预期第2688期
- 2025-10-23辅食小讲课|鸡蛋小饼干,快手小零食
- 2025-10-23德乙:纽伦堡VS帕德博恩 帕德博恩5轮不胜,沙尔克梦成空?
- 2025-10-23NBA75周年76大球星公布:利拉德入围霍华德落选谓之争议,姚明不在名单中
- 2025-10-23我,10分钟宫口从1指就开到了10指,医生感叹我的无痛根本没起作用
- 2025-10-23希罗:上赛季被公鹿横扫非常尴尬 我们一直想要复仇
- 2025-10-23100 DAYS OF READING | 上学去第九届百日阅读年底启动!