通过Alexa查询AWS RDS

时间:2018-07-20 09:56:04

标签: php amazon-web-services aws-lambda amazon-rds alexa

我正在尝试构建一种技能,该技能将接受用户输入,基于该输入运行查询并从数据库返回一些信息。

我在AWS RDS上设置了一个数据库实例,并且这项技术可以在lambda上处理一些javascript代码,但是我正在努力链接它们。

我可以使用php文件在本地查询数据库,但不会在lambda端运行服务器

我应该重新构建php的全部技能吗?

还是将db端点添加到我的alexa技能中?在那种情况下,我将如何编码意图等

我敢肯定这必须已经完成,但是我一直在努力寻找一个可以为初学者解释的地方。

更新

所以我尝试通过aws lambda中的javascript文件对以下php文件进行ajax调用

这只是来自w3。.

<?php
$servername = "arn of database";
$username = "";
$password = "";
$dbname = "";



$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT * FROM testtable";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
        while($row = $result->fetch_assoc()) {
            echo "id: " . $row["id"]. " - Name: " . $row["name"] . "\n";
        }
    } else {
        echo "0 results";
    }
    $conn->close();
    ?>

我现在无法理解,除非代码在服务器上运行,否则我无法进行ajax调用

这使我进入节点并尝试下面的代码,但是我不确定是否甚至可以在aws lambda上运行它?

var http = require('http');

var answer = "";

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World!');


    var mysql      = require('mysql');
    var connection = mysql.createConnection({
      host     : '',
      user     : '',
      password : '',
      database : ''
    });

    connection.connect();

    connection.query('SELECT * FROM testtable', function (error, 
results, fields) {
      if (error) throw error;
      answer = results;
    });

}).listen(8080);

"use strict";

var Alexa = require("alexa-sdk");

var handlers = {
  'LaunchRequest': function() {
    this.response.speak("HIC launched. Would you like me to list all 
machines?").listen();
    this.emit(':responseReady');
  },

  'ListIntent': function () {
    // var name = this.event.request.intent.slots.answer.value;
    this.response.speak(ListPlant());
    this.emit(':responseReady');
  }
}

var ListPlant = function() {
  return answer;
};



exports.handler = function(event, context, callback){
    var alexa = Alexa.handler(event, context);
    alexa.registerHandlers(handlers);
    alexa.execute();
};

上面是我使用一个有效的lambda函数(从严格开始使用的地方)并将其粘贴到查询数据库的节点上方的结果,并将其保存在名为answer的变量中,然后再说一遍。

ATM我只是在测试连接等,因此要求Alexa回答问题,将来listPlant函数会更多

这是走正确的路吗?

还是需要放在单独的文件中?

是否需要将arn添加到技能端点?

我甚至可以在AWS中运行这样的节点吗?如果没有,我应该采用哪种方法?

我决心做到这一点,所以即使只是发布带有一些信息的链接也将受到感激

到目前为止,我发现使用的是python,这不是问题,它可以通过lambda进行ajax调用

提前谢谢! x

1 个答案:

答案 0 :(得分:0)

Alexa将调用Lambda函数。然后,该Lambda函数可以访问您的Amazon RDS数据库。

用PHP编写Alexa函数并不容易。最受支持的语言是 Node.js / JavaScript Python

我建议您首先进行 Alexa基本技能的实验,以便您了解交互模型以及如何编写技能,然后扩展功能以提供您的特定功能。 (但不是在PHP中。)