저장소 생성 및 API 생성

Amplify를 이용하여 api를 추가합니다.

amplify add api 

입력값은 아래 그림을 참고하여 넣습니다. API인가를 위해 Amazon Cognito User Pool을 선택합니다. Amazon Cognito에 가입하고 로그인한 사용자의 경우 AWS 리소스접근에 대한 인가를 부여합니다. Api 접근시에도 인가가 필요한데, 이 인가 방법으로 cognito를 사용한다는 의미입니다.

Example Service

과정 중 스키마를 입력하는 부분이 나옵니다. amplify init 시 설정하신 에디터가 스키마를 입력하는 단계에서 자동으로 뜹니다.

윈도우 사용자에 경우 선택하신 에디터가 없을 경우가 많습니다. 해당하는 에디터가 없을 경우 스키마 입력 창이 뜨지 않고 amplify add api가 종료되는데, 이 경우 콘솔창 메시지에서 보이는 path로 직접 이동하셔서 해당 파일을 에디터로 열어주세요.

Example : amplify\backend/api/awsandroidworkshop/schema.graphql

스키마를 입력하는 에디터에는 ToDo 스키마가 미리 들어가 있습니다. 이는 샘플스키마로 모두 삭제하신후 아래 스키마로 바꿔주세요.

스키마는 아래 값을 사용합니다.

아래 @model 을 사용하시면 DynamoDB table, AppSync DataSource, IAM role, AppSync Resolvers등을 생성해줍니다. @key에 의해 DynamoDB의 파티션키와 정렬키를 생성합니다. 즉, DEV-DAY로 생성된 Post중 upload time으로 정렬을 하는데 사용할 예정입니다.


type Mutation {
      putPostWithPhoto(
          id: String!,
          author: String!,
          title: String,
          content: String,
          url: String,
          uptime: String!,
          photo: S3ObjectInput
          version: Int!
      ): Post
  }
  type S3Object {
       bucket: String!
       key: String!
       region: String!
  }
  input S3ObjectInput {
       bucket: String!
       key: String!
       region: String!
       localUri: String
       mimeType: String
  }
  type Post @model @key(fields:["id","uptime"]){
      id: String!
      author: String!
      title: String
      content: String
      url: String
      uptime: String!
      photo: S3Object
      version: Int!
  }

amplify add api 가 완료되면 클라우드리소스 생성을 위해 push합니다.

amplify push

필요한 입력값은 default 선택 후 Enter 하십시요

Example Service

AWS console > service > AppSync  에 들어가보시면 다음과 같이 api가 생성된 것을 확인하실 수 있습니다.

Example Service

또한 AWS console > service > AppSync >Data Sources 에 들어가보시면 Dynamodb가 생성되고 Data Source로 연동된 모습을 확인하실 수 있습니다.

Example Service

이제 Mutation 에 새로 추가한 api를 dynamodb와 연계할 수 있는 Resolver를 변경 해보겠습니다. AWS console > service > AppSync >Schema에서 Resolvers중 putPostWithPhoto(..) 를 찾아 Attach를 누릅니다.

Example Service

Data source name에 PostTable 를 선택합니다. Configure the request mapping template은 Put item with S3 ObjectPut 를 선택하세요.

Example Service

불러 온 템플릿의 key 부분을 아래와 같이 수정합니다. 소스로 부터 전달받은 id를 사용하겠다는 의미입니다.

"key" : {
        "id" : { "S" : "$ctx.args.id" }
    },

Configure the response mapping template은 기존의 코드를 삭제하시고 아래와 같이 작성합니다.

그리고 Save Resolver을 눌러 저장합니다.

$util.toJson($util.dynamodb.fromS3ObjectJson($context.source.file))

Example Service

안드로이드 스튜디오에서 res/raw/awsconfiguration.json 파일이 생성된 것을 확인하실 수 있습니다.

Example Service

Amplify codegen을 통해 를 이용하여 생성된 코드를 안드로이드 프로젝트 폴더에 다운로드 합니다.

amplify codegen

실제 저장되는 저장공간인 S3에 버킷을 생성합니다.

AWS console > service > S3 로 이동합니다.

파란색 버튼 버킷만들기 를 선택합니다.

Example Service

버킷이름을 넣고 생성을 누르세요. 이때 버킷이름은 global하게 unique해야합니다.

Example Service