Serverless Framework
appsync
다소 불친절한 글 일 수 있습니다.
아직 글쓴이의 이해도가 부족한 탓일 수 도 있고,
아직 레퍼런스가 많이 없기 때문인 탓도 있습니다.
글을 읽다 궁금하신 부분이 있다면… 검색… 뿐입니다.
AWS AppSync
AWS의 서비스 중 하나로,
기존에 개별적으로 존재하던 AWS의 서비스들을 패키지 처럼 구성하여
`GraphQL 기반`의 서버리스 어플리케이션 서버를 구현,관리하도록 도와줍니다.
여러 서비스들이라고 하면, NoSQL데이터베이스인 DynamoDB,
AWS Lambda를 통한 편리한 펑션 관리 , IAM을 통한 권한관리 등등이 존재합니다.
AWS 공식 사이트의 사진입니다. 다양한 유형의 클라이언트는 Appsync의 단 하나의 엔드포인트로 접근 (GraphQL)을 하여 reseponse를 얻게 되며,
Appsync는 필요에 따라 구성해놓은 여러 AWS 서비스들을 사용하여 요청에 따른 처리를 합니다.
Appsync를 사용하다보면, 람다처럼 모든 리소스들을 웹상에서 관리할 수 있습니다. 그러기 위한 GUI들이 꽤나 잘 구성되어 있습니다.
그러나 소스 코드를 로컬에서 관리하고, 테스트하고, CLI로 간편하게 Appsync 서버를 배포할 수 있다면 어떨까요?
Serverless Framework
서버리스 프레임워크는 이러한 고민을 해결해줍니다.
serverless.yml 파일을 통해
AWS appsync 어플리케이션의 설정을 합니다.
functions:
hello:
handler: handler.hello
events:
- http:
path: hello
method: get
이것은 예시로 작성해본 yml파일의 functions항목입니다.
해당 항목은 이 서버에서 구성할 lambda function들을 정의합니다.
/hello 라는 path로 http get request event가 발생할 경우,
hanlder.js의 hello라는 함수가 작동을 하게 됩니다.
Serverless-offline
로컬에서 기껏 구성한 서버리스 서버를 확인하기 위해서,
sls deploy
로 앱싱크에 실제로 배포를 해야 하는 수고를 매번 해야한다면,
시간의 낭비가 발생하게 됩니다.
로컬에서 구성한 서버리스 서버를 로컬 환경에서 테스트할 수 있도록 해주는 것이 ‘serverless-offline’입니다.
serverless-offline package를 설치한 뒤 .yml파일에 플러그인으로 추가를 해줍니다.
plugins:
- serverless-offline
이후
serverless는 해당 디렉토리에서 serverless offline이라는 옵션이 추가가 됩니다.
serverless offline start
이라는 명령어를 통해, 내가 구성한 설정으로 로컬환경에서 배포를 할 수 있습니다.
Serverless-dynamodb-local
내가 로컬환경에서 배포를 해봐야
source로 사용하는 DB는 여전히 aws의 dynamodb와 연결이 되어있을 것이다.
그런데 이 dynamodb마저 로컬에서 생성/연결을 할 수 있다.
sls dynamodb install
해당 명령어를 실행하면,
프로젝트의 루트디렉토리에 dynamodb 폴더가 생성되며, 로컬에 dynamodb를 생성할 수 있다.
custom:
myStage: ${opt:stage, self:provider.stage}
myRegion: ${opt:region, 'us-west-1'}
이후 yml에 custom 이라는 key값을 통해
내가 필요한 변수를 선언할 수 있다.
opt:stage의 경우 sls offline start 명령어를 실행할 때
stage라는 항목으로 부여하는 변수를 받게 된다.
해당 옵션이 없는 경우, yml파일에 존재하는 provider의 stage를 참조한다.
custom:
dynamodb:
start:
port: 8000
inMemory: true
migration: true
seed: true
}
}
}
혹은 위와 같이 선언하면,
sls dynamodb start를 할 경우 해당 옵션에 따라 진행이 된다.
migration을 true로 줬기 때문에,
resources:
Resources:
myTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: myRealTable
KeySchema:
- AttributeName": attr_1
KeyType: HASH
AttributeDefinitions:
-AttributeName: attr_1
AttributeType: S
ProvisionedThroughput:
ReadCapacityUnits: 1
WriteCapacityUnits: 1
start와 동시에 myRealTable이라는 테이블을 생성하고, myTable이라는 변수로 해당 테이블을 참조를 한다.
또한 seed옵션을 true로 주어서 seed date를 구성하는것도 가능하다.
custom:
dynamodb:
seed:
domian:
sources:
-table: myRealTable
sources: [./myRealTableSeed.json]//myRealTableSeed.json
[
{
"id":"hong",
"name":"gildong"
}
]
이렇게 .json파일로 저장한 seed data를 해당 테이블에 넣어줄 수 있다.
물론 keySchema항목과 맞춰서 넣어주는 것이 좋다.