我有一个表,结构如下:

当我进行查询时,我希望能够对数据映射进行查询过滤; 但我不确定如何设置查询.
这是我到目前为止:
HashMap<String, AttributeValue> map = new HashMap<String, AttributeValue>();
map.put("byUserId", new AttributeValue().withS("vl49uga5ljjcoln65rcaspmg8u"));
queryExpression
.withQueryFilterEntry("data", new Condition()
.withAttributeValueList(new AttributeValue().withM(map))
.withComparisonOperator(ComparisonOperator.CONTAINS));
Run Code Online (Sandbox Code Playgroud)
但我构建过滤器的方式不正确,我一直遇到以下错误:
Exception in thread "main" com.amazonaws.AmazonServiceException: One or more parameter values were invalid: ComparisonOperator CONTAINS is not valid for M AttributeValue type (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; Request ID: CHIOME68L1HVGO81URD7CIOS6BVV4KQNSO5AEMVJF66Q9ASUAAJG)
at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1077)
at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:725)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:460)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:295)
at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:3106)
at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.query(AmazonDynamoDBClient.java:1118)
Run Code Online (Sandbox Code Playgroud)
那么我应该使用什么比较运算符(因为IN用于列表类型),以及如何构建查询过滤器以便我可以在MAP内部指定比较.
谢谢!
我试图看看如何从lambda代码中访问请求标头和正文值.如果请求主体是JSON格式,它似乎会自动解析并在事件对象中可用.
如何在Lambda中访问任何类型的传入"Content-Type"请求的完整查询字符串,请求正文,请求标头(cookie)?
以下编辑是我收集的信息,以帮助解决可能相关或不相关的问题.如果你愿意,请忽略它们.
编辑:
我在这里和这里详细介绍了SE的现有问题.按照这个线程,使用$input.json('$')应该做的伎俩.我猜上面这些链接的答案已经过时,因为默认情况下API网关似乎在请求中识别JSON,如果是这样,它在event对象中可用,而不配置任何映射模板.
按建议设置映射对我不起作用.它不包含请求标头信息.
以下是有关如何配置的屏幕截图.
"headers"键返回一个空值.使用$input.params('$')或"$input.params('$')"错误输出.
编辑2
尝试在方法请求中定义标头.仍然没有在lambda中获取User-Agent值.
编辑3
我在API网关上使用了以下模板映射
{
"request": $input.json('$'),
"headers": "$input.params()"
}
Run Code Online (Sandbox Code Playgroud)
以及lambda中的以下代码
context.succeed("event.key32:"+JSON.stringify(event, null, 2) );
Run Code Online (Sandbox Code Playgroud)
查看响应中的"标题"值,看起来AWS-SDK/API网关/ cloudfront剥离了从HTTP客户端收到的所有标头?以下是$ input.params().标头返回的JSON的全文
header={CloudFront-Forwarded-Proto=https, CloudFront-Is-Desktop-Viewer=true, CloudFront-Is-Mobile-Viewer=false, CloudFront-Is-SmartTV-Viewer=false, CloudFront-Is-Tablet-Viewer=false, Content-Type=application/json, Via=1.1 5d53b9570d94ce920abbd471.cloudfront.net (CloudFront), 1.1 95eea7baa7ec95c9a41eca9e3ab7.cloudfront.net (CloudFront), X-Amz-Cf-Id=GBqmObLRy6Iem9bJbVPrrW1K3YoWRDyAaMpv-UkshfCsHAA==, X-Forwarded-For=172.35.96.199, 51.139.183.101, X-Forwarded-Port=443, X-Forwarded-Proto=https}}
Run Code Online (Sandbox Code Playgroud)
它在标头中没有User-Agent字符串,尽管如上面的屏幕截图所示,它是由REST客户端发送的.有趣的是,整个查询字符串可用.不确定这是否是访问它的预期方式.
我已经编写了一个实现,用于为aws-s3上的存储桶生成预先签名的URL.它可以正常工作,用于获取单个文件/对象.
我如何为整个目录生成预先签名的URL?让我们这样说吧,在我的s3存储桶上,有多个文件夹都有自己的小html5应用程序.每个文件夹都有自己的一组html,css,js以及媒体文件.在这种情况下,我不会为单个对象生成预先签名的URL.
如果我为单个文件提供预先签名的URL,例如:文件夹的index.html,该文件也需要加载css,js和media文件.我们没有签名网址的文件.
我不太确定如何实施这个.
我正在通过节点SDK从AWS发送短信.短信很顺利,我正在尝试获取交付信息.显然它不是那么容易,需要设置SNS将日志发送到Cloudwatch并解析CloudWatch以获取查询MessageId的交付信息:https://stackoverflow.com/a/40327061/2054629
如果我通过SNS Web界面发送短信,日志我会看到cloudwatch中的日志,但是当我通过节点SDK发送它们时.在从节点发送之前,我无法获得有关如何设置内容的信息.
理想情况下,我希望实现以下目标:
const sendSMS = async (message, number) => {
// send the SMS
// wait to get delivery info
// resolve with delivery info, or reject if failed
}
Run Code Online (Sandbox Code Playgroud)
目前我有:
import AWS from 'aws-sdk';
AWS.config.update({
accessKeyId: accessKey,
secretAccessKey: secretKey,
region: 'us-east-1',
});
const sns = new AWS.SNS();
const sendSMS = async (message, number) => {
return await new Promise((resolve, reject) => {
sns.publish({
Message: message,
MessageStructure: 'string',
PhoneNumber: number,
}, (err, res) => {
if …Run Code Online (Sandbox Code Playgroud) 我对使用AWS策略生成器创建的S3存储桶具有以下策略,以允许以特定角色运行的lambda访问存储桶中的文件.但是,当我执行Lambda时,我获得403权限被拒绝:
"errorMessage": "Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: <requestId>)",
"errorType": "com.amazonaws.services.s3.model.AmazonS3Exception",
Run Code Online (Sandbox Code Playgroud)
S3存储桶的策略:
{
"Version": "2012-10-17",
"Id": "Policy<number>",
"Statement": [
{
"Sid": "Stmt<number>",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<account>:role/<roleName>"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::<bucketName>/*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
这个政策有什么问题?Lamba正在使用策略中配置的角色运行.
现在,我正在努力了解AWS Cognito所以也许有人可以帮助我.我设置了一个域来为我的用户池提供Cognito的托管UI,就像这里描述的那样.因此,当我访问时,https://<my-domain>.auth.us-east-1.amazoncognito.com/login?response_type=code&client_id=<MY_POOL_CLIENT_ID>&redirect_uri=https://localhost:8080我会看到一个登录页面,我的用户可以通过Google登录我的应用程序.那部分工作得很好.
我很困惑在用户登录后如何处理从该页面返回的代码.因此,一旦我被重定向到Google并授权应用程序查看我的信息,我将被重定向回我的一个URL并带有代码查询参数.现在我正在重定向到localhost,因此重定向URL如下所示:
https://localhost:8080/?code=XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX
这段代码究竟是什么?另外,如何使用它来为我的用户访问AWS资源?
javascript amazon-web-services amazon-cognito aws-sdk aws-cognito
我无法在正式文档中找到检查点之间的AWS Kinesis任何明确引用,TRIM_HORIZON以及检查点之间的任何引用LATEST.
你能证实我的理论:
TRIM_HORIZON - 如果应用程序名称是新的,那么我将读取流中可用的所有记录.否则,应用程序名称已经使用,然后我将从我的上一个检查点读取.
LATEST- 如果应用程序名称是新的,那么我将读取在订阅流之后添加的流中的所有记录.否则,应用程序的名称已经使用,我会阅读的邮件我的最后一道关卡.
TRIM_HORIZON和之间的区别LATEST仅在于应用程序名称是新的.
我在AWS中运行在.NET Core 2.1运行时的C#中编写了一些Lambda函数.它们的冷启动时间非常大(> 8s,256MB,> 4s,512).
但是,我不确定它是冷启动时间还是别的什么; 我有其他使用dotnet编写的lambda,它们似乎有更短的启动时间.
X射线迹线显示完成"启动"和发生任何事情之间存在巨大差距.我在我的处理程序的第一行开始一个X射线子段(在跟踪中看作"配置").
有什么我想念的吗?
我在 Node 应用程序中使用 AWS SQS 队列,我必须为此编写单元测试用例。为此,我想模拟sendMessage()测试文件中的 SQS 函数调用,我该怎么办?
我曾尝试使用,aws-sdk-mock但在调用 时sendMessage(),该函数正在尝试连接到队列 URL。
测试文件
import AWSMock from 'aws-sdk-mock'
import sendMessage from '../api/sqs/producer'
describe.only('Test case for SQS SendMessage', () => {
it('should return the UserEvent', async () => {
AWSMock.mock('SQS', 'sendMessage', () => Promise.resolve('Success'))
const res = await sendMessage('testURL', 'data')
console.log('RES', res.response.data)
})
})
Run Code Online (Sandbox Code Playgroud)
生产者文件
const AWS = require('aws-sdk')
const sqs = new AWS.SQS({
region: 'us-east-1'
})
const sendMessage = async (msg, queueUrl) => {
try { …Run Code Online (Sandbox Code Playgroud) 如何使用 AWS Java SDK v2 从 AWS EKS 获取 Kubernetes 身份验证令牌?然后可用于使用 Kubernetes SDK 向 Kubernetes 进行身份验证的身份验证令牌。换句话说,我想从 EKS 获取身份验证令牌以用于与 Kubernetes 的身份验证,这样我就不必创建“kube 配置”。
我实际上得到了一个使用 AWS Java SDK v1(而不是 v2)的解决方案,查看以下open issue中的代码示例。这里还有一个 Python 代码示例,但我在使用 AWS Java SDK v2 时没有取得任何成功。我尝试使用 AWS Java SDK v2 执行此操作:
public static String getAuthenticationToken(AwsCredentialsProvider awsAuth, Region awsRegion, String clusterName) {
try {
SdkHttpFullRequest requestToSign = SdkHttpFullRequest
.builder()
.method(SdkHttpMethod.GET)
.uri(new URI("https", String.format("sts.%s.amazonaws.com", awsRegion.id()), null, null))
.appendHeader("x-k8s-aws-id", clusterName)
.appendRawQueryParameter("Action", "GetCallerIdentity")
.appendRawQueryParameter("Version", "2011-06-15")
.build();
ZonedDateTime expirationDate = DateUtil.addSeconds(DateUtil.now(), 60); …Run Code Online (Sandbox Code Playgroud) amazon-web-services kubernetes aws-sdk amazon-eks aws-java-sdk-2.x
aws-sdk ×10
aws-lambda ×3
amazon-s3 ×2
javascript ×2
node.js ×2
.net-core ×1
amazon-eks ×1
amazon-kcl ×1
amazon-sns ×1
aws-cognito ×1
aws-xray ×1
java ×1
jestjs ×1
kubernetes ×1
sms ×1
unit-testing ×1