使用 Serverless 架构构建基于 Twitter 数据的监控系统

在现代社交媒体时代,Twitter 已经成为全球最流行的社交媒体之一,每天数以百万计的用户发布消息。对于企业而言,监控 Twitter 上与自己相关的消息非常必要,以便能够实时了解消费者的反馈和需求。

在这篇文章中,我们将介绍如何使用 Serverless 架构搭建一个基于 Twitter 数据的监控系统。我们将使用 AWS Lambda,DynamoDB,API Gateway 和 Twitter API 来实现。这个监控系统将会对指定关键字进行监控,并将匹配到的消息存储在 DynamoDB 中。同时,我们将向用户提供一个 API 服务来查询存储的消息。

准备工作

在开始建立这个监控系统前,我们需要进行下面几步准备工作:

  1. 创建 Twitter 应用并获取 API key 和 API secret。
  2. 安装 AWS CLI 并配置 AWS 认证信息。
  3. 安装 Serverless Framework。
--- ------- -- ----------

构建监控系统

创建 DynamoDB 表格

首先,我们需要创建一个 DynamoDB 表格来存储 Twitter 消息。运行下面的命令来创建表格:

--- -------- ------------ ------------ ---------------- ----------------------- ---------------------------------------- ------------ ------------------------------------- ------------------------ ----------------------------------------

这会创建一个名为 twitter-messages 的 DynamoDB 表格,并用 message_id 作为主键来存储消息。

编写 Lambda 函数

接下来,我们将编写 Lambda 函数来监视 Twitter 上的指定关键字,并将匹配到的消息存储在 DynamoDB 中。

serverless.yml 中添加以下配置来创建 Lambda 函数:

----------
  --------
    -------- ---------------
    ------------
      --------------------- ---------------------------
      ------------------------ ------------------------------
      ------------------------- -------------------------------
      ---------------------------- ----------------------------------
      --------------- ----------
    -------
      - ---------
          ----- ------ -------

在这个 serverless.yml 配置中,我们定义了一个名为 monitor 的 Lambda 函数。该函数的 handlerhandler.monitor,我们将在后面实现。

environment 这个属性中,我们设置了 4 个 Twitter API 需要的环境变量。这些值可以从 Twitter API 控制台中获得。我们还定义了 TRACK_KEYWORDS 变量,指定我们要监视的关键字。

events 这个属性里面,我们定义了该函数需要在 1 分钟的频率下运行。

接下来,我们需要实现 handler.monitor,这个函数将会使用 Twitter API 获取 Twitter 上最新的消息,并将匹配到的消息存储到 DynamoDB 表格。

----- --- - -------------------
----- ------- - -------------------

----- ------ - --- ------------------------------

----- -------- --------- -
  ----- ------- - --- ---------
    ------------- ---------------------------------
    ---------------- ------------------------------------
    ----------------- -------------------------------------
    -------------------- ----------------------------------------
  ---

  ----- ------ - ---------------------------

  ----- ------ - ----- ---------------------------- - -- ------- ------ --- ---

  ----- ----- - ---

  --- ------ ----- -- ---------------- -
    ----- - ------- ---------- - - ------

    ----- --------- - ----- ------------
      ---------- -------------------
      ---- - ---------- --
    -------------

    -- ----------------- -
      ----- - ----- ------------- ----------- ------------------ - - ------

      ----- ------------
        ---------- -------------------
        ----- -
          -----------
          -------------
          -------------------
        --
      -------------

      ------------------
    -
  -

  ------ ------
-

-------------- - - ------- --

在这个函数中,我们使用了 Twitter API 获取了最新的 100 条消息,按照关键字过滤出需要的消息。然后,我们使用 dynamo.put 函数添加这些消息到 DynamoDB 表格中。

添加 HTTP API Gateway

接下来,我们将使用 Serverless Framework 来添加一个 HTTP 服务,允许用户通过 API 查询存储在 DynamoDB 中的 Twitter 消息。

serverless.yml 中添加以下配置来创建 HTTP API Gateway:

---------
  -----------
    ---------- ----------
    ---------------------- ----------
    --------------------------- ----

----------
  ----------
    ----------------------------
      ----- ---------------------------
      -----------
        ---------- -------------------------------------

    --------------
      ----- -----------------------
      -----------
        ----- ---------------
        -------- ----
        ----------
          - ---------- -------------------------------------
            ---------- ----------------------

    --------------------
      ----- --------------------------
      -----------
        -------------- -----------
        ------------ --- ---- ----- --- -------
        ----------
          - ------ -------------------------------------
            ------ ----------------------

    -----------------------
      ----- -----------------------------
      -----------
        ------ ---- -------------
        -------- -------
        ------------ ---- -------------------  

    -----------------------------------
      ----- -----------------------
      -----------
        ---------- -------------------------------------
        ----------- -----------------------------------------------------
        ----------- ---
        ------------------ ----
        ------------------
          ----------------------------------- ----
        ------------
          ----- ---
          ---------------------- ----
          ---- ---- -----------------------------------------------------------------------------------------------------
          -------------------- -------------
          -----------------
            ----------------- ----------------------------- ------- ---------------------------------------------------
          ---------------------
            - ----------- ---

    --------------------------
      ----- -------------------------
      -----------
        ---------- -------------------------------------
        --------- -------------------------------------------------
        --------- -------

    ------------------------
      ----- -----------------------
      -----------
        ---------- -------------------------------------
        ----------- -----------------------------------------------------
        ----------- ---
        ------------------ ----
        ----------------
          - ----------- ---

    ---------------------------------
      ----- ----------------------
      -----------
        ---------- ----------------------
        ---------- -------------------------------------
        -------------
          ---- ---------------------------
        ---------------
          - ------------- ----
            ----------- ---
            --------------- ----
            ------------- ----
            ----------------- ----
            -------------------- ----
            --------------------- ----

----------
  --------
    -------- ---------------

这个配置文件包含了许多复杂的 AWS 资源,但是最基本的流程就是创建一个 HTTP GET 方法,将参数传递给 Lambda 函数处理,并返回结果。

部署和测试

一旦我们完成了上述配置,现在就可以使用 Serverless Framework 部署这个监控系统:

--- ------

当部署完成后,我们就可以使用以下 URL 来访问我们的 API 服务:

---------------------------------------------------

在上面的 URL 中,[API-Gateway-Endpoint] 表示您的 API Gateway 终端点,q 是必须的查询参数,用于指定要查询的关键字。

结论

在本文中,我们介绍了如何使用 Serverless 架构搭建一个基于 Twitter 数据的监控系统。我们使用了 AWS Lambda,DynamoDB,API Gateway 和 Twitter API 来实现这个系统。通过基于 Serverless 的设计,我们不仅能快速构建这个系统,还能持续运行并扩展这个系统,同时也能根据业务需要自动缩放。这个例子是如何将 AWS 云服务与 Twitter API 集成起来的一个完美例子,可以为其他类似的案例提供一个有效的参考,也能让大家了解 Serverless 技术的强大和灵活性。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/670530aad91dce0dc8524ce3