首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >yaml SAM本地设备

yaml SAM本地设备
EN

Stack Overflow用户
提问于 2019-12-08 03:43:44
回答 2查看 1.3K关注 0票数 0

我正在尝试创建一组依赖于DynamoDB的lambda函数。我编写了这样一个有效的SAM模板:

代码语言:javascript
复制
---
AWSTemplateFormatVersion: 2010-09-09

Transform: AWS::Serverless-2016-10-31

Resources:
  Get:
    Type: AWS::Serverless::Function
    Properties:
      Handler: ./lambdas/get/main
      Runtime: go1.x
      Events:
        PostEvent:
          Type: Api
          Properties:
            Path: /
            Method: get
  Portfolios:
    Type: AWS::DynamoDB::Table
    TableName: "entities"
    Properties: 
      AttributeDefinitions: 
        - 
          AttributeName: "Id"
          AttributeType: "S"
        - 
          AttributeName: "Name"
          AttributeType: "S"
      KeySchema: 
        - 
          AttributeName: "Id"
          KeyType: "HASH"
        - 
          AttributeName: "Name"
          KeyType: "RANGE"
      ProvisionedThroughput: 
        ReadCapacityUnits: 5
        WriteCapacityUnits: 5
      Tags:
        - Key: foo
          Value: bar         


Outputs:
  Endpoint:
    Value:  !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/"

但是,当我试图执行任何一个lambda时,它们都会在尝试调用putItem时超时。要确保lambdas能够与本地dynamodb对话,我需要做什么?

代码语言:javascript
复制
    sess := session.Must(session.NewSessionWithOptions(session.Options{
        SharedConfigState: session.SharedConfigEnable,
    }))
    endpoint := "localhost:3000"
    db := dynamodb.New(sess, &aws.Config{
        Endpoint: &endpoint,
    })
    entity := &models.Entities{}
    json.Unmarshal([]byte(event.Body), portfolio)

    av, err := dynamodbattribute.MarshalMap(entity)
    if err != nil {
        fmt.Println("Got error marshalling:")
        fmt.Println(err.Error())
        os.Exit(1)
    }

    input := &dynamodb.PutItemInput{
        Item:      av,
        TableName: aws.String("entities"),
    }

    _, err = db.PutItem(input) // Times out here
    if err != nil {
        fmt.Println("Got error calling PutItem:")
        fmt.Println(err.Error())
        return events.APIGatewayProxyResponse{StatusCode: 500}, nil
    }

如何确保我的表被正确创建?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-08 03:54:52

原来SAM将不会创建dynamodb表:https://github.com/awslabs/aws-sam-cli/issues/105

要做到这一点,您必须手动创建docker容器,并在SAM之外创建表。

票数 1
EN

Stack Overflow用户

发布于 2019-12-08 07:18:26

在我正在执行的AWS项目中,它有一个函数来创建所有必需的DynamoDB表、S3桶等等。

通常,我需要在集成测试中创建它们,因此提取一个通用函数来创建AWS依赖关系是很方便的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59232254

复制
相关文章

相似问题

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