2017-12-12 4 views
0

AWS 람다 함수를 코딩하기 위해 서버리스 프레임 워크를 사용하고 있습니다. HTML 페이지에서 양식 데이터를 가져와 AWS 람다를 사용하여 Dynamodb에 저장해야합니다. 그래서 nodejs와 API 엔드 포인트에 코드를 작성했습니다. 마지막으로 AWS에 애플리케이션을 배포했습니다. 그래서 CURL과 Postman을 모두 사용하여 데이터를 게시하려고하면 "내부 서버 오류"가 표시됩니다.Dynamodb 연결 문제가있는 서버리스 람다 함수

다음은 관련 코드 단편입니다.

handler.js

const params = { 
 
    TableName: process.env.DYNAMODB_TABLE, 
 
    Item: { 
 
     id: uuid.v1(), 
 
     name: data.name, 
 
     phone: data.phone, 
 
     checked: false, 
 
     createdAt: timestamp, 
 
     updatedAt: timestamp, 
 
    }, 
 
    };

serverless.yml는

provider: 
 
    name: aws 
 
    runtime: nodejs6.10 
 
    environment: 
 
    DYNAMODB_TABLE: ${self:service}-${opt:stage, self:provider.stage} 
 
    iamRoleStatements: 
 
    - Effect: Allow 
 
     Action: 
 
     - dynamodb:Query 
 
     - dynamodb:Scan 
 
     - dynamodb:GetItem 
 
     - dynamodb:PutItem 
 
     - dynamodb:UpdateItem 
 
     - dynamodb:DeleteItem 
 
     Resource: "arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:provider.environment.DYNAMODB_TABLE}"

나는 디나모 테이블 N을 정의 할 경우 확실하지 않다 ame 그리고 자동으로 코드를 실행하는 동안 생성되는지 여부 그리고 나는이 github repo를 따랐습니다. https://github.com/serverless/examples/tree/master/aws-node-rest-api-with-dynamodb

+0

CloudWatch를에 나타 오류가 무엇입니까? – dashmug

+0

DynamoDB 테이블을 만들지 않았기 때문에 오류가 발생한 것 같습니다. – dashmug

답변

0

현재 serverless.yml은 DynamoDB 테이블을 정의하고 생성하지 않습니다.

serverless 구성의 resources 섹션에서 정의하면됩니다.

provider: 
    name: aws 
    runtime: nodejs6.10 
    environment: 
    DYNAMODB_TABLE: ${self:service}-${opt:stage, self:provider.stage}-phones 
    iamRoleStatements: 
    - Effect: Allow 
     Action: 
     - dynamodb:Query 
     - dynamodb:Scan 
     - dynamodb:GetItem 
     - dynamodb:PutItem 
     - dynamodb:UpdateItem 
     - dynamodb:DeleteItem 
     Resource: arn:aws:dynamodb:*:*:* 


resources: 
    Resources: 
    phonesTable: 
     Type: AWS::DynamoDB::Table 
     Properties: 
     TableName: ${self:service}-${opt:stage, self:provider.stage}-phones 
     AttributeDefinitions: 
      - AttributeName: id 
      AttributeType: S 
     KeySchema: 
      - AttributeName: id 
      KeyType: HASH 
     ProvisionedThroughput: 
      ReadCapacityUnits: 1 
      WriteCapacityUnits: 1 

참조 : https://serverless.com/framework/docs/providers/aws/guide/resources/

+0

그래서 phonesTable을 정의했습니다. 이것은 dynamodb에서 만들어야하는 테이블인가요? 이것은 특정 형식입니까? 나는 formdata_table로 만들었습니다 – CodeCanyon

+0

그리고 이것이 의미하는 것 자원 : arn : aws : dynamodb : * : * : *? – CodeCanyon

+0

내 마인 (mine)은 계정이 소유하고있는 DynamoDB 테이블을 의미합니다. . 그게 효과가 있다면 더 구체적으로 사용할 수 있습니다. 대부분의 경우, 당신은 그렇게 구체적 일 필요는 없습니다. – dashmug

관련 문제