1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS AppSyncでAPIを作ってみたAdvent Calendar 2022

Day 23

外部サーバからAppSyncにcurlコマンドでリクエストを送る(IAM認証)

Last updated at Posted at 2022-12-22

概要

この記事では、AppSync を IAM認証で外部サーバから叩く際の curlコマンド例を紹介します。
ここではリクエスト元のサーバにEC2インスタンスの利用を想定しています。

前提条件

  • AppSync が用意されていること
  • AppSync にカスタムドメインが紐づけられていること
  • EC2インスタンスを立ち上げ済みであること

IAMロールの設定

  1. ポリシーに AWSAppSyncAdministrator を選択し、IAMロールを作成します。
  2. リクエスト元のEC2インスタンスにIAMロールを紐づけます。
    1. EC2のコンソールから、対象のインスタンスを選択
    2. [アクション]→[セキュリティ]→[IAMロールを変更]の順に押下
    3. 作成したロールを選択し、[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 のコンソール画面の「クエリ」と同じですので、画面上でクエリを作成してから「ここ」の箇所にペーストしてお使いいただければ楽だと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?