node.js - 使用 AWS Lambda 函数连接到 Kubernetes
问题描述
我正在尝试为将连接到 EKS 集群的 Alexa 技能创建一个 lambda 函数。我正在使用 Terraform 创建集群并将其托管在 AWS 上。我不确定我是否正确导出了我的函数,并希望得到一些反馈。
const Alexa = require('ask-sdk')
const Client = require('kubernetes-client').Client
const connect = require("./connect");
const LaunchRequestHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === "LaunchRequest";
},
handle(handlerInput) {
console.log("Launch Request Handler Called");
let speechText =
"KubeVoice Test";
let repromptText =
"I did not receive any input. You can say, Connect to Cluster.";
return handlerInput.responseBuilder
.speak(speechText)
.reprompt(repromptText)
.getResponse();
}
};
//Handler for connecting
const KubernetesConnect = {
canHandle(handlerInput) {
return (
handlerInput.requestEnvelope.request.type === "IntentRequest" &&
handlerInput.request.intent.name === "Connect"
);
},
handle(handlerInput) {
let connectToCluster = connect.connect();
let speechText = "connected to cluster";
return handlerInput.responseBuilder.speak(speechText).getResponse();
}
};
const UnhandledHandler = {
canHandle() {
return true;
},
handle(handlerInput, error) {
console.log(`Error Handler : ${error.message}`);
return handlerInput.responseBuilder.speak(
"Sorry, I am unable to process your request, ask me to connect"
).getResponse();
}
};
exports.handler = Alexa.SkillBuilders.custom().
addRequestHandlers(
LaunchRequestHandler,
KubernetesConnect,
)
.addErrorHandlers(UnhandledHandler)
.lambda();
并且连接eks集群的代码取自Godaddy Kubernetes客户端示例
const Client = require('kubernetes-client').Client
async function connect() {
try {
const client = new Client({
config: {
url: process.env.K8S_CLUSTER_HOST,
auth: {
provider: {
type: 'cmd',
config: {
'cmd-path': 'aws-iam-authenticator',
'cmd-args': 'token -i' + process.env.K8S_AUTH_TOKEN,
'cmd-env': {
AWS_PROFILE: process.env.AWS_PROFILE
},
'token-key': 'status.token'
}
}
},
insecureSkipTlsVerify: true
},
version: process.env.K8S_CLUSTER_VERSION
});
}
catch (err) {
console.error('Error: ', err);
}
}
module.exports.connect = connect;
这是我得到的错误
2021-04-10T13:45:14.982Z c1c8c985-5eb0-43dd-a041-5a077ca12b6c INFO Error Handler : Cannot read property 'type' of undefined
解决方案
缺少.requestEnvelope
连接意图的线路。代码现在运行,只需要对集群的 IAM 角色进行排序!
推荐阅读
- spring - 将列表作为 url 参数发送时返回实体列表
- c# - 替换对象的 IEnumerable 的内部属性
- c# - 在 c# winforms 中使用数据表处理 csv 文件和 DateTime
- regex - 为什么我必须在基于前瞻的正则表达式中添加 `.{8}` 才能匹配密码?
- android - 为什么要在同一个 Activity 中使用两个或多个 Fragment?
- sql - oracle中的年份函数使用case语句
- image-processing - 在视频 c# 中跟踪和分配唯一 ID 到对象
- r - R Shiny:googleway 包 - 在更新期间关闭自动缩放和平移
- image - 新导航更新后项目徽标重置。怎么把它们放回去?
- python - 使用隐式方法求解 PDE 系统