我正在使用 aws lambdas、dynamodb 和 cognito 构建身份验证系统。
坚持比较 getOpenIdTokenForDeveloperIdentity() 提供的令牌;调用来自服务器的特定身份。
我正在通过以下方式获取令牌和身份:
function getToken(email, fn) {
var param = {
IdentityPoolId: cognitoIdentityPoolId,
Logins: {} // To have provider name in a variable
};
param.Logins[cognitoDeveloperProvidedName] = email;
cognitoidentity.getOpenIdTokenForDeveloperIdentity(param,
function(err, data) {
if (err) return fn(err); // an error occurred
else fn(null, data.IdentityId, data.Token); // successful response
});
}
Run Code Online (Sandbox Code Playgroud)
然后据我所知,我可以从 cognito 中获取已经生成的令牌(而不是创建一个新令牌),如下所示:
function checkToken(IdentityId, email, fn){
var param = {
IdentityPoolId: cognitoIdentityPoolId,
IdentityId: IdentityId,
Logins: {}
};
param.Logins[cognitoDeveloperProvidedName] = email;
cognitoidentity.getCredentialsForIdentity(param,
function(err, data) { …Run Code Online (Sandbox Code Playgroud) 如果出现错误或异常,Java AWS Lambda 最多会尝试重新调用该函数 3 次。有没有办法跟踪当前的调用计数,即知道它是第一次、第二次还是第三次调用?谢谢
在 Win 10 机器上使用 TF 0.7.2。
我正在尝试使用 TF 0.7.1 中引入的新“archive_file”资源,为在 AWS 中开发我的 lambda 函数设置编辑/上传周期
我的配置是这样的:
resource "archive_file" "cloudwatch-sumo-lambda-archive" {
source_file = "${var.lambda_src_dir}/cloudwatch/cloudwatchSumologic.js"
output_path = "${var.lambda_gen_dir}/cloudwatchSumologic.zip"
type = "zip"
}
resource "aws_lambda_function" "cloudwatch-sumo-lambda" {
function_name = "cloudwatch-sumo-lambda"
description = "managed by source project"
filename = "${archive_file.cloudwatch-sumo-lambda-archive.output_path}"
source_code_hash = "${archive_file.cloudwatch-sumo-lambda-archive.output_sha}"
handler = "cloudwatchSumologic.handler"
...
}
Run Code Online (Sandbox Code Playgroud)
这在我第一次运行时有效 - TF 创建 lambda zip 文件,上传它并在 AWS 中创建 lambda。问题在于更新 lambda。
如果我在上面的示例中编辑 cloudwatchSumologic.js 文件,TF 似乎不知道源文件已更改 - 它不会将新文件添加到 zip 并且不会将新的 lambda 代码上传到 AWS。
我在配置中做错了什么,还是不打算以这种方式使用 archive_file 资源?
当console.log用于将日志行添加到 AWS CloudWatch 时,Lambda 请求 ID 被添加到每行,如文档中所述
基于上述文档的简化示例
exports.handler = async function(event, context) {
console.log("Hello");
return context.logStreamName
};
Run Code Online (Sandbox Code Playgroud)
会产生输出,如
开始请求 ID:c793869b-ee49-115b-a5b6-4fd21e8dedac 版本:$LATEST
2019-06-07T19:11:20.562Z c793869b-ee49-115b-a5b6-4fd21e8dedac 信息你好
END 请求 ID:c793869b-ee49-115b-a5b6-4fd21e8dedac
REPORT RequestId:c793869b-ee49-115b-a5b6-4fd21e8dedac 持续时间:170.19 ms 计费持续时间:200 ms 内存大小:128 MB 已用最大内存:73 MB
此处关于此问题的相关详细信息是请求 ID,c793869b-ee49-115b-a5b6-4fd21e8dedac它添加在带有“Hello”的行上的时间戳之后。
AWS 文档指出
要从函数代码输出日志,您可以使用控制台对象上的方法,或任何写入 stdout 或 stderr 的日志库。
Node.js 运行时会记录每次调用的 START、END 和 REPORT 行,并向函数记录的每个条目添加时间戳、请求 ID 和日志级别。
使用 Winston 作为记录器时,请求 ID 会丢失。可能是带有格式化程序或传输的问题。记录器是这样创建的
const logger = createLogger({
level: 'debug',
format: combine(
timestamp(),
printf(
({ timestamp, level, message }) …Run Code Online (Sandbox Code Playgroud) amazon-web-services winston aws-lambda amazon-cloudwatchlogs
是否可以使用 AWS CLI 下载 Lambda 层?
我见过这个记录的命令。 https://docs.aws.amazon.com/lambda/latest/dg/API_GetLayerVersion.html
但是当我尝试用下面的东西运行它时。
aws lambda get-layer-version --layer-name arn:aws:lambda:us-east-1:209497400698:layer:php-73 --version-number 7
Run Code Online (Sandbox Code Playgroud)
我收到这个错误。
调用 GetLayerVersion 操作时发生错误 (InvalidParameterValueException):Invalid Layer name: arn:aws:lambda:us-east-1:209497400698:layer:php-73
是否可以通过 CLI 下载层?
作为额外说明,我正在尝试下载这些层中的任何一个 https://runtimes.bref.sh/
我正在尝试在 ViewerResponse 事件上使用 Lambda@Edge 从 Cloudfront 响应中删除一些标头。源是一个 S3 存储桶。
我已经成功地改变了这样的标题:
exports.handler = (event, context, callback) => {
const response = event.Records[0].cf.response;
response.headers.server = [{'key': 'server', 'value': 'bunny'}];
callback(null, response);
};
Run Code Online (Sandbox Code Playgroud)
但是,将所有标题一起删除似乎不起作用,例如像这样。
exports.handler = (event, context, callback) => {
const response = event.Records[0].cf.response;
delete response.headers.server;
// or response.header.server = null;
// or response.headers.server = [{'key': 'server', 'value': null}];
callback(null, response);
};
Run Code Online (Sandbox Code Playgroud)
此代码段不会删除但将服务器标头从 更改server: AmazonS3为server: CloudFront。所以我假设服务器标头可能是强制性的并且会自动填充。但我也无法删除 CloudFront 生成的其他标头。在 lambda 测试窗格中,该函数按预期工作。所以在 Lambda 函数完成后会发生一些事情。
作为背景,我想更改标题,因为该站点在重要客户的网络中被阻止,并显示它是在线存储或备份位置的消息。
我错过了什么?
我正在使用 AWS Textract 并且我想分析一个多页文档,因此我必须使用异步选项,所以我首先使用了startDocumentAnalysis函数,我得到了一个 JobId 作为返回,但它需要触发一个我设置为的函数当 SNS 主题收到消息时触发。
这些是我的无服务器文件和处理程序文件。
provider:
name: aws
runtime: nodejs8.10
stage: dev
region: us-east-1
iamRoleStatements:
- Effect: "Allow"
Action:
- "s3:*"
Resource: { "Fn::Join": ["", ["arn:aws:s3:::${self:custom.secrets.IMAGE_BUCKET_NAME}", "/*" ] ] }
- Effect: "Allow"
Action:
- "sts:AssumeRole"
- "SNS:Publish"
- "lambda:InvokeFunction"
- "textract:DetectDocumentText"
- "textract:AnalyzeDocument"
- "textract:StartDocumentAnalysis"
- "textract:GetDocumentAnalysis"
Resource: "*"
custom:
secrets: ${file(secrets.${opt:stage, self:provider.stage}.yml)}
functions:
routes:
handler: src/functions/routes/handler.run
events:
- s3:
bucket: ${self:custom.secrets.IMAGE_BUCKET_NAME}
event: s3:ObjectCreated:*
textract:
handler: src/functions/routes/handler.detectTextAnalysis
events:
- sns: "TextractTopic"
resources:
Resources: …Run Code Online (Sandbox Code Playgroud) amazon-web-services aws-sdk aws-lambda aws-sdk-nodejs amazon-textract
我正在尝试让我的 LexBot 与 Lambda 进行通信,因此我遵循了创建请求、签名以及执行此操作所需的一切的过程。但我不确定是否需要从 Python 导入某些东西。当我要发布消息时它失败了。创建签名以及 auth 标头。
请大家指教,任何帮助将不胜感激!
我使用这些文章作为指导:https : //docs.aws.amazon.com/general/latest/gr/sigv4-signed-request-examples.html
https://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html
print ('\nBEGIN REQUEST++++++++++++++++++++++++++++++++++++')
print ('Request URL = ' + endpoint)
print('\n' + authorization_header)
print('\nX-Amz-content-Sha256 header is' + payload_hash)
r = requests.Post ('myendpoint'+ canonical_uri, data=payload,
headers=headers)
data = r.json()
lex_message = data['message']
print ('' + lex_message)
Run Code Online (Sandbox Code Playgroud)
所以我假设我的问题来自这段代码,注意我删除了我的端点。
也不确定请求中的数据是什么。
我编写了一个 lambda 函数来访问数据库,因此第一步是从 AWS Secrets Manager 获取机密。我有一个私有 VPC 以及与 lambda 函数关联的子网、NAT 网关和安全组。我也有secretsmanager.Secret.grantRead(lambda_exec_role)所以 lambda 应该可以访问 Secrets Manager。
出于某种原因,当我在 API Gateway 中测试它时,我在 CloudWatch 中得到了 "errno": "ETIMEDOUT" 和 "code": "NetworkingError"。从我在 API 中打印的日志来看,获取机密失败了。
我也试图为秘密管理器添加VPC的端点在这里,但仍然得到了同样的错误。
感谢这里的任何人可以帮助我解决这个问题或提供一些提示。
非常感谢!
amazon-web-services amazon-vpc aws-lambda secretsmanager aws-nat-gateway
我在为 xgboost 库创建 lambda 层时遇到问题。我在跑:
我从这里 ( https://github.com/alexeybutyrev/aws_lambda_xgboost )抓取 xgboost 的 zip 和它的依赖项并将其加载到一个层中。当我尝试测试我的 lambda 时,我收到此错误:
Unable to import module 'lambda_function': No module named 'xgboost.core'
看起来__init__.py正在尝试通过引用 core.pyfrom .core import <stuff>
有没有人在使用 AWS Lambda 之前遇到过这个错误?
python package-management amazon-web-services aws-lambda xgboost
aws-lambda ×10
javascript ×2
amazon-s3 ×1
amazon-vpc ×1
aws-cli ×1
aws-sdk ×1
python ×1
python-3.x ×1
terraform ×1
winston ×1
xgboost ×1