Как попробовать AWS Appsync в локальном sam - PullRequest
0 голосов
/ 09 октября 2019

так что у меня есть сомнения по поводу AppsSync и SAM, и могу ли я запустить api graphQl в локальном sam? если это так, то что мне нужно сделать, но без DynamodB ?, иначе я хотел бы знать, что является лучшим методом для тестирования или подхода, на appSync.

, потому что примеры, которые я читаю,все это на учетной записи AWS с DynamodB и сборкой, и я хочу попробовать это на локальном SAM без Dynamo и без сборки.

, поэтому я пробую эту базовую конфигурацию в template.yaml, который я нашел, в этом репо введите описание ссылки здесь

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  graphql

  Sample SAM Template for graphql

# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
plugins:
  - serverless-appsync-plugin
  - serverless-webpack
Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Properties:
      CodeUri: hello_world/
      Handler: app.lambda_handler
      Runtime: python3.7

  Role: 
    Type: AWS::IAM::Role
    Properties: 
      AssumeRolePolicyDocument: 
        Version: 2012-10-17
        Statement: 
          - Effect: Allow
            Principal:
              Service: appsync.amazonaws.com
            Action:
              - sts:AssumeRole
      Policies: 
        - PolicyName: allow-access-to-lambda-from-appsync
          PolicyDocument: 
            Version: 2012-10-17
            Statement: 
              - Effect: Allow
                Action: lambda:invokeFunction
                Resource:
                  - !GetAtt [ HelloWorldFunction, Arn ]
                  - !Join [ '', [ !GetAtt [ HelloWorldFunction, Arn ], ':*' ] ]

  AppSyncAPI:
    Type: AWS::AppSync::GraphQLApi
    Properties:
      Name: !Join [ -, [ !Ref ParamProjectName, !Ref ParamENV ] ]
      AuthenticationType: API_KEY

  AppSyncSchema:
    Type: AWS::AppSync::GraphQLSchema
    Properties:
      ApiId: !GetAtt [ AppSyncAPI, ApiId ]
      DefinitionS3Location: schema.graphql

  AppSyncDataSource:
    Type: AWS::AppSync::DataSource
    Properties:
      ApiId: !GetAtt [ AppSyncAPI, ApiId ]
      Name: handler
      Type: AWS_LAMBDA
      LambdaConfig:
        LambdaFunctionArn: !GetAtt [ HelloWorldFunction, Arn ]
      ServiceRoleArn: !GetAtt [ Role, Arn ]



  AppSyncReolverPeople:
    Type: AWS::AppSync::reolver
    properties: 
      ApiId: !GetAtt [AppSyncAPI, ApiId]
      TypeName: Query
      FieldName: !GetAtt [AppSyncDataSource, Name]
      RequestMappingTemplate:
        '
        {
          "version":"2017-02-28",
          "operation": "Invoke",
          "payload":{
            "resolve":"query.people",
            "context":"$utils.toJson($context)"
          }
        }
        '
    ResponseMappingTemplate: $util.toJson($context.result)

  AppSyncAPIKey:
      Type: AWS::AppSync::ApiKey
      Properties:
        ApiId: !GetAtt [ AppSyncAPI, ApiId ]
        Expires: !Ref ParamKeyExpiration

Parameters:

  ParamProjectName:
    Type: String
  ParamENV:
    Type: String
  ParamKeyExpiration:
    Type: Number


Outputs:
  APIKey:
      Description: API Key
      Value: !GetAtt [ AppSyncAPIKey, ApiKey ]

  GraphQL:
    Description: GraphQL URL
    Value: !GetAtt [ AppSyncAPI, GraphQLUrl ]

это схема.graphql

type Person {
    id: Int!
    name: String!
    age: Int!

    friends: [Person!]!
}

type Query {
    people: [Person!]!
    person(id: Int): Person!
}

schema {
    query: Query
}

и это лямбда-код:

 import json




def lambda_handler(event, context):

    data={
        "id":1
        "name":"milse",
        "age":12
    }
    if event.name==data.name:
        return {
        "statusCode": 200,
        "body": json.dumps({
            "message": " hi :" + data.name

        }),
    }
    else:
        return {
        "statusCode": 200,
        "body": json.dumps({
            "message": " the name is not here" 

        }),
    }

так что я благодарю вас за вашу помощь.

1 Ответ

0 голосов
/ 10 октября 2019

Есть только один способ локального тестирования AppSync:

https://aws.amazon.com/blogs/mobile/amplify-framework-local-mocking/

SAM не поддерживает его.

...