我有一个模块,可以创建 lambda 所需的所有基础设施,包括存储图像的 ECR:
resource "aws_ecr_repository" "image_storage" {
name = "${var.project}/${var.environment}/lambda"
image_tag_mutability = "MUTABLE"
image_scanning_configuration {
scan_on_push = true
}
}
resource "aws_lambda_function" "executable" {
function_name = var.function_name
image_uri = "${aws_ecr_repository.image_storage.repository_url}:latest"
package_type = "Image"
role = aws_iam_role.lambda.arn
}
Run Code Online (Sandbox Code Playgroud)
当然,这样做的问题是它会失败,因为当 aws_lambda_function 运行时,存储库在那里,但图像不在那里:图像是使用我的 CI/CD 上传的。
所以这是一个先有鸡还是先有蛋的问题。Terraform 应该仅用于基础设施,因此我不能/不应该使用它来上传图像(即使是虚拟图像),但我无法实例化基础设施,除非在存储库和 lambda 创建步骤之间上传图像。
我能想到的唯一解决方案是与 lambda 分开创建 ECR,然后以某种方式将其链接为我的 lambda 中的现有 aws 资源,但这似乎有点笨拙。
有什么建议么?
我正在尝试为节点安装opencv.我认为这与opencv没有直接关系,而是与node-gyp有关.我成功地在我的mac上安装opencv但是当我尝试在Ubuntu服务器上完全相同时,我在执行'npm install opnecv'后得到以下错误:
npm http GET https://registry.npmjs.org/opencv
npm http 304 https://registry.npmjs.org/opencv
> opencv@0.0.7 preinstall /home/demo/node_modules/opencv
> node-gyp rebuild
gyp ERR! configure error
gyp ERR! stack Error: "pre" versions of node cannot be installed, use the --nodedir flag instead
gyp ERR! stack at install (/usr/local/lib/node_modules/node-gyp/lib/install.js:69:16)
gyp ERR! stack at Object.commands.forEach.self.commands.(anonymous function) [as install] (/usr/local/lib/node_modules/node-gyp/lib/node-gyp.js:56:37)
gyp ERR! stack at getNodeDir (/usr/local/lib/node_modules/node-gyp/lib/configure.js:181:20)
gyp ERR! stack at /usr/local/lib/node_modules/node-gyp/lib/configure.js:101:9
gyp ERR! stack at ChildProcess.exithandler (child_process.js:538:7)
gyp ERR! stack at ChildProcess.EventEmitter.emit (events.js:96:17)
gyp ERR! …Run Code Online (Sandbox Code Playgroud) 我有几个项目,我建立了一个.aar.然后我将这个.aar导入到/ libs下的Android Studio中.此依赖项的build.gradle文件如下所示:
repositories{
flatDir{
dirs 'libs'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.0.0'
compile 'com.google.android.gms:play-services:7.0.0'
compile 'com.android.support:multidex:+'
compile(name: 'customApi-debug', ext:'aar')
}
Run Code Online (Sandbox Code Playgroud)
由于库非常大,我设置了multiDexEnabled = true.Android Studio查找库和自动填充功能.构建工作正常,但运行应用程序会出现以下错误:
java.lang.NoClassDefFoundError: com.companyx.android.api.ui.vision.metaio.MetaIoView
at com.companyx.android.api.ui.vision.metaio.MetaIoView$$InjectAdapter.<init>(MetaIoView$$InjectAdapter.java:29)
Run Code Online (Sandbox Code Playgroud)
我分别对.aar和dex文件进行了解压缩和反汇编,并验证了它所抱怨的类实际存在.我已经尝试过处理这个问题的现有方法,但没有一个能够工作.
有人经历过这个吗?提前致谢.
我正在尝试安装NDK 15c,但似乎无法弄清楚如何告诉sdkmanager版本。如果我跑步
sdkmanager "ndk-bundle"
Run Code Online (Sandbox Code Playgroud)
我会得到不需要的最新消息。
我尝试了不同的组合,但是没有用:
sdkmanager "ndk-bundle;15c"
sdkmanager "ndk-bundle;15.2.4203891"
sdkmanager "ndk-bundle;15.2"
Run Code Online (Sandbox Code Playgroud) 我的最终目标是将视频从笔记本电脑流式传输到服务器.我试图通过在笔记本电脑和服务器上使用NodeJ来实现这一目标.我使用OpenCV库在笔记本电脑上捕获视频并将其保存为jpg文件.然后我读取文件并将其转换为base64,以便我可以使用Node中的Net.socket模块传输它.这是一个持续的过程:捕获,编码和发送.
这是用于传输一个jpg文件的服务器代码:
var cv = require('opencv');
var fs = require('fs');
var net = require('net');
var camera = new cv.VideoCapture(0);
var server = net.createServer();
server.listen('50007', '127.0.0.1');
server.on('connection', function(socket){
camera.read(function(image){
image.save('original.jpg');
fs.readFile('original.jpg', 'base64', function(err, image){
socket.write(image, 'base64', function(){
socket.end();
});
});
});
});
Run Code Online (Sandbox Code Playgroud)
在客户端上,我循环直到从服务器收到FIN.这是客户端代码:
var net = require('net');
var fs = require('fs');
var client = new net.Socket();
var buffer ='';
client.setEncoding('base64');
client.connect('50007', '127.0.0.1', function(){
console.log('Connecting to server...');
});
client.on('data', function(data){
buffer += data;
});
client.on('end', function(){
var dataBuffer = new Buffer(buffer, 'base64'); …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的 AWS lambda 中运行 Apollo GraphQL 服务器。我正在使用这里的图书馆。我还使用 CDK 来部署 lambda 和 REST API 网关。
我的基础设施如下:
const helloFunction = new NodejsFunction(this, 'lambda', {
entry: path.join(__dirname, "lambda.ts"),
handler: "handler"
});
new LambdaRestApi(this, 'apigw', {
handler: helloFunction,
});
Run Code Online (Sandbox Code Playgroud)
lambda 实现如下:
const typeDefs = `#graphql
type Query {
hello: String
}`;
const resolvers = {
Query: {
hello: () => 'world',
},
};
const server = new ApolloServer({
typeDefs,
resolvers,
introspection: true,
})
console.log('###? running lambda')
export const handler = startServerAndCreateLambdaHandler(
server, …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个非常简单的Gstreamer管道,其中我的源元素是FaceTime相机,而接收器元素是udp接收器。
我首先按照此处的说明安装Gstreamer 。我运行一些基本管道没有问题;但是,当我尝试使用以下命令时
./gst-launch-0.10 v4l2src ! xviimagesink
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
ERROR: pipeline could not be constructed: no element "v4l2src".
Run Code Online (Sandbox Code Playgroud)
因此,我进行了一些挖掘,结果发现v4l2src插件在gst-plugins-good中。我使用以下命令使用macports安装了这些优秀的插件:
port install gst-plugins-good
Run Code Online (Sandbox Code Playgroud)
经过很长一段时间后,所有内容均已正确安装。现在,gst-launch出现在三个位置。
/Library/Frameworks/GStreamer.framework/Versions/0.10/bin/gst-launch-0.10
/opt/local/bin/gst-launch
/opt/local/bin/gst-launch-0.10
Run Code Online (Sandbox Code Playgroud)
如果我尝试从任何这些目录中运行上面提到的pipline,我仍然会得到
ERROR: pipeline could not be constructed: no element "v4l2src".
Run Code Online (Sandbox Code Playgroud)
如果我从任何地方键入以下命令,都会遇到更多错误,但似乎仍然找不到v4lsrc。
gst-launch v4l2src ! xviimagesink
Run Code Online (Sandbox Code Playgroud)
给出:
Dynamic session lookup supported but failed: launchd did not provide a socket path, verify that org.freedesktop.dbus-session.plist is loaded!
Dynamic session lookup supported but failed: launchd did not provide a socket path, verify that org.freedesktop.dbus-session.plist is loaded!
Dynamic …Run Code Online (Sandbox Code Playgroud) android ×2
node.js ×2
opencv ×2
aar ×1
amazon-ecr ×1
android-ndk ×1
aws-lambda ×1
base64 ×1
dex ×1
facetime ×1
graphql ×1
gst-launch ×1
gstreamer ×1
npm ×1
sockets ×1
terraform ×1