[アップデート] AWS CDK で AppSync の GraphQL API に ownerContact を簡単に設定可能になりました

[アップデート] AWS CDK で AppSync の GraphQL API に ownerContact を簡単に設定可能になりました

Clock Icon2024.10.21

こんにちは、製造ビジネステクノロジー部の若槻です。

AWS CDK の最近のリリースである v2.162.0 で、下記のアップデートが追加されていました。

appsync: add ownerContact property to the GraphqlApi (#31585) (a8b2f01)

AWS AppSync では、GraphQL APIownerContact というプロパティを設定できます。API の所有者や管理者の連絡先情報をドキュメントとして保持することで、他の開発者や運用チームが問題が発生した際に迅速に連絡を取ることが可能となります。

そして今回の AWS CDK のアップデートにより、この GraphQL API の ownerContact プロパティを L2 Construct により簡単に設定可能になりました。

試してみた

ownerContact を設定する

CDK コードの実装は以下の通りです。

GraphqlApi Construct に ownerContact プロパティを設定することで、GraphQL API の ownerContact を設定できます。

lib/sample-app-stack.ts
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as appsync from 'aws-cdk-lib/aws-appsync';
import * as path from 'path';

export class SampleApp extends cdk.Stack {
  constructor(scope: Construct, id: string) {
    super(scope, id);

    new appsync.GraphqlApi(this, 'Api', {
      name: 'demo',
      definition: appsync.Definition.fromFile(
        path.join(__dirname, 'schema.graphql')
      ),
      ownerContact: 'wakatsuki@example.com', // 所有者の連絡先を指定
    });
  }
}
ここでの検証ではあまり重要では無いですが、使用した GraphQL スキーマオブジェクトはこちら。
lib/schema.graphql
type demo {
  id: String!
  version: String!
}
type Query {
  getDemos: [demo!]
}
input DemoInput {
  version: String!
}
type Mutation {
  addDemo(input: DemoInput!): demo
}

CDK Diff により差分を確認すると、ownerContact が追加されていることがわかります。

$ cdk diff
start: Building a843680c988de5bb91138239fcad33009faf44abc350c284860e6357367f15a5:current_account-current_region
success: Built a843680c988de5bb91138239fcad33009faf44abc350c284860e6357367f15a5:current_account-current_region
start: Publishing a843680c988de5bb91138239fcad33009faf44abc350c284860e6357367f15a5:current_account-current_region
success: Published a843680c988de5bb91138239fcad33009faf44abc350c284860e6357367f15a5:current_account-current_region
Hold on while we create a read-only change set to get a diff with accurate replacement information (use --no-change-set to use a less accurate but faster template-only diff)
Stack CookieFactory
There were no differences
start: Building a2367eaf6682a3e74da4ed4977e54c95f883097366b793290ac2ca54ade6d415:current_account-current_region
success: Built a2367eaf6682a3e74da4ed4977e54c95f883097366b793290ac2ca54ade6d415:current_account-current_region
start: Publishing a2367eaf6682a3e74da4ed4977e54c95f883097366b793290ac2ca54ade6d415:current_account-current_region
success: Published a2367eaf6682a3e74da4ed4977e54c95f883097366b793290ac2ca54ade6d415:current_account-current_region
Hold on while we create a read-only change set to get a diff with accurate replacement information (use --no-change-set to use a less accurate but faster template-only diff)
Stack SampleApp
Resources
[~] AWS::AppSync::GraphQLApi Api ApiF70053CD may be replaced
 └─ [+] OwnerContact (may cause replacement)
     └─ wakatsuki@example.com

✨  Number of stacks with differences: 1

CDK Deploy により実装をデプロイすると、GraphQL API の ownerContact が設定されました。

256 文字を超える値は指定できない仕様の確認

ownerContact プロパティには、256 文字以下の文字列を指定する必要があります。試しに CDK の実装で 256 文字を超える値を指定してみます。

lib/sample-app-stack.ts
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as appsync from 'aws-cdk-lib/aws-appsync';
import * as path from 'path';

export class SampleApp extends cdk.Stack {
  constructor(scope: Construct, id: string) {
    super(scope, id);

    new appsync.GraphqlApi(this, 'Api', {
      name: 'demo',
      definition: appsync.Definition.fromFile(
        path.join(__dirname, 'schema.graphql')
      ),
      ownerContact: '0123456789'.repeat(30), // 256 文字を超える値を指定
    });
  }
}

CDK Synth の実行時にエラーできちんと検証されました。デプロイ前にチェックされるのはありがたいですね。

$ cdk synth -- SampleApp
Error: You must specify `ownerContact` as a string of 256 characters or less.
    at new GraphqlApi (/Users/wakatsuki.ryuta/projects/cm-rwakatsuki/cdk_sample_app/node_modules/aws-cdk-lib/aws-appsync/lib/graphqlapi.js:1:4747)
    at new SampleApp (/Users/wakatsuki.ryuta/projects/cm-rwakatsuki/cdk_sample_app/lib/sample-app-stack.ts:10:5)
    at Object.<anonymous> (/Users/wakatsuki.ryuta/projects/cm-rwakatsuki/cdk_sample_app/bin/cdk_sample_app.ts:21:1)
    at Module._compile (node:internal/modules/cjs/loader:1241:14)
    at Module.m._compile (/Users/wakatsuki.ryuta/.npm/_npx/1bf7c3c15bf47d04/node_modules/ts-node/src/index.ts:1618:23)
    at Module._extensions..js (node:internal/modules/cjs/loader:1295:10)
    at Object.require.extensions.<computed> [as .ts] (/Users/wakatsuki.ryuta/.npm/_npx/1bf7c3c15bf47d04/node_modules/ts-node/src/index.ts:1621:12)
    at Module.load (node:internal/modules/cjs/loader:1091:32)
    at Function.Module._load (node:internal/modules/cjs/loader:938:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:83:12)
Subprocess exited with error 1

おわりに

AWS CDK で AppSync の GraphQL API に ownerContact を簡単に設定可能になっていたので共有しました。

かなりマイナーなアップデートでしたが、GraphQL API をマイクロサービスとして運用し複数のチームから利用されている場合などに誰が管理しているかを明示しておくのは重要です。その設定が CDK で簡単にできるようになったのはありがたいのではないでしょうか。

参考

https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_appsync-readme.html

以上

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.