首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS本地+ DynamoDB本地

AWS本地+ DynamoDB本地
EN

Stack Overflow用户
提问于 2019-11-13 13:24:19
回答 1查看 3.7K关注 0票数 2

我目前正在用DynamoDB测试AWS。

以下是我遵循的步骤(主要是在互联网上找到的)

docker network create local-dev.

  • Run
  1. 使用DynamoDB本地docker run -d -v "$PWD":/dynamodb_local_db -p 8000:8000 --network local-dev --name dynamodb amazon/dynamodb-local创建新的码头网络。在此之前,我可以使用AWSCLI.
  2. 创建和列出表,然后继续运行AWS sam local start-api --docker-network local-dev。一切看起来都还好。
  3. 调用了lambda.js,但是对于console.log(err)或lambda.js似乎没有结果。

我不知道哪里是错的。请帮帮我。提前谢谢你!

lambda.js

代码语言:javascript
复制
const services = require('./services.js');
const AWS = require('aws-sdk');

let options = {
    apiVersion: '2012-08-10',
    region: 'ap-southeast-1',
}

if(process.env.AWS_SAM_LOCAL) {
  options.endpoint = new AWS.Endpoint('http://localhost:8000')
}

const dynamoDB = new AWS.DynamoDB(options);

exports.getUser = async (event, context) => {

    let params = {};

    dynamoDB.listTables(params, (err, data) => {
        if(err) console.log(err)
            else console.log(data)
    })

    return true;
}

template.yaml

代码语言:javascript
复制
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: Serverless Resources


Parameters:

  FunctionsCodeBucket:
    Type: String
    Description: CodeBucket
  FunctionsCodeKey:
    Type: String
    Description: CodeKey
  FunctionsCodeVersion:
    Type: String
    Description: CodeVersion
  NodeEnv:
    Type: String
    Description: NodeEnv

Globals:
  Api:
    Cors:
      AllowMethods: "'OPTIONS,POST,GET,DELETE,PUT'"
      AllowHeaders: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token,Api-Key,api-key'"
      AllowOrigin: "'*'"
  Function:
    Timeout: 300
    Runtime: nodejs10.x
    MemorySize: 128
    CodeUri: ./ 

Resources:
  DevResources:
    Type: AWS::Serverless::Function 
    Properties:                      
      Handler: "index.routes"
      Environment:
        Variables:
          NODE_ENV: !Ref NodeEnv
          # REGION: !Ref "AWS::Region"

      Policies:
      - Version: '2012-10-17'
        Statement:
        - Action:
          - dynamodb:*
          Effect: Allow
          Resource: "*"
      Events:
        GetUser:
          Type: Api 
          Properties:
            Path: /user
            Method: get
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-13 14:58:00

您的lambda函数不等待dynamoDB.listTables操作。您可以通过使用dynamoDB.listTables的promisified解决此问题,如下所示:

代码语言:javascript
复制
exports.getUser = async (event, context) => {

  let params = {};

  try {
    const resp = await dynamoDB.listTables(params).promise();
    console.log(resp);
  } catch (err) {
    console.log(err)
  }
};

您可能需要做的另一件事是为dynamodb容器分配网络别名(可以使用--network-alias=<container_name>选项),例如,让我们将别名设置为dynamodb

代码语言:javascript
复制
docker run -d -v "$PWD":/dynamodb_local_db -p 8000:8000 --network local-dev --network-alias=dynamodb --name dynamodb amazon/dynamodb-local

之后,您可以在lambda函数中使用这个网络别名:

代码语言:javascript
复制
if(process.env.AWS_SAM_LOCAL) {
  options.endpoint = new AWS.Endpoint('http://dynamodb:8000')
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58838142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档