🚗

【AWS】AppSyncからAuroraDBに接続する

2021/05/11に公開

前提条件

  • aws cli が使える

→ ない人はサクッとインスールしましょう!
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2-mac.html

クラスターを作成するまで

サンプルとして、appsyncTutorial という名でディレクトリを作り、以下のコードを実行。
今回は自己都合で db-cluster-identifier を http-endpoint-test、region を東京に設定。

mac@pro appsyncTutorial % aws rds create-db-cluster --db-cluster-identifier http-endpoint-test --master-username WRITE_USERNAME_HERE \
--master-user-password WRITE_PASSWORD_HERE --engine aurora --engine-mode serverless \
--region ap-northeast-1

返却される値

DBCluster:
  AllocatedStorage: 1
  AssociatedRoles: []
  AvailabilityZones:
    - ap-northeast-1
    - ap-northeast-2
    - ap-northeast-3
  BackupRetentionPeriod: 1
  ClusterCreateTime: "2021-5-11"
  CopyTagsToSnapshot: false
  CrossAccountClone: false
  DBClusterArn: arn:aws:rds:ap-northeast-1:dbclusterarn
  DBClusterIdentifier: http-endpoint-test
  DBClusterMembers: []
  DBClusterParameterGroup: default.aurora5.6
  DBSubnetGroup: default
  DbClusterResourceId: cluster-xxxx
  DeletionProtection: false
  DomainMemberships: []
  Endpoint: http-endpoint-test.xxxx.ap-northeast-1.rds.amazonaws.com
  Engine: aurora
  EngineMode: serverless
  EngineVersion: 5.6.10a
  HostedZoneId: xxxx
  HttpEndpointEnabled: false
  IAMDatabaseAuthenticationEnabled: false
  KmsKeyId: arn:aws:kms:ap-northeast-1:xxxx
  MasterUsername: xxxx
  MultiAZ: false
  Port: 3306
  PreferredBackupWindow: 00:00
  PreferredMaintenanceWindow: 00:00
  ReadReplicaIdentifiers: []
  ReaderEndpoint: http-endpoint-test.xxxx.ap-northeast-1.rds.amazonaws.com
  Status: creating
  StorageEncrypted: true
  TagList: []
  VpcSecurityGroups:
    - Status: active
      VpcSecurityGroupId: xxxx

ここで、 「DBClusterArn: arn:aws:rds:ap-northeast-1:dbclusterarn」が後に使われる値なので、メモする。
次に、creds.json の名前で、いかの json ファイルを作成する。

creds.json
{
    "username": "USERNAME",
    "password": "COMPLEX_PASSWORD"
}

そして、secret の arn を作成する

mac@pro appsyncTutorial % aws secretsmanager create-secret --name HttpRDSSecret --secret-string file://creds.json --region ap-northeast-1
ARN: arn:aws:secretarn
Name: HttpRDSSecret
VersionId:xxxx

DataAPI を有効化する

mac@pro mathmatev2 % aws rds modify-db-cluster \
    --db-cluster-identifier http-endpoint-test \
    --enable-http-endpoint
DBCluster:
  ===省略===
  HttpEndpointEnabled: true
  ===省略終===

データベースとテーブルを作成する

rds 内にデータベースを作成する。

mac@pro appsyncTutorial % aws rds-data execute-statement --resource-arn "arn:aws:rds:ap-northeast-1:dbclusterarn" --schema "mysql"  --secret-arn "arn:aws:secretarn" \
 --region ap-northeast-1 --sql "create DATABASE TESTDB"
generatedFields: []
numberOfRecordsUpdated: 1

テーブルを作成する。

mac@pro appsyncTutorial % aws rds-data execute-statement --resource-arn "arn:aws:rds:ap-northeast-1:dbclusterarn" --schema "mysql"  --secret-arn "arn:aws:secretarn" \
 --region ap-northeast-1 --sql "create table Pets(id varchar(200), type varchar(200), price float)" --database "TESTDB"
generatedFields: []
numberOfRecordsUpdated: 0

値を挿入し、参照する。(※参考記事)

mac@pro appsyncTutorial % aws rds-data execute-statement --resource-arn "arn:aws:rds:ap-northeast-1:dbclusterarn" --schema "mysql"  --secret-arn "arn:aws:secretarn" \
 --region ap-northeast-1 --sql "insert into Pets values (1,'TEST',100.52)" --database "TESTDB"
generatedFields: []
numberOfRecordsUpdated: 1
mac@pro appsyncTutorial % aws rds-data execute-statement --resource-arn "arn:aws:rds:ap-northeast-1:dbclusterarn" --schema "mysql"  --secret-arn "arn:aws:secretarn" \
 --region ap-northeast-1 --sql "select * from Pets" --database "TESTDB"
numberOfRecordsUpdated: 0
records:
- - stringValue: '1'
  - stringValue: TEST
  - doubleValue: 100.52

GraphQl スキーマ

AppSync コンソールに移動し、
左のメニューから、スキーマを選択し、下記コードを貼り付け。

type Mutation {
  createPet(input: CreatePetInput!): Pet
  updatePet(input: UpdatePetInput!): Pet
  deletePet(input: DeletePetInput!): Pet
}

input CreatePetInput {
  type: PetType
  price: Float!
}

input UpdatePetInput {
  id: ID!
  type: PetType
  price: Float!
}

input DeletePetInput {
  id: ID!
}

type Pet {
  id: ID!
  type: PetType
  price: Float
}

enum PetType {
  dog
  cat
  fish
  bird
  gecko
}

type Query {
  getPet(id: ID!): Pet
  listPets: [Pet]
  listPetsByPriceRange(min: Float, max: Float): [Pet]
}

schema {
  query: Query
  mutation: Mutation
}

AppSync データソース

左のメニューからデータソースを選んで、データソースを作成し、写真のように編集。
appsync

リゾルバー以下

特に問題が発生しないので、tutorial を参照!
https://docs.aws.amazon.com/ja_jp/appsync/latest/devguide/tutorial-rds-resolvers.html#configuring-resolvers

参考記事

https://docs.aws.amazon.com/ja_jp/appsync/latest/devguide/tutorial-rds-resolvers.html
https://dev.classmethod.jp/articles/aurora_serverless_now_supportsdataapi/

Discussion