GraphQL 和全栈无服务器时代的基础设施即代码

2025-05-25

GraphQL 和全栈无服务器时代的基础设施即代码

过去,我们可以克隆一个客户端应用程序,然后在浏览器或移动模拟器中启动它。如今,我们可以利用“基础设施即代码”的新范式来克隆和部署全栈应用程序,该范式允许我们同时部署前端和后端代码

GraphQL 正在改变应用程序的构建方式。基础设施即代码尤其适合 GraphQL 应用程序,因为我们可以随着时间的推移塑造和发展我们的数据模型,从而允许开发人员以全新且令人兴奋的方式构建、协作和部署应用程序。在本文中,我将向您展示前端开发人员和云计算新手如何开始利用这种模式。

要查看 Amplify IAC 的实际示例,请观看此视频


云计算最强大的优势之一是能够基于配置文件部署云和无服务器资源,业界称之为基础设施即代码(IAC)。

作为一名传统的前端开发人员,我偶尔会构建和部署后端资源(如数据库、服务器和身份验证机制),我总是习惯于点击管理面板、挖掘 SSH 并编写一堆样板来设置我的 API(并且通常会花费大量时间来这样做)。

当我得知开发人员能够在短短几分钟内部署整个技术堆栈时,我感到震惊,并想知道为什么这在前端开发人员社区中不是什么大事。

事实证明,这并不容易。配置完成后,以这种方式部署很容易,但编写和管理此配置通常需要对云计算有所了解的人。像我这样的前端和云计算新手,即使是部署最简单的资源也会不知所措。现在情况已经不同了。

现代工具

好消息是,工具已经得到改进,前端开发人员和刚接触云计算的开发人员可以越来越轻松地使用这种类型的基础设施。

无服务器技术尤其适合这种模式,因为我们首先需要部署的基础设施要少得多。这降低了整体复杂性,从而有机会降低学习曲线,并使更大的开发者社区能够利用云计算提供的规模和机遇。

无服务器框架

以无服务器框架为例。与传统的 IAC 工具(例如 AWS CloudFormation)相比,无服务器框架引入了一种更简单的抽象,允许开发人员只需担心最必要的配置,然后框架会通过在底层使用 CloudFormation 来部署基础设施来处理其余部分。

如果您曾经创建过无服务器项目,您可能会获得serverless.yml作为样板的一部分创建的如下基础文件:

service: testproj
provider:
  name: aws
  runtime: nodejs10.x
functions:
  hello:
    handler: handler.hello
Enter fullscreen mode Exit fullscreen mode

它的一大优点是,您只需从命令行几个步骤即可部署无服务器函数。一旦您熟悉了框架和您选择的云提供商,您还可以部署其他资源,例如数据库、身份验证和存储。

唯一的缺点是,一旦你完成了“hello world”类型的项目,你必须深入研究或熟悉 AWS / Azure / GCP,才能了解其工作原理。

AWS 云开发套件 (CDK)

虽然 YAML 或 JSON 形式的配置肯定被视为基础设施即代码,但CDK引入了一种新的基础设施即代码形式。CDK 允许您使用实际的编程语言(例如 Typescript、Python、Java 或 .NET)声明您的基础设施。

例如,如果您想部署 S3 存储桶,您可以编写以下代码并部署:

import core = require('@aws-cdk/core');
import s3 = require('@aws-cdk/aws-s3');

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

    new s3.Bucket(this, 'MyFirstBucket', {
      versioned: true
    });
  }
}
Enter fullscreen mode Exit fullscreen mode

CDK 正在迅速普及,前景光明。同样,与许多其他 IAC 工具一样,它的缺点是,一旦掌握了基础知识,就必须对 AWS 有所了解。

基础设施即代码的演变

业界正持续见证托管服务和工具的爆炸式增长,这些服务和工具促进了云计算和无服务器计算的发展。这些新工具越来越容易获得,并且面向新开发人员和那些自认为是前端开发人员的人士。

考虑到那些已经具备云技术并使用云技术的开发人员可能对学习“另一种方式”来做他们已经熟悉的事情不感兴趣,这种想法是有道理的。另一个原因是,有大量自认为是前端开发人员甚至全栈开发人员的开发人员尚未采用云技术。

这些开发人员该如何开始采用并充分利用 IAC?在软件工程的大多数领域,随着时间的推移,通过更好、更复杂的抽象,事情会变得越来越简单。

在移动开发领域,我们现在可以使用 React Native、Flutter 和 Xamarin 等工具和框架,使用单一编程语言构建跨平台应用程序。借助 React、Vue 和 Angular,我们无需直接处理 DOM,可以直接在浏览器中构建复杂的应用程序。云计算使开发人员能够足不出户地配置和拆卸无数服务器。

基础设施即代码 (IAC) 也面临同样的问题。借助AWS Amplify等工具,IAC 会在您构建应用程序时自动为您预置,无需您进行任何额外工作。您可以随时自行共享和重新部署这些资源,也可以与其他开发者共享,以便在他们的账户中部署。

这为许多有趣的机会打开了大门,包括代码共享和重用的新范式,以及为前端开发人员和云计算新开发人员提供的分布式系统开发的切入点。

基于类别的方法和放大 IAC

AWS Amplify 的目标之一是允许开发人员无需对其创建的底层基础设施有深入的了解即可开发和构建云应用程序。Amplify 采用基于类别的方法:需要身份验证?amplify add auth需要 API amplify add api

在设置或使用这些服务的过程中,您无需了解或提及任何底层服务名称。您可能不知道的是?项目创建完成后,在您构建过程中,Amplify 会在后台生成此基础设施即代码 (IaaS)。amplify项目中的文件夹是您云资源在应用程序生命周期的任何给定时间点的当前且可重现的快照。您可以随时共享和重新部署您正在使用的当前堆栈(无论是在您的帐户中,还是在其他人的帐户中共享)。

在过去的一年里,我们一直在开发开源项目,让开发者能够部署利用 Amplify IAC 的预构建全栈无服务器应用程序。Conference App in a BoxAWS AppSync ChatHype BeatsSpeaker Chat等项目可以通过单击(Web)或通过类似命令(移动/React Native)进行部署。

使用预配置的 Amplify IAC 项目,您可以为常见应用程序(如聊天应用程序、带路由的复杂身份验证以及仪表板等实时实现)提供一个起点。

许多 Amplify 项目使用 GraphQL 作为数据提供者,允许您通过更新 GraphQL 模式并使用单个命令重新部署来轻松修改数据结构。

应用开发完成后,您将获得所有可用资源的代码。您可以根据自己的需求,使用代码进行测试、共享、开源或开展业务。

GraphQL 和 IAC

以我最近发布的一款应用“Conference App in a Box”为例。这是一款可配置、可主题化、可立即投入生产的移动应用程序,可用于部署到各种活动和会议中。

让我们看一下演讲的基本 GraphQL 模式:

type Talk @model {
  id: ID!
  name: String!
  speakerName: String!
  speakerBio: String!
  time: String
  timeStamp: String
  date: String
  location: String
  summary: String!
  twitter: String
  github: String
  speakerAvatar: String
  comments: [Comment] @connection(name: "TalkComments")
}
Enter fullscreen mode Exit fullscreen mode

当你克隆并部署此应用程序时,它假设数据结构将如上所示。但是考虑到你可能还想为设计会议添加一个 Dribbble 个人资料?

您可以使用两行代码轻松修改整个应用程序:一行用于更新架构以添加 Dribbble 字段,另一行用于在移动应用程序中呈现该字段。

该模式可以发展以匹配其他应用程序,这意味着您可以将此基础架构从应用程序中取出并将其部署到另一个平台或另一个应用程序。

我已经与数十位会议组织者进行了沟通,他们都打算采用这款应用,因为它能节省大量时间和金钱。许多组织者已经花费了数千甚至数百美元来复制这款应用的功能,而且这些功能只需几分钟即可完成部署。

尝试一下

如果您有兴趣尝试一下,请查看以下项目之一并按照文档中的步骤操作:

  1. 盒装会议应用程序
  2. AWS AppSync 聊天
  3. AWS Amplify Auth Starters
  4. 演讲者聊天

未来

在未来,我设想将出现一种新的全栈无服务器应用程序存储库,它们将利用这种类型的 IAC,不仅来自 AWS,而且我预测其他云提供商和公司也会效仿。

随着前端和后端开发之间的界限变得越来越模糊,我们将看到越来越多的工具出现,抽象出曾经复杂的后端和云技术。

我叫Nader Dabit。我是 Amazon Web Services 的开发倡导者,负责AWS AppSyncAWS Amplify等项目。我专注于跨平台和云端应用程序开发。

文章来源:https://dev.to/dabit3/infrastruct-as-code-in-the-era-of-graphql-and-full-stack-serverless-11bc
PREV
JavaScript 中使用扩展运算符的 10 种方法
NEXT
初探 Remix.run