Name:
interface
Value:
Amplify has re-imagined the way frontend developers build fullstack applications. Develop and deploy without the hassle.

Page updated Aug 3, 2024

Maintenance ModeYou are viewing Amplify Gen 1 documentation. Amplify Gen 1 has entered maintenance mode and will reach end of life on May 1, 2027. New project should use Amplify Gen 2. For existing Gen 1 projects, a migration guide and tooling are available to help you upgrade. Switch to the latest Gen 2 docs →

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アプリ用のフォルダを作成します。

Terminal
mkdir cdk-backend

ステップ2: cdk-backendフォルダに移動し、cdk initコマンドを実行して新しいCDKプロジェクトを作成し、優先言語を指定します。

Terminal
cd cdk-backend
cdk init --language typescript

ステップ3: VS Codeまたは好みのIDEを使用して、新しく作成されたCDKプロジェクトを開きます。

ステップ4: ターミナルでcdk_backendルートフォルダに移動し、次のコマンドを実行してAWS Amplify Dataパッケージをインストールします。

Terminal
npm install @aws-amplify/data-construct

ステップ5: 次のコードに示すようにcdk_backend/lib/cdk-backend-stack.tsファイルを更新して、AmplifyDataコンストラクトを使用してAWS AppSync APIを作成します。

lib/cdk-backend-stack.ts
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キーを押します。

The CDK preparing for deployment.

CDKはスタックをデプロイし、次の確認を表示します。デプロイされたAPIの詳細に注意してください。次のセクションで使用します。

CDK deploying the stacks.

CDKを使用してバックエンドAPIを構築したので、フロントエンドを接続できます。

Reactアプリを構築してGraphQL APIに接続

このセクションでは、Reactウェブアプリを既存のGraphQL APIに接続します。まず、新しいReactプロジェクトを作成し、必要なAmplifyパッケージをインストールします。次に、Amplify CLIを使用してAPIの構造に一致するGraphQLコードを生成します。その後、ToDoアイテムをクエリおよびミューテーションして管理するためのReactコンポーネントを追加します。その後、バックエンドAPIの詳細を使用してAmplifyライブラリを構成します。最後に、アプリケーションを実行して、既存のAPIとの完全なCRUD機能を実演します。

ステップ1: ターミナルで次のコマンドを実行してReactアプリを作成します。

Terminal
npx create-react-app react-amplify-connect

ステップ2: VS Codeまたは好みのIDEを使用して、新しく作成されたReactアプリを開きます。

ステップ3: aws-amplify@aws-amplify/ui-react、および@aws-amplify/cliパッケージをインストールするために、次のコマンドを実行します。

Terminal
npm install aws-amplify @aws-amplify/ui-react @aws-amplify/cli

ステップ4: 前に作成したCDKスタックのawsAppsyncApiIdおよびawsAppsyncRegion値を使用して、次のコマンドを実行してGraphQLクライアントヘルパーコードを生成します。

awsAppsyncApiId and awsAppsyncRegion values highlighted within the outputs of the CDK stack.
npx @aws-amplify/cli codegen add --apiId <aws-appsync-api-id> --region <aws-appsync-region>

ステップ5: プロンプトのデフォルト値を受け入れます。

Terminal
? 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/graphql

Amplify CLIはsrc/graphqlフォルダ内にGraphQLクライアントヘルパーコードを作成します。

mutations.js, queries.js, and subscriptions.js within the graphql folder.

ステップ6: App.jsファイルを次のコードで更新して、ToDoを作成するためのボタンを含むフォームを作成し、ToDoリストを取得してレンダリングする方法を追加します。

src/App.js
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: 次のコマンドを使用してアプリを実行します。

Terminal
npm start

ステップ8: フォームを使用して、いくつかのToDoアイテムを作成します。

このセクションでは、GraphQLコードを生成し、Reactコンポーネントを作成し、Amplifyを構成し、アプリをAPIに接続しました。これにより、クエリとミューテーションを通じてバックエンドとの完全なCRUD機能が有効になりました。

結論

おめでとうございます!AWS Amplify Data CDKコンストラクトを使用してGraphQL APIバックエンドをAWS AppSyncで作成しました。次に、Amplifyライブラリを使用してアプリをそのAPIに接続しました。フィードバックがある場合は、GitHubの問題を残すか、Discordコミュニティに参加してください!

リソースのクリーンアップ

このデモアプリの実験が終了したら、予期しない費用が発生しないようにバックエンドリソースを削除することをお勧めします。これは、上記で作成したCDKアプリのルートフォルダで次のコマンドを実行することで実行できます。

Terminal
cdk destroy