🚗
【AWS】AppSyncからAuroraDBに接続する
前提条件
- aws cli が使える
→ ない人はサクッとインスールしましょう!
クラスターを作成するまで
サンプルとして、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 データソース
左のメニューからデータソースを選んで、データソースを作成し、写真のように編集。
リゾルバー以下
特に問題が発生しないので、tutorial を参照!
参考記事
Discussion