对于我网站中的认知用户创建,逻辑如下。
注册.jsx
import { Auth } from "aws-amplify";
...
// create user in Cognito User Pool in frontend
const signUpResponse = await Auth.signUp({
username,
password,
attributes: {
email: email
}
})
// using lambda function and api gateway for this request
// in order to create user in my "User" table in Dynamodb
const createAdminResponse = await APIHandler.createAdmin(payload)
...
Run Code Online (Sandbox Code Playgroud)
用户表
-id(字符串):分区键
对于删除用户,我在想最好的方法是什么。
这是我当前用于删除数据库中用户的 lambda 函数
'use strict'
const AWS = require('aws-sdk');
exports.handler = async function (event, context, callback) {
const …Run Code Online (Sandbox Code Playgroud) 据我了解,当 Lambda 超时时,它会返回错误。
不过,一旦 Lambda 超时,我想知道它是否会立即被 AWS 终止,或者它是否可以在后台继续运行任意时间(可以这么说,与原始请求分离)。
我问这个问题是因为在我的情况下,当 Lambda 超时时,该 Lambda 内的所有处理也会立即停止,这一点很重要。如果 AWS 不能保证这一点,那么我将需要实施自己的措施来确保这一点,即定期检查时钟并在超时后手动停止执行。
(ps,如果 Lambda 在超时时立即被杀死,我想知道 AWS 如何实现将 Lambda 保持在温暖的初始化状态以供后续调用。即,它不能简单地在超时时杀死进程,否则 Lambda 将被下次冷了……)
我正在尝试从 Lambda 函数连接到 DocumentDB。
我已经按照本教程配置了 DocumentDB ,并且可以通过 cloud9 命令提示符访问它。
documentDB 集群是两个安全组的一部分。第一个安全组称为 vpc默认安全组demoDocDB,第二个称为defaultvpc 默认安全组。
demoDocDB用于将请求从 cloud9 实例转发到运行我的 documentDB 数据库的端口 27017 的入站规则。
安全组的入站规则defualt指定所有流量、所有端口范围及其自身的来源。VPC ID 是默认的 VPC 设置。
在 lambda 中编辑 VPC 详细信息时,我输入了:
defaultVPC 的安全组该函数在写入数据库时工作了两次,其余时间都超时了,Lambda 函数的超时时间为 2 分钟,但在达到该超时时间之前,它将抛出超时错误。
[ERROR] ServerSelectionTimeoutError: MY_DATABASE_URL:27017: [Errno -2] Name or service not known
Run Code Online (Sandbox Code Playgroud)
下面的代码片段是尝试执行的代码,该函数永远不会print("INSERTED DATA")在插入语句期间达到超时。
def getDBConnection():
client = pymongo.MongoClient(***MY_URL***)
##Specify the database to …Run Code Online (Sandbox Code Playgroud) 所以我一直在尝试探索 Lambda 容器镜像
我有一个 lambda 函数如下
测试.go:
package main
import (
"context"
"fmt"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
)
func handleRequest(ctx context.Context, request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
fmt.Println("Request %s \n\n", request)
fmt.Println("Context %s \n\n", ctx)
name := request.QueryStringParameters["name"]
return events.APIGatewayProxyResponse{Body: fmt.Sprint("Hello %s", name), StatusCode: 200}, nil
}
func main() {
lambda.Start(handleRequest)
}
Run Code Online (Sandbox Code Playgroud)
我的 Docker 文件为:
FROM amazon/aws-lambda-go
COPY bin/test /var/task
CMD [ "test" ]
Run Code Online (Sandbox Code Playgroud)
我构建了上面的docker文件,标签为testing_go,并按如下方式运行它
docker run -p 8080:8080 testing_go
Run Code Online (Sandbox Code Playgroud)
并尝试按如下方式调用它
curl -X GET --url http://localhost:8080/2015-03-31/functions/function/invocations?name=JOHN --header 'Content-Type: application/json' --data '{}'
Run Code Online (Sandbox Code Playgroud)
我看到容器日志显示了以下上下文和请求的值
Request …Run Code Online (Sandbox Code Playgroud) 我真的不明白为什么以前似乎没有人问过这个问题,但是是否有一个 TIMEOUT 环境变量引用AWS中的Lambda函数中设置的超时?
它似乎不在可用环境变量列表中,这似乎也没有意义: https: //docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html
我想更新 Lambda 函数的环境变量,这是我当前使用的代码。
const AWS = require("aws-sdk");
exports.handler = async (event, context) => {
const res = await updateConfig("test");
};
async function updateConfig(funcName) {
const lambda = new AWS.Lambda({
region: "us-east-2"
});
const params = {
FunctionName: funcName,
Environment: {
Variables: {
"debug": true
}
}
};
const data = await lambda.updateFunctionConfiguration(params).promise();
return data;
}
Run Code Online (Sandbox Code Playgroud)
目前此代码不起作用,因为我试图将环境变量设置debug为true,但它只能是字符串而不是boolean.
我认为问题标题是不言自明的。我的问题是我想查看上次部署的时间和人员。想知道是否有办法通过AWS 管理控制台在任何地方找到此信息。
先感谢您!
我正在尝试通过 athena 查询我的 cloudwatch 日志。为此,我从 AWS SAR 部署了预构建版本的连接器 (Amazon Athena Cloudwatch Connector)。
当我尝试在 athena 中运行简单查询时,出现以下错误:
GENERIC_USER_ERROR: Encountered an exception[java.lang.RuntimeException] from your LambdaFunction[athenacloudwatch] executed in context[retrieving meta-data] with message[You do NOT own the spill bucket with the name: s3://my-bucket-blalablaba/]
lambda 函数创建并使用的角色具有对此存储桶的读/写访问权限。存储桶未加密,并且没有任何类型的拒绝策略。
同样,部署应用程序时提供的堆栈没有进行任何更改。
知道我在这里可能会错过什么吗?
谢谢你!
我有一个 Lambda 堆栈,位于与 Lambda 代码本身分开的存储库中。Lambda 代码作为 docker 映像打包并部署到 ECR,然后单独的 Lambda 堆栈将代码作为DockerImageFunctionusingaws_lambda.DockerImageCode.from_ecr()方法引用。这似乎已经正确部署了初始函数,但是在将 Lambda 代码的新映像发布到 ECR,然后cdk deploy使用 Lambda 堆栈从存储库运行后,它只是说没有发现任何差异。如何引用我的 Lambda 代码,以便在部署构造时看到代码已更改并更新 Lambda 函数代码(就像 cliaws lambda update-function-code调用那样)?我在使用引用 Lambda 堆栈本地代码(如在同一存储库中)的代码资产之前已经完成了此操作,但是当代码没有被引用为 Lambda 代码时,如何让堆栈识别 Lambda 代码中的更改本地资产?
我意识到对于是否将堆栈组织在单一存储库中还是在单独的存储库中组织堆栈以及它们负责部署的任何应用程序代码存在一些争论,但为了讨论这一点,我更感兴趣的是如何完成 Lambda 函数的更新当堆栈与代码分离时。
假设使用 AWS CLI 调用 AWS Lambda,是否有任何方法可以为调用传递不同的环境变量值?
我看到上下文可以传递,但我没有看到环境。
我似乎找不到办法
aws-lambda ×10
amazon-s3 ×1
aws-cdk ×1
aws-cli ×1
containers ×1
go ×1
logging ×1
mongodb ×1
monitoring ×1
node.js ×1
pymongo ×1
python ×1
query-string ×1