我已按照typescriptLambda说明创建基本的 typescript lambda。现在,我想像testNodeJsLambda一样在本地执行代码,但我在定义事件和上下文时遇到了困难。
import {APIGatewayProxyCallback, Context} from 'aws-lambda';
import {APIGatewayEvent} from "aws-lambda";
export const handler = async (
event: APIGatewayEvent, context: Context, callback: APIGatewayProxyCallback ) => {
console.log (`Test`)
callback(null, {
statusCode: 200,
body: JSON.stringify(recordingStatus)});
}
Run Code Online (Sandbox Code Playgroud)
如何定义事件和上下文?空物体{}是不可接受的。
事件的代码是:
import {APIGatewayEvent, Context} from 'aws-lambda';
const event : APIGatewayEvent = {
body: null,
headers: {},
multiValueHeaders: {},
httpMethod: "POST",
isBase64Encoded: false,
path: "/path/to/resource",
pathParameters : null,
queryStringParameters : null,
multiValueQueryStringParameters : null,
stageVariables : null,
requestContext: …Run Code Online (Sandbox Code Playgroud) unit-testing handler amazon-web-services typescript aws-lambda
如果我有一个在 vpc 中运行的 aws lambda,它应该通过互联网(nat 网关 -> 互联网网关)访问外部应用程序,但也可以通过 VPC 接口端点访问内部 AWS 服务,那么 lambda 如何知道它应该访问互联网仅用于外部应用程序访问?
因此,我尝试为我的 AWS Lambda 函数设置自定义域。
我完成了通过 google 域购买域名的所有说明,通过 AWS 证书管理器设置证书,并创建了相应的路由 53 托管区域。
无论出于何种原因,当我尝试访问 API 网关域名端点时,不幸的是收到 403 错误。在本例中,它是https://d-frdw0740fd.execute-api.us-east-1.amazonaws.com。
另外,为了了解上下文,这里是我的 API 映射选项卡。
有关更多背景信息,以下是与我的自定义域名对应的路由 53 中的托管区域:
我希望它不会将我带到某个{"message": "Not Found"}页面,而是将我带到实际的 aws 端点。
为了设置我的配置以使我的 API 网关域名正确链接到功能性 aws 终端节点而不是仅仅出现 404 错误,我在哪里出错了?
更新:我重新部署了我的无服务器功能,而不是现在得到 404Not Found错误而不是得到 403 Forbidden:
{
"message": "Forbidden"
}
Run Code Online (Sandbox Code Playgroud) 看起来很简单,但对我来说不起作用......
我正在使用 C#.NET 6.0 作为 AWS Lambda 函数。我正在尝试在 Visual Studio 2022 中创建此函数。此 Lambda 函数项目中没有 Startup.cs 文件。只是一个带有函数的类库。
我只想从 C# 函数读取 appsettings.json 文件中的值。Json 文件看起来像这样......
{
"SQSARN": "arn:aws:sqs:us-east-1:111111111111:SQS-Queue1",
"BucketName": "excel-s3-bucket",
"ObjectKey": "Sample.xlsx"
}
Run Code Online (Sandbox Code Playgroud)
我正在读取 C# 代码中的值,如下所示...
config = new ConfigurationBuilder().AddJsonFile("appsettings.json",true,true)
.SetBasePath(Directory.GetCurrentDirectory())
.Build();
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试提取如下......
string myValue = config.GetValue<string>("SQSARN");
Run Code Online (Sandbox Code Playgroud)
我正在获得Null上述密钥的价值。
我这里哪里出错了?这里需要添加什么库吗?请告诉我。
我正在尝试使用 Cargo-lambda 在 Rust 中为 AWS 编写一个 lambda 函数。cargo lambda new当我调用 时,生成的示例函数构建得很好cargo lambda build --release --arm64。但是,当我尝试构建代码时,我按照https://github.com/awslabs/aws-lambda-rust-runtime和https://www.cargo-lambda.info/guide/getting上的说明和示例进行编写-started.html,构建无法找到 OpenSSL 的标头。我已经安装了 OpenSSL 并pacman -S openssl运行了pacman -S linux-headers良好的措施,并尝试在我的 Fish 配置文件中运行export OPENSSL_LIB_DIR=/usr/lib/和export OPENSSL_INCLUDE_DIR=/usr/include/openssl/设置它们,但两者都不起作用。我无法过去:
cargo:warning=build/expando.c:1:10: fatal error: 'openssl/opensslv.h' file not found
cargo:warning=#include <openssl/opensslv.h>
Run Code Online (Sandbox Code Playgroud)
我已目视验证该文件存在于目录中,但由于某种原因openssl-sys-0.9.87无法找到它并出现恐慌。有其他人遇到过这种情况,或者有人有任何我可以尝试的想法吗?我不确定问题是否出在我的 Cargo-lambda 设置、我的 OpenSSL 设置、我的代码上,或者完全是其他什么地方。
这段代码是用以下代码生成的cargo lambda new project_name并且构建得很好:
use lambda_runtime::{run, service_fn, Error, LambdaEvent};
use serde::{Deserialize, Serialize};
/// Main function generated by cargo-lambda …Run Code Online (Sandbox Code Playgroud) 对于使用函数 URL 托管的 Lambda 函数,@types/aws-lambda 包中的确切事件类型是什么?
我有一个 lambda 函数,它每 15 分钟运行一次,并将一些数据保存在 DynamoDB 中。
现在我想保护我的 lambda 发出的 DynamoDB 调用,以便请求不会通过 Internet,而是通过 Amazon 内部网络。不过这里不涉及 EC2 实例。
我看到了一些使用 PrivateLink 的建议,它将 Dynamo 绑定到 VPC 端点,以便从 EC2 实例发出的调用始终通过内部网络绕过 Internet。
我想知道 lamda 调用 DynamoDB 是否可以进行这样的配置,因为 lamda 本身不在任何 EC2 实例中运行并且是无服务器的?
我正面临一个问题。我的主要动机是在 ec2 实例发生状态更改时发送电子邮件。
我直接使用 SNS 尝试了云监视事件及其工作,但我收到的电子邮件模板没有正确的信息来理解。
我期待电子邮件模板中的服务器名称及其 IP,但 SNS 没有给我修改它的选项。所以我在想的是让 lambda 参与进来
如果您认为这是否符合我的期望,请告诉我。并就如何在 Cloud watch 和 SNS 之间获取 Lambda 提供一些见解
感谢和问候
我按照本教程使用 Amplify 部署了一个 AWS AppSync GraphQL 终端节点:
https://aws-amplify.github.io/docs/js/api#amplify-graphql-client
我用 Node.js 和 TypeScript 创建了一个 Lambda 函数来查询数据:
import { APIGatewayEvent, Callback, Context, Handler } from 'aws-lambda';
import Amplify, { API, graphqlOperation } from "aws-amplify";
import * as queries from './src/graphql/queries';
import * as mutations from './src/graphql/mutations';
import { CreateBlogInput } from './src/API';
import aws_config from "./src/aws-exports";
Amplify.configure(aws_config);
export const list: Handler = async (event: APIGatewayEvent, context: Context, cb: Callback) => {
const allBlogs = await API.graphql(graphqlOperation(queries.listBlogs));
// this seems to be working …Run Code Online (Sandbox Code Playgroud) amazon-web-services aws-lambda graphql aws-appsync aws-amplify
我有从 SQS 队列读取消息的 lambda 触发器。在某些情况下,消息可能尚未准备好进行处理,因此我想将消息放回队列中 1 分钟,然后重试。目前,我正在创建此客户记录的另一个副本并将此新副本发布到队列中。我是否有理由/方式将原始记录保留在队列中而不是创建新记录
def postToQueue(customer):
if 'attemptCount' in customer.keys():
attemptCount = int(customer["attemptCount"]) + 1
else:
attemptCount = 2
customer["attemptCount"] = attemptCount
# Get the service resource
sqs = boto3.resource('sqs')
# Get the queue
queue = sqs.get_queue_by_name(QueueName='testCustomerQueue')
response = queue.send_message(MessageBody=json.dumps(customer), DelaySeconds=60)
print('customer postback: ', customer)
print ('response from writing ot the queue is: ', response)
#main function
for record in event['Records']:
if 'body' in record.keys():
customer = json.loads(record['body'])
print("attempting to process customer", customer, " at: ", datetime.datetime.now()) …Run Code Online (Sandbox Code Playgroud) aws-lambda ×10
typescript ×2
amazon-sns ×1
amazon-sqs ×1
amazon-vpc ×1
aws-amplify ×1
aws-appsync ×1
aws-vpc ×1
c# ×1
cargo-lambda ×1
graphql ×1
handler ×1
openssl ×1
rust ×1
unit-testing ×1
vpc-endpoint ×1