这是一个概念问题:
我们希望在AWS Lambda上运行我们的代码时为Dynamo数据库表创建唯一的主键.
如果我们在AWS Lambda上使用内置函数uuid来创建一个发电机数据库数据库的唯一密钥,那么它有可能创建密钥的两倍,如果我们的dynamodb数据库中有例如5-20亿个项目.
我知道,例如,双uuid键的正常应用中的可能性几乎是不可能的.
据我所知,每次uuid运行时,都要确保它不能通过在内存中保存一些先前的值来创建double.
但是我不确定如果拉姆达只是用相同的蟒蛇控制台中运行了以下功能遍地(和保存UUID,以确保其唯一的),或者如果它创建多个单独的控制台实例,并通过运行它们分开(不保存内存uuid).
虽然这是一个概念问题,但这里有一些示例代码:
from __future__ import print_function
from decimal import *
import boto3
import json
from locale import str
import uuid
def my_handler(event, context):
description = event['description']
spot_id = uuid.uuid4() #Unique identifier for spot
dynamodb = boto3.client('dynamodb')
tablesinfo = "sinfo"
dynamodb.put_item(
TableName = tablesinfo, Item = {
'spot_id':{'S' : str(spot_id)},
'description': {'S' : description}
}
)
return {'spot_id' : spot_id}
Run Code Online (Sandbox Code Playgroud) 每次将对象上传到S3时,我都想检索添加的一些元数据(使用控制台x-amz-meta-my_variable)。
我已经通过控制台设置了lambda,以在每次将对象上传到存储桶时触发
我想知道是否可以使用类似的方法variable = event['Records'][0]['s3']['object']['my_variable']来检索此数据,或者是否必须使用存储桶和密钥连接回S3,然后调用一些函数来检索它?
下面是代码:
from __future__ import print_function
import json
import urllib
import boto3
print('Loading function')
s3 = boto3.client('s3')
def lambda_handler(event, context):
# Get the object from the event and show its content type
bucket = event['Records'][0]['s3']['bucket']['name']
key = urllib.unquote_plus(event['Records'][0]['s3']['object']['key']).decode('utf8')
# variable = event['Records'][0]['s3']['object']['my_variable']
try:
response = s3.get_object(Bucket=bucket, Key=key)
# Call some function here?
print("CONTENT TYPE: " + response['ContentType'])
return response['ContentType']
except Exception as e:
print(e)
print('Error getting object {} from bucket {}. Make sure they …Run Code Online (Sandbox Code Playgroud) 在AWS Dynamo DB中,当我们调用update / put spotid函数时,我们想为主键自动生成唯一的ID:
dynamodb.put_item(
TableName = tablesinfo, Item = {
'spot_id':{'N' : spot_id},
'latitude':{'N' : lat},
'longitude':{'N' : lon},
'description':{'S' : descrip}
}
Run Code Online (Sandbox Code Playgroud)
注意代码是使用Python编写的,但是由于我们计划为此使用AWS Lambda,因此我们也可以使用Java或Node.JS。但是,如果DynamoDB可以处理此功能,我们将更可取。