使用无服务器组件轻松部署香港服务器租用CDN

 服务器租用     |      2019-09-28 10:27:34

 

  两周前,我们发布了用于部署无服务器网站的完整解决方案,该网站在单个网站组件中支持自定义域,SSL和CDN 。从那时起,我们就基础基础架构的相关用例收到了很好的反馈,并且我们意识到需要一种独立的内容交付网络解决方案来为您的静态资产提供服务,即使它们与您的网站没有直接关系。

  今天,我们将发布零配置的无香港服务器租用CDN组件,以服务该确切的用例。就像网站组件一样,它支持安全的启用SSL的自定义域,并由AWS S3,AWS CloudFront,AWS Route53和AWS Certificate Manager支持。只能使用2行YAML部署所有组件。

  部署无香港服务器租用CDN组件

  要部署无香港服务器租用CDN组件,您需要先安装最新版本的无服务器框架(如果尚未安装)。

  npm i -g serverless

  安装完成后,请确保已在计算机中设置了AWS密钥。有关设置AWS密钥的更多信息,请参阅本指南。

  完成此操作后,您将拥有30多个无服务器组件,可以使用一个YAML文件立即进行部署。在本文中,我们将重点介绍无香港服务器租用CDN组件。要部署无香港服务器租用CDN组件,只需serverless.yml在当前工作目录中创建一个模板文件。此YAML模板文件应具有以下内容:

  myServerlessCDN:

  component: "@serverless/cdn"

  实际上,这就是部署完整的无服务器内容交付网络所需的所有YAML。您现在需要做的只是serverless在当前工作目录中运行命令:

  myApp (master)$ serverless

  myServerlessCDN:

  bucketName: 9c7hh2-f1swq5c

  region: us-east-1

  url: https://d29sqymsceo6j1.cloudfront.net

  18s › myServerlessCDN › done

  myApp (master)$

  你有它!您的无香港服务器租用CDN已部署。AWS CloudFront可能需要花费几分钟才能在边缘位置传播并完全准备就绪。发生这种情况时,您可以将第一个文件上传到CDN。只需访问AWS S3控制台,找到CLI输出中显示的存储桶(在本例中为9c7hh2-f1swq5c),然后将第一个文件上传到其中。当然,您可以从您的应用程序中以编程方式执行此操作。另外请记住,由于CDN中没有任何内容,因此访问CLI中显示的根URL可能会显示错误。

  上载第一个文件后,您可以通过在CDN上添加前缀(在CLI中看到)作为根URL,从而请求并查看该文件。在这种情况下,将是:

  https://d29sqymsceo6j1.cloudfront.net/my-first-image.png

  将自定义域添加到无香港服务器租用CDN

  就像网站组件一样,您只需一次输入即可将自己的自定义域添加到内容交付网络。

  myServerlessCDN:

  component: "@serverless/cdn"

  inputs:

  domain: cdn.example.com

  请注意,您的域(example.com在此示例中)必须已经通过AWS Route53购买并且可以在您的AWS账户中使用。对于高级用户,您也可以在其他地方购买,然后将名称服务器配置为指向AWS Route53托管区域。您如何操作取决于您的注册商。

  要部署您的自定义域,只需serverless再次运行:

  myApp (master)$ serverless

  myServerlessCDN:

  bucketName: 9c7hh2-f13wq5c

  region: us-east-1

  url: https://d29sqymsceo6j1.cloudfront.net

  domain: https://cdn.example.com

  14s › myServerlessCDN › done

  myApp (master)$

  您现在会注意到domain,CLI中有一个新输出,并且默认情况下它已启用SSL并且完全安全,因为无香港服务器租用CDN组件会通过AWS Certificate Manager自动为您创建免费证书。如果这是您第一次将域与AWS结合使用,则在证书创建和验证过程中可能要花一些时间。

  您现在可以使用此域,而不是我们之前用来访问文件的根CloudFront URL。同样,请记住,域传播可能需要几分钟:

  https://cdn.example.com/my-first-image.png

  将无香港服务器租用CDN与其他组件组合

  如前所述,无香港服务器租用CDN只是我们已经为您提供的30多个组件之一。您可能需要将此无服务器内容交付网络与应用程序的其他组件(例如,后端组件)一起使用,以便能够将文件从后端动态上传到为您创建的存储桶中。对于全栈应用程序,您的YAML文件可能看起来像这样:

  website:

  component: "@serverless/website"

  inputs:

  code:

  src: ../website

  domain: www.example.com

  backend:

  component: "@serverless/backend"

  inputs:

  code:

  src: ../backend

  domain: api.example.com

  # dynamically passing the bucket name output to the backend as an environment variable

  env:

  CDN_BUCKET: ${cdn.bucketName}

  cdn:

  component: "@serverless/cdn"

  inputs:

  domain: cdn.example.com

  请查看有关后端组件和网站组件的文档,以获取更多信息。

  在自己的自定义组件中使用无香港服务器租用CDN组件

  如果您要构建自己的自定义组件,我们还将创建一个自定义upload函数,您可以使用该函数直接将文件上传到存储桶,甚至不知道存储桶名称。这是一个有关其外观的示例:

  // serverless.js

  const { Component } = require("@serverless/core");

  class myCustomComponent extends Componetn {

  async default(inputs = {}) {

  // ...your custom component default logic here

  // load the @serverless/cdn component

  // must be in your package.json file

  const myCdn = await this.load("@serverless/cdn", "myCdn");

  // deploy your serverles CDN

  const myCdnOutputs = await myCdn({ domain: "cdn.example.com " });

  // upload a single file to your CDN

  await myCdn.upload({ file: "./assets/my-image.png" });

  // or upload an entire directory like a boss!

  await myCdn.upload({ dir: "./assets" });

  }

  }

  module.exports = myCustomComponent;

  不用说,您必须先部署无香港服务器租用CDN组件,然后才能使用该upload功能,因为该功能在状态中存储了所需的CDN数据。

  包起来

  在本文中,我们了解了如何部署零配置的无香港服务器租用CDN,以及如何使用无香港服务器租用CDN组件向其中添加自己的自定义域。我们还了解了如何通过将它与其他无服务器组件组合在一起在现有应用程序中使用此CDN组件,最后,我们演示了如何在自己的自定义组件中将该无香港服务器租用CDN组件用作子组件,以及如何利用我们向您的自定义组件公开的自定义功能,轻松地将文件和目录上传到新的无服务器内容交付网络。upload

  我们希望您会发现此无香港服务器租用CDN组件对您的应用程序有用,我们已经迫不及待地想知道您将如何使用它。如果您有任何疑问,反馈或炫耀(我们喜欢这些!),请随时直接在Twitter上与我联系。