来自 lambda 的 context.awsRequestId

Posted

技术标签:

【中文标题】来自 lambda 的 context.awsRequestId【英文标题】:context.awsRequestId from lambda 【发布时间】:2018-07-16 20:54:57 【问题描述】:

context.awsRequestId 的 uuid 真的是唯一的吗?我想在创建资源时使用它,所以我现在可以在创建资源时使用:

const uuid = require('uuid');
const AWS = require('aws-sdk');

const dynamoDb = new AWS.DynamoDB.DocumentClient();

module.exports.create = (event, context, callback) => 
  const timestamp = new Date().getTime();
  const data = JSON.parse(event.body);
  if (typeof data.text !== 'string') 
    console.error('Validation Failed');
    callback(null, 
      statusCode: 400,
      headers:  'Content-Type': 'text/plain' ,
      body: 'Couldn\'t create the todo item.',
    );
    return;
  

  const params = 
    TableName: process.env.DYNAMODB_TABLE,
    Item: 
      id: context.awsRequestId,
      text: data.text,
      checked: false,
      createdAt: timestamp,
      updatedAt: timestamp,
    ,
  ;

  // write the todo to the database
  dynamoDb.put(params, (error) => 
    // handle potential errors
    if (error) 
      console.error(error);
      callback(null, 
        statusCode: error.statusCode || 501,
        headers:  'Content-Type': 'text/plain' ,
        body: 'Couldn\'t create the todo item.',
      );
      return;
    

    // create a response
    const response = 
      statusCode: 200,
      body: JSON.stringify(params.Item),
    ;
    callback(null, response);
  );
;

谢谢。

【问题讨论】:

【参考方案1】:

我认为这没有明确记录,但根据观察,这些 UUID 似乎不是随机生成的(这有利于唯一性)。相反,它们看起来像是 Type 1 UUIDs 的变体,其中大部分字节实际上代表时间戳,因此可以安全地假设它们在空间和时间上都是唯一的。

xxxxxxxx-xxxx-Mxxx-xxxx-xxxxxxxxxxxx 中的数字 M 设置为 1 时,UUID 应该是 Type 1 并且应该表示高分辨率时间戳和“节点”标识符,尽管在这种情况下节点组件似乎没有任何意义信息...但时间戳似乎接近实时(尽管不完全如此)。

【讨论】:

在一个相同的 lambda 并发运行多次的环境中,如果它真的是基于时间戳的并且节点标识符没有任何意义,我们可能会得到相同的 id。我仍在试图弄清楚如何获取当前“lambda 实例”的唯一 ID @jWang1 “lambda 实例”最可能的定义是“容器”。你指的是这个吗?还是你的意思是调用? 啊,是的,我的意思是容器。

以上是关于来自 lambda 的 context.awsRequestId的主要内容,如果未能解决你的问题,请参考以下文章

来自 lambda 的 context.awsRequestId

来自 API 网关 VS kinesis Streams 的 Lambda

来自 Lambda 的 AWS Cognito adminCreateUser,使用 Amplify CLI 创建

来自 AWS lambda 的内存中查找

有没有办法用来自特定用户的推文触发 AWS lambda 函数

AWS CloudFormation:如何为 Lambda 代码指定来自另一个 AWS 账户的存储桶?