我正在学习 Terraform,并尝试获取正确的语法来为其指定 IAM 角色权限。我想要这些功能:
我有以下内容允许 API 网关调用 Lambda:
resource "aws_iam_role" "my_lambda_execution_role" {
name = "my_lambda_execution_role"
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Principal": {
"Service": [
"lambda.amazonaws.com",
"apigateway.amazonaws.com"
]
},
"Effect": "Allow",
"Sid": ""
}
]
}
EOF
}
Run Code Online (Sandbox Code Playgroud)
我已经看到下面的代码片段允许 Lambda 写入 CloudWatch。我正在尝试组合这些片段以获得所有权限,但我无法做到正确。将所有这些权限授予角色的正确语法是什么?
{
"Statement": [
{
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Effect": "Allow",
"Resource": "arn:aws:logs:*:*:*"
}
]
}
Run Code Online (Sandbox Code Playgroud) 我可以使用以下 docker 命令运行 Apache Pulsar:
docker run -it \
-p 6650:6650 \
-p 8080:8080 \
--mount source=pulsardata,target=/pulsar/data \
--mount source=pulsarconf,target=/pulsar/conf \
apachepulsar/pulsar:2.6.0 \
bin/pulsar standalone
Run Code Online (Sandbox Code Playgroud)
我正在尝试将其转换为 docker-compose,并使用下面的 docker-compose.yml 文件。当我运行命令时:
docker-compose up
Run Code Online (Sandbox Code Playgroud)
我收到错误:
附加到 pulsar pulsar | 错误:无法找到或加载主类“ pulsar 退出,代码为 1
我在这里做错了什么?提前致谢。
version: '3.1'
services:
standalone:
image: apachepulsar/pulsar:2.6.0
container_name: pulsar
ports:
- 8080:8080
- 6650:6650
environment:
- PULSAR_MEM=" -Xms512m -Xmx512m -XX:MaxDirectMemorySize=1g"
volumes:
- pulsardata:/pulsar/data
- pulsarconf:/pulsar/conf
command: /bin/bash -c "bin/pulsar standalone"
volumes:
pulsardata:
pulsarconf:
Run Code Online (Sandbox Code Playgroud) 我正在尝试获取一些简单的规则或准则,以设置操作员或工作并行性的值。在我看来,它应该是一个数字<=可用任务槽的数量?
例如,假设我有2个任务管理器计算机,每个计算机都有4个任务槽。假设没有其他作业在群集上运行,我是否将过滤器和映射之类的操作的并行性设置为8?如果没有,合理的数字是多少?
如果您请求的并行性比任务插槽更多,会发生什么?在上面的示例中,如果将操作的并行度设置为12,会发生什么情况?我假设它会使用尽可能多的可用空间?
另外,您似乎不想将并行性硬编码到源代码中,因为您在提交作业时希望对可用任务槽有一个大概的了解?您应该为所有运算符设置大致相同或不同的值的并行性,什么将指导该决策?
谢谢!
我需要将 protobuf 数据发送到用 Node.js 编写的 AWS Lambda。我正在尝试“Hello World”示例,其中序列化和反序列化 Person 消息。示例:person.proto
syntax = "proto3";
message Person {
required int32 id = 1;
required string name = 2;
optional string email = 3;
}
Run Code Online (Sandbox Code Playgroud)
使用 Node.js 和 protobufjs 包,我可以从 proto 文件生成代码,并将 Person 对象序列化和反序列化为文件:
let person = personProto.Person.create();
person.id = 42;
person.name = 'Fred';
person.email = "fred@foo.com";
console.log("Person BEFORE Serialze=" + JSON.stringify(person1,null,2));
// Serialize
let buffer = personProtos.Person.encode(person1).finish();
console.log(buffer);
fs.writeFileSync("person.pb", buffer, "binary");
// Deserialize
let bufferFromFile = fs.readFileSync("person.pb");
let decodedPerson = personProtos.Person.decode(bufferFromFile);
console.log("Decoded …Run Code Online (Sandbox Code Playgroud) 我已经编写了一个 terraform 模块来创建一个 Lambda,但我无法弄清楚如何在预构建的 ZIP 文件上计算 source_code_hash。这将在管道中,因此每次都会构建 ZIP 文件,并且在我到达 terraform 步骤之前可能会有所不同。
我正在使用 gulp 构建 ZIP 文件(这是一个 NodeJS 应用程序)并假设它是在目录 build/myLambda.zip 中预先构建的
基本上我想这样做。文件名是一个 terraform 变量,我希望 source_code_hash 计算必须引用该文件。
module my_lambda {
filename = "${var.my_zip_file}"
}
Run Code Online (Sandbox Code Playgroud)
该模块的相关部分是:
resource "aws_lambda_function" "lambda" {
filename = "${var.filename}"
source_code_hash = "${filebase64sha256(file("${var.filename}"))}"
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行 terraform plan 时,出现此错误:
Error: Error in function call
on modules\lambda\main.tf line 16, in resource "aws_lambda_function" "lambda":
16: source_code_hash = "${filebase64sha256(file("${var.filename}"))}"
|----------------
| var.filename is "build/myLambda.zip"
Call to function "file" failed: contents of
build/myLambda.zip are not …Run Code Online (Sandbox Code Playgroud)