我一直在我的 CloudFormation Yaml 模板中使用 !Sub 函数就好了。当将它用作对象属性值时,它对我有用
Object:
Property1: !Sub some-value-with-a-${variable}-in-it
Run Code Online (Sandbox Code Playgroud)
变量的值按预期被替换。
但是,我不知道如何在字符串数组的元素中使用 !Sub 函数
Array:
- !Sub some-value-with-a-${variable}-in-it
Run Code Online (Sandbox Code Playgroud)
该数组元素会被忽略。
我正在 SAM 模板创建 AWS::Serverless::Function 类型资源的上下文中尝试此操作。Policies 属性可以采用字符串数组:
lambda:
Type: AWS::Serverless::Function
Properties:
CodeUri: api
FunctionName: !Sub api-${MyStageName}
Handler: Lambda:Api.Function::HandleAsync
Runtime: dotnetcore1.0
Policies:
- AWSLambdaBasicExecutionRole
- !Sub arn:aws:iam::${AWS::AccountId}:policy/some-policy
- arn:aws:iam::123456789:policy/another-policy
Run Code Online (Sandbox Code Playgroud)
!Sub 函数FunctionName在此示例中的属性中起作用。但是我最终只将 2 个策略附加到我生成的角色 -AWSLambdaBasicExecutionRole和arn:aws:iam::123456789:policy/another-policy. 包括!Sub函数的那个被忽略。
我尝试过将函数放在新行中的选项:
Array:
-
!Sub some value with a ${variable} in it
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮忙吗?
@Tom Melo 指出这不是数组问题,所以我调整了我的问题。
进一步的调查显示,这不是 Cloud Formation 的问题,而是非常特定于 …
我正在创建一个带有无服务器框架的 NodeJS 服务来验证提要,所以我向该服务添加了一个架构文件 (.json),但我无法让它工作。它似乎没有包含在包中。Lambda 找不到该文件。
首先,我只是运行 sls 包并检查 zip 内容,但该文件不存在。我还尝试将文件包含在:
package:
include:
- libs/schemas/schema.json
Run Code Online (Sandbox Code Playgroud)
但仍然不起作用。
如何确保静态文件包含在包中并且可以在 lambda 函数中读取?
lambda amazon-web-services node.js aws-lambda serverless-framework
我正在尝试编写一个 Java 应用程序,它可以发送电子邮件来指定电子邮件。在电子邮件中,我还想附上一些图片。
请在下面找到我的代码:-
public class AmazonSESSample {
static final String FROM = "abc@gmail.com";
static final String TO = "def@gmail.com";
static final String BODY = "This email was sent through Amazon SES by using the AWS SDK for Java. hello";
static final String SUBJECT = "Amazon SES test (AWS SDK for Java)";
public static void main(String[] args) throws IOException {
Destination destination = new Destination().withToAddresses(new String[] { TO });
Content subject = new Content().withData(SUBJECT);
Message msg = new Message().withSubject(subject);
// …Run Code Online (Sandbox Code Playgroud) 使用 Node JS 6.10 创建 AWS Lambda 函数后,我无法使用内联代码编辑器。
它有一条错误消息:
您的 Lambda 函数的部署包太大,无法启用内联代码
如何将代码添加到编辑器?
我正在为 lambda 创建一个云层。我想要一个创建 lambda 的通用 lambda 脚本。我在从外部注入“环境”参数时遇到问题。
我想将键值对对象作为参数传递。有人能告诉我怎么做吗。我在下面强调了它
{
"Variables" : **{ String:String, ... }**
}
{
"Type" : "AWS::Lambda::Function",
"Properties" : {
"Code" : Code,
"DeadLetterConfig" : DeadLetterConfig,
"Description" : String,
"Environment" : Environment,
"FunctionName" : String,
"Handler" : String,
"KmsKeyArn" : String,
"MemorySize" : Integer,
"ReservedConcurrentExecutions" : Integer,
"Role" : String,
"Runtime" : String,
"Timeout" : Integer,
"TracingConfig" : TracingConfig,
"VpcConfig" : VPCConfig,
"Tags" : [ Resource Tag, ... ]
}
}
Run Code Online (Sandbox Code Playgroud) 我已经使用 API Gateway 创建了一个 Web Socket Api,并且能够将客户端连接到它。
此外,我可以通过指定它ConnectionId并使用以下代码将消息发送到连接的客户端:
const AWS = require('aws-sdk');
let apiGatewayManagementApi = new AWS.ApiGatewayManagementApi({
apiVersion: '2018-11-29',
endpoint: 'https://XXXXXXXXX.execute-api.sa-east-1.amazonaws.com/dev/',
region: 'sa-east-1'
});
const params = {
ConnectionId: 'YYYYYYYYYYYYY',
Data: 'test'
};
apiGatewayManagementApi.postToConnection(params, function (err, data) {
if (err) {
console.log(err, err.stack); // an error occurred
} else {
console.log(data); // successful response
}
});
Run Code Online (Sandbox Code Playgroud)
问题是我不需要区分客户端,所以我不想跟踪每个客户端的 ConnectionId,但是如果我在发送消息时删除它,我会收到以下错误: Missing required key 'ConnectionId' in params
有没有办法向所有连接的客户端发送消息(不指定任何 ConnectionId)?
我有一个 lambda 函数,它在生产中很少被调用,但它是面向公众的,所以我想避免冷启动。所以我想我可以使用预配置的并发来避免这个问题。我的 Cloudformation 模板如下所示:
QuoteLinkServiceFunction:
Type: AWS::Serverless::Function
Properties:
# other lambda properties...
ProvisionedConcurrencyConfig:
ProvisionedConcurrentExecutions: 1
Run Code Online (Sandbox Code Playgroud)
当我在我的测试环境中创建这个堆栈时(我是唯一的用户,所以没有其他调用同时发生),当我在几个小时后返回使用这个函数时仍然会遇到冷启动。由于 lambda 现在已预热,因此在第一次调用之后立即进行的后续调用会运行得更快。
lambda 控制台显示此函数的别名实际上已设置为预配并发为 1,并且我已验证 ALB 目标组指向别名。那么为什么我仍然冷启动?
当我触发 lambda 函数时,我可以从事件模板中选择一个事件。如何在 terraform 中创建自定义事件模板。我想让开发人员通过从列表中选择这个自定义事件模板来更容易地触发 lambda。
我想在此列表中添加一个事件:
我正在尝试使用命令 Command 在本地测试无服务器 lambda 函数
serverless invoke local -f send --log --stage test
Run Code Online (Sandbox Code Playgroud)
错误
python3: can't open file '/snapshot/serverless/lib/plugins/aws/invokeLocal/invoke.py': [Errno 2] No such file or directory
Run Code Online (Sandbox Code Playgroud)
此命令在包含 serverless.yml、requirements.txt、handler.py 的目录中运行。
无法理解为什么会发生此错误以及解决方案是什么
我的 Lambda 函数有 15 分钟的限制,这是 5 分钟更早。Lambda 进程在 15 分钟后自动终止,但我的进程需要超过 15 分钟。我怎么办?
aws-lambda ×10
amazon-ses ×1
aws-sdk ×1
cloud ×1
editor ×1
email ×1
java ×1
javascript ×1
lambda ×1
node.js ×1
python ×1
serverless ×1
terraform ×1
websocket ×1
yaml ×1