大家好,

我们将讨论新推出的 DigitalOcean Functions - 一种实现无服务器的方式,并将创建一个 node.js 应用程序,该应用程序可以连接和存储数据到 MongoDB。使用 DigitalOcean 创建无服务器函数非常简单。

函数是按需运行的代码块,无需管理任何基础设施。在您的本地机器上开发,从命令行(使用 doctl)测试您的代码,然后部署到 App Platform — 不需要服务器。

DigitalOcean 无服务器函数

先决条件:

  • DigitalOcean 帐户-注册时免费 $100

  • 安装doctl cli

  • MongoDB 凭证(URI)

第一步:初始化

在系统中设置并安装 doctl 后。通过运行以下命令检查一切是否正常:

doctl serverless status

进入全屏模式 退出全屏模式

上面的命令应该返回如下内容:

Connected to function namespace 'fn-feb132ee-706a-4f13-9c81-f24a3330260a' on API host 'https://faas-nyc1-78edc.doserverless.co'

现在通过运行初始化项目(node-mongo-serverless 是我们这里的项目名称,您可以选择任何更喜欢的名称):

doctl serverless init --language js node-mongo-serverless

进入全屏模式 退出全屏模式

将使用以下目录结构创建项目文件夹:

node-mongo-serverless/
├── packages
│   └── sample
│       └── hello
│           └── hello.js
└── project.yml

进入全屏模式 退出全屏模式

现在我们将重命名文件并在根目录中创建一个 .env 文件,这样新的结构将如下所示:

node-mongo-serverless/
├── packages
│   └── mongodb
│       └── postData
│           └── index.js
└── project.yml
└── .env

进入全屏模式 退出全屏模式

第二步:配置

现在我们需要相应地修改project.yml文件。它将如下所示。我们需要修改包名和动作名。

targetNamespace: ''
parameters: {}
packages:
  - name: mongodb
    parameters: {}
    annotations: {}
    actions:
      - name: postData
        binary: false
        main: ''
        runtime: 'nodejs:default'
        web: true
        parameters: {}
        environment: {}
        annotations: {}
        limits: {}
environment:
  DATABASE_URL: ${MONGO_URI}

进入全屏模式 退出全屏模式

现在我们将使用 MongoDB URI 打开并修改根文件夹中的 .env 文件。

.env 文件将如下所示。 (用您自己的 MongoDB URI 替换该值。)

MONGO_URI='mongodb://myDBReader:D1fficultP%40ssw0rd@mongodb0.example.com:27017/?authSource=admin'

进入全屏模式 退出全屏模式

现在我们将一一运行以下命令:

cd node-mongo-serverless/packages/mongodb/postData
npm init -y
npm install --package-lock-only mongodb

进入全屏模式 退出全屏模式

以上命令会在node-mongo-serverless/packages/mongodb/postData目录下创建packages.json文件并添加mongodb包。

第三步:给函数添加代码

我们现在可以在我们已经拥有的 index.js 文件中创建我们的 main 函数。

先把 index.js 文件的所有内容去掉,替换成下面的代码。

const MongoClient = require('mongodb').MongoClient;

async function main() {
    const uri = process.env['DATABASE_URL'];
    let client = new MongoClient(uri);

    let data = { "name":"Arpan" };
    try {
        await client.connect();
        await client.db("namedb").collection("names").insertOne(data);
        console.log(`added ${data} to database.`);
        return { ok: true };
    } catch (e) {
        console.error(e);
        return {
            "body": { "error": "There was a problem adding the data to the database." },
            "statusCode": 400
        };
    } finally {
        await client.close();
    }
}

module.exports.main = main;

进入全屏模式 退出全屏模式

该函数会将数据添加到 MongoDB 数据库。

而已。我们现在都完成了。我们现在可以继续部署我们的功能。

第四步:部署和测试函数

我们导航到 project.yml 所在项目的根目录并运行以下命令以连接到 Serverless 命名空间。

doctl serverless connect

进入全屏模式 退出全屏模式

一旦你得到像“连接到函数命名空间”这样的肯定响应,你可以运行以下命令来部署函数。

doctl serverless deploy .

进入全屏模式 退出全屏模式

对于上述命令,您必须在项目的根目录中。您应该会看到有关部署的成功消息。

运行以下命令获取函数 API 的 URL,您可以在其中存储数据。

doctl serverless functions get mongodb/postData --url

进入全屏模式 退出全屏模式

您可以将返回的 URL 复制并粘贴到本地浏览器或邮递员或任何其他工具/包中。如果数据正确插入 MongoDB,您将收到来自 index.js 文件的响应。

希望你喜欢这篇文章。如有任何疑问,请随时在评论中提问。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐