概要
この記事では、AppSync を IAM認証で外部サーバから叩く際の curlコマンド例を紹介します。
ここではリクエスト元のサーバにEC2インスタンスの利用を想定しています。
前提条件
- AppSync が用意されていること
- AppSync にカスタムドメインが紐づけられていること
- EC2インスタンスを立ち上げ済みであること
IAMロールの設定
- ポリシーに
AWSAppSyncAdministrator
を選択し、IAMロールを作成します。 - リクエスト元のEC2インスタンスにIAMロールを紐づけます。
- EC2のコンソールから、対象のインスタンスを選択
- [アクション]→[セキュリティ]→[IAMロールを変更]の順に押下
- 作成したロールを選択し、[IAMロールの更新]を押下
インスタンスを選択し、セキュリティタブから、IAMロールが設定されていることを確認できれば完了です。
環境変数の設定
リクエスト元のサーバに環境変数を設定します。
$ ROLE_NAME=`curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/`
$ CRED=`curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/${ROLE_NAME}`
$ sudo yum -y install jq
$ AWS_ACCESS_KEY_ID=`echo $CRED | jq -r ".AccessKeyId"`
$ AWS_SECRET_ACCESS_KEY=`echo $CRED | jq -r ".SecretAccessKey"`
$ AWS_SESSION_TOKEN=`echo $CRED | jq -r ".Token"`
$ REGION="ap-northeast-1"
$ SERVICE="appsync"
-
169.254.169.254
にHTTPリクエストを送信することにより、自身に関するメタデータを取得できます。 - トークンの有効期限は、6~7時間です。
コマンド例
Query
コマンド
$ curl -s "https://<カスタムドメイン>/graphql" \
-H "Content-Type: application/graphql" \
-H "X-Amz-Security-Token: ${AWS_SESSION_TOKEN}" \
--aws-sigv4 "aws:amz:${REGION}:${SERVICE}" \
--user "${AWS_ACCESS_KEY_ID}:${AWS_SECRET_ACCESS_KEY}" \
-d '{ "query": "query MyQuery { getData(id: "id1") { column } }" }'
設定値の説明
- MyQuery:クエリの名称。自由に設定可。
- getData:AppSyncで設定しているクエリの名称。
- id:取得したいデータの主キーの名称。
- id1:取得したいデータの主キーの値。
- column:取得したいデータのカラム名。
Mutation
コマンド
$ curl -s "https://<カスタムドメイン>/graphql" \
-H "Content-Type: application/graphql" \
-H "X-Amz-Security-Token: ${AWS_SESSION_TOKEN}" \
--aws-sigv4 "aws:amz:${REGION}:${SERVICE}" \
--user "${AWS_ACCESS_KEY_ID}:${AWS_SECRET_ACCESS_KEY}" \
-d '{ "query":"mutation MyMutation($input1: CreateDataInput!)
{ createData(input: $input1) { id column } }",
"variables": { "input1": { "id": "id1", "column": "data" } } }'
設定値の説明
- MyMutation:ミューテーションの名称。自由に設定可。
- CreateDataInput:AppSyncで設定しているミューテーションの名称。
- createData:AppSyncで設定しているミューテーションの名称。
- id:登録したいデータの主キーの名称。
- id1:登録したいデータの主キーの値。
- column:登録したいデータのカラム名。
- data:登録したいデータの値。
下から2行目の{ id column }
は戻り値です。ほしい値を設定してください。
おわりに
-d '{ "query": " <ここ> " }'
「ここ」と記載した箇所は、基本的に AppSync のコンソール画面の「クエリ」と同じですので、画面上でクエリを作成してから「ここ」の箇所にペーストしてお使いいただければ楽だと思います。