CDKで構築された既存のAWSリソースに接続
このガイドでは、AWS Cloud Development Kit(AWS CDK)を使用して既に作成したAWSリソースに新しいアプリを接続する方法を説明します。AWS CDKは、最新のプログラミング言語を使用してクラウドインフラストラクチャをコードとして定義するためのオープンソースソフトウェア開発フレームワークです。このインフラストラクチャはAWS CloudFormationを通じてデプロイされます。
このガイドでは、Amplify Data CDKを使用してAWS AppSyncでGraphQL APIバックエンドを作成します。これはコアバックエンドを作成します。その後、Reactウェブアプリを作成してGraphQL APIに接続します。
開始する前に、以下のものが必要です:
- AWSアカウント:まだアカウントを持っていない場合は、AWSEnvironmentのセットアップチュートリアルに従って、簡単な概要を確認してください。
- Amplify CLIインストールおよび設定済み。
- テキストエディタ。このガイドではVS Codeを使用しますが、任意のIDEを使用できます。
Amplify Data CDKコンストラクトを使用してGraphQL APIを構築
CDKは、コード内でクラウドインフラストラクチャを定義する簡単な方法を提供します。このセクションでは、CDKを使用して、アプリケーションのバックエンドリソースを構築します。
ステップ1: ターミナルで次のコマンドを実行して、CDKアプリ用のフォルダを作成します。
mkdir cdk-backendステップ2: cdk-backendフォルダに移動し、cdk initコマンドを実行して新しいCDKプロジェクトを作成し、優先言語を指定します。
cd cdk-backend cdk init --language typescriptステップ3: VS Codeまたは好みのIDEを使用して、新しく作成されたCDKプロジェクトを開きます。
ステップ4: ターミナルでcdk_backendルートフォルダに移動し、次のコマンドを実行してAWS Amplify Dataパッケージをインストールします。
npm install @aws-amplify/data-constructステップ5: 次のコードに示すようにcdk_backend/lib/cdk-backend-stack.tsファイルを更新して、AmplifyDataコンストラクトを使用してAWS AppSync APIを作成します。
import * as cdk from 'aws-cdk-lib';import { Construct } from 'constructs';import { AmplifyData, AmplifyDataDefinition} from '@aws-amplify/data-construct';
export class CdkBackendStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props);
new AmplifyData(this, 'AmplifyCdkData', { definition: AmplifyDataDefinition.fromString(/* GraphQL */ ` type Todo @model @auth(rules: [{ allow: public }]) { id: ID! name: String! description: String complete: Boolean } `), authorizationModes: { defaultAuthorizationMode: 'API_KEY', apiKeyConfig: { expires: cdk.Duration.days(30) } } }); }}ステップ6: 次のコマンドを実行してCDKスタックをデプロイします。
cdk deployステップ7: CDKがデプロイのリソースを準備し、次のプロンプトが表示されます。Yを入力してEnterキーを押します。
CDKはスタックをデプロイし、次の確認を表示します。デプロイされたAPIの詳細に注意してください。次のセクションで使用します。
CDKを使用してバックエンドAPIを構築したので、フロントエンドを接続できます。
Reactアプリを構築してGraphQL APIに接続
このセクションでは、Reactウェブアプリを既存のGraphQL APIに接続します。まず、新しいReactプロジェクトを作成し、必要なAmplifyパッケージをインストールします。次に、Amplify CLIを使用してAPIの構造に一致するGraphQLコードを生成します。その後、ToDoアイテムをクエリおよびミューテーションして管理するためのReactコンポーネントを追加します。その後、バックエンドAPIの詳細を使用してAmplifyライブラリを構成します。最後に、アプリケーションを実行して、既存のAPIとの完全なCRUD機能を実演します。
ステップ1: ターミナルで次のコマンドを実行してReactアプリを作成します。
npx create-react-app react-amplify-connectステップ2: VS Codeまたは好みのIDEを使用して、新しく作成されたReactアプリを開きます。
ステップ3: aws-amplify、@aws-amplify/ui-react、および@aws-amplify/cliパッケージをインストールするために、次のコマンドを実行します。
npm install aws-amplify @aws-amplify/ui-react @aws-amplify/cliステップ4: 前に作成したCDKスタックのawsAppsyncApiIdおよびawsAppsyncRegion値を使用して、次のコマンドを実行してGraphQLクライアントヘルパーコードを生成します。

npx @aws-amplify/cli codegen add --apiId <aws-appsync-api-id> --region <aws-appsync-region>ステップ5: プロンプトのデフォルト値を受け入れます。
? Choose the type of app that you're building javascript? What javascript framework are you using react✔ Getting API details? Choose the code generation language target javascript? Enter the file name pattern of graphql queries, mutations and subscriptions src/graphql/**/*.js? Do you want to generate/update all possible GraphQL operations - queries, mutations and subscriptions Yes? Enter maximum statement depth [increase from default if your schema is deeply nested] 2✔ Downloaded the schema✔ Generated GraphQL operations successfully and saved at src/graphqlAmplify CLIはsrc/graphqlフォルダ内にGraphQLクライアントヘルパーコードを作成します。

ステップ6: App.jsファイルを次のコードで更新して、ToDoを作成するためのボタンを含むフォームを作成し、ToDoリストを取得してレンダリングする方法を追加します。
import { Amplify} from 'aws-amplify'import '@aws-amplify/ui-react/styles.css';import { useEffect, useState } from 'react';import { generateClient } from 'aws-amplify/api';import { createTodo } from './graphql/mutations';import { listTodos } from './graphql/queries';
Amplify.configure({ API: { GraphQL: { endpoint: '<your-graphql-endpoint>', region: '<your-aws-region>', defaultAuthMode: 'apiKey', apiKey: '<your-api-key>' } }});
const initialState = { name: '', description: '' };const client = generateClient();
const App = () => { const [formState, setFormState] = useState(initialState); const [todos, setTodos] = useState([]);
useEffect(() => { fetchTodos(); }, []);
function setInput(key, value) { setFormState({ ...formState, [key]: value }); }
async function fetchTodos() { try { const todoData = await client.graphql({ query: listTodos }); const todos = todoData.data.listTodos.items; setTodos(todos); } catch (err) { console.log('error fetching todos'); } }
async function addTodo() { try { if (!formState.name || !formState.description) return; const todo = { ...formState }; setTodos([...todos, todo]); setFormState(initialState); await client.graphql({ query: createTodo, variables: { input: todo } }); } catch (err) { console.log('error creating todo:', err); } }
return ( <div style={styles.container}> <h2>Amplify Todos</h2> <input onChange={(event) => setInput('name', event.target.value)} style={styles.input} value={formState.name} placeholder="Name" /> <input onChange={(event) => setInput('description', event.target.value)} style={styles.input} value={formState.description} placeholder="Description" /> <button style={styles.button} onClick={addTodo}> Create Todo </button> {todos.map((todo, index) => ( <div key={todo.id ? todo.id : index} style={styles.todo}> <p style={styles.todoName}>{todo.name}</p> <p style={styles.todoDescription}>{todo.description}</p> </div> ))} </div> );};
const styles = { container: { width: 400, margin: '0 auto', display: 'flex', flexDirection: 'column', justifyContent: 'center', padding: 20 }, todo: { marginBottom: 15 }, input: { border: 'none', backgroundColor: '#ddd', marginBottom: 10, padding: 8, fontSize: 18 }, todoName: { fontSize: 20, fontWeight: 'bold' }, todoDescription: { marginBottom: 0 }, button: { backgroundColor: 'black', color: 'white', outline: 'none', fontSize: 18, padding: '12px 0px' }};
export default App;ステップ7: 次のコマンドを使用してアプリを実行します。
npm startステップ8: フォームを使用して、いくつかのToDoアイテムを作成します。
このセクションでは、GraphQLコードを生成し、Reactコンポーネントを作成し、Amplifyを構成し、アプリをAPIに接続しました。これにより、クエリとミューテーションを通じてバックエンドとの完全なCRUD機能が有効になりました。
結論
おめでとうございます!AWS Amplify Data CDKコンストラクトを使用してGraphQL APIバックエンドをAWS AppSyncで作成しました。次に、Amplifyライブラリを使用してアプリをそのAPIに接続しました。フィードバックがある場合は、GitHubの問題を残すか、Discordコミュニティに参加してください!
リソースのクリーンアップ
このデモアプリの実験が終了したら、予期しない費用が発生しないようにバックエンドリソースを削除することをお勧めします。これは、上記で作成したCDKアプリのルートフォルダで次のコマンドを実行することで実行できます。
cdk destroy