AWS Amplify를 사용하여 서버 없음GraphQL React 어플리케이션 구축 및 배포
이 문서에서 이러한 Amplify 어플리케이션을 구축하고 배치하는 방법을 안내하고자 합니다.
카탈로그
Set up fullstack Amplify project
확대 설정
AWS Amplify자칭:Fastest, easiest way to build mobile and web apps that scale
Amplify는 AWS (Amazon Web Services)가 지원하는 확장 가능한 전체 스택 어플리케이션을 구축하기 위한 도구와 서비스를 제공합니다.Amplify를 통해 백엔드를 설정하고 정적 웹 응용 프로그램을 배치하는 것은 매우 쉽다.Angular, React, Vue, JavaScript, Next 등의 웹 프레임워크를 지원합니다.iOS, 안드로이드, React Native, Ionic, Flatter를 포함한 js와 모바일 플랫폼
다음 단계를 따르려면 create an AWS account가 필요합니다.걱정하지 마십시오. 가입 후 AWS 무료 층에 방문할 수 있습니다. 그 중에는 어떠한 전기 비용이나 기한 약속도 포함되지 않습니다.
다음 단계에서는 Amplify 명령줄 인터페이스(CLI)를 설치합니다.내 예에서는 macOS에서 cURL을 사용했습니다.
curl -sL https://aws-amplify.github.io/amplify-cli/install | bash && $SHELL
또는 Amplify CLI를 설치하고 구성하는 방법을 볼 수 있습니다.이제 CLI를 사용하여 Amplify 구성 가능
amplify configure
그러면 AWS 콘솔에 로그인해야 합니다.로그인하면 Amplify CLI 에서 사용자 AWS IAM 를 생성해야 합니다.Specify the AWS Region
? region: # Your preferred region
Specify the username of the new IAM user:
? user name: # User name for Amplify IAM user
Complete the user creation using the AWS console
IAM으로 리디렉션될 것입니다. 마법사를 완성하고 계정에 있는 AdministratorAccess
사용자를 만들어서 AWS 자원을 제공해야 합니다.사용자를 생성한 후 Amplify CLI는 Amplify CLI와 우리가 만든 IAM 사용자를 연결하기 위해 accessKeyId
및 secretAccessKey
를 요청합니다.Enter the access key of the newly created user:
? accessKeyId: # YOUR_ACCESS_KEY_ID
? secretAccessKey: # YOUR_SECRET_ACCESS_KEY
This would update/create the AWS Profile in your local machine
? Profile Name: # (default)
Successfully set up the new user.
완전한 창고 확대 프로젝트 만들기
At this point, we are ready to set up our full-stack project using a React 애플리케이션은 프런트엔드 및 GraphQL에서 백엔드 API로 사용됩니다.다음 아키텍처를 사용하는 Todo CRUD(생성, 읽기, 업데이트, 삭제) 어플리케이션을 구축합니다.이 프레젠테이션의 전체 소스 코드는 GitHub에서 얻을 수 있습니다.
반응 프런트엔드 생성하기
Let’s start by creating a new React app using create-react-app . 프로젝트 디렉토리에서 다음 명령을 실행하여amplify-react-graphql-demo
라는 디렉토리에 새 React 응용 프로그램을 만들고 새 디렉토리로 이동합니다.npx create-react-app amplify-react-graphql-demo
cd amplify-react-graphql-demo
React 애플리케이션을 시작하려면npm start
http://localhost:3000
에서 개발 서버를 시작합니다.확대 초기화
Now it’s time to initialize Amplify in our project. From the root of the project we run
amplify init
which will prompt some information about the app:
▶ amplify init
? Enter a name for the project amplifyreactdemo
The following configuration will be applied:
Project information
| Name: amplifyreactdemo
| Environment: dev
| Default editor: Visual Studio Code
| App type: javascript
| Javascript framework: react
| Source Directory Path: src
| Distribution Directory Path: build
| Build Command: npm run-script build
| Start Command: npm run-script start
? Initialize the project with the above configuration? Yes
Using default provider awscloudformation
? Select the authentication method you want to use: AWS profile
? Please choose the profile you want to use: default
When our new Amplify project is initialized, the CLI:
- created a file called
aws-exports.js
in the src directory that holds all the configuration for the services we create with Amplify - created a top-level directory called
amplify
that contains our backend definition - modified the
.gitignore
file and adds some generated files to the ignore list
amplify console
을 통해 액세스할 수 있습니다.Amplify Console은 관리형 및 관리 UI와 같은 두 가지 주요 서비스를 제공합니다.자세한 내용은 here를 참조하십시오.다음 단계에서는 일부 확대 라이브러리를 설치합니다.
npm install aws-amplify @aws-amplify/ui-react typescript
aws-amplify
: Amplify 기본 라이브러리 사용@aws-amplify/ui-react
: React별 UI 구성 요소 포함typescript
: 본 프레젠테이션그런 다음 Amplify 를 클라이언트 시스템에 구성해야 합니다.따라서
src/index.js
에서 마지막으로 가져온 다음 코드를 추가해야 합니다.import Amplify from 'aws-amplify';
import awsExports from './aws-exports';
Amplify.configure(awsExports);
현재 실행 중인 React 프런트엔드 프로그램이 있습니다. Amplify가 설정되어 있습니다. 이제 GraphQL API를 추가할 수 있습니다.GraphQL API 만들기
We will now create a backend that provides a GraphQL API using AWS AppSync (a managed GraphQL service) that uses Amazon DynamoDB (a NoSQL database).
To add a new API we need to run the following command in our project’s root folder:
▶ amplify add api
? Please select from one of the below mentioned services: GraphQL
? Provide API name: demoapi
? Choose the default authorization type for the API: API key
? Enter a description for the API key:
? After how many days from now the API key should expire (1-365): 7
? Do you want to configure advanced settings for the GraphQL API: No, I am done.
? Do you have an annotated GraphQL schema? No
? Choose a schema template: Single object with fields (e.g., “Todo” with ID, name, description)
After the process finished successfully we can inspect the GraphQL schema at amplify/backend/api/demoapi/schema.graphql
:
type Todo @model {
id: ID!
name: String!
description: String
}
@model
directive that is part of the GraphQL transformAmplify도서관.이 라이브러리는 여러 개의 명령을 포함하여 신분 검증, 데이터 모델 정의 등에 사용할 수 있다.추가@model
명령은 이런 유형(우리의 예시에서 Todo 테이블), CRUD(창설, 읽기, 갱신, 삭제) 모델과 상응하는GraphQL 해상도에 데이터베이스 테이블을 만들 것이다.이제 우리의 백엔드를 배치할 때가 되었다.
▶ amplify push
✔ Successfully pulled backend environment dev from the cloud.
Current Environment: dev
| Category | Resource name | Operation | Provider plugin |
| -------- | ------------- | --------- | ----------------- |
| Api | demoapi | Create | awscloudformation |
? Are you sure you want to continue? Yes
? Do you want to generate code for your newly created GraphQL API: Yes
? Choose the code generation language target: typescript
? Enter the file name pattern of graphql queries, mutations and subscriptions: src/graphql/**/*.ts
? 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
? Enter the file name for the generated code: src/API.ts
성공적으로 완료되면 GraphQLAPI가 배치되어 상호작용을 할 수 있습니다.AppSync 콘솔에서 언제든지 GraphQL API를 보고 상호 작용하려면 다음을 수행할 수 있습니다.amplify console api
또는, 우리는 이 명령을 실행할 수 있다
amplify console api
확대 콘솔에서 전체 응용 프로그램을 보십시오.API에 프런트엔드 연결
The GraphQL mutations, queries and subscriptions are available at src/graphql
. To be able to interact with them we can use the generated src/API.ts
file. So we need extend App.js
to be able to create, edit and delete Todos via our GraphQL API:
import React, { useEffect, useState } from 'react';
import { API, graphqlOperation } from '@aws-amplify/api';
import { listTodos } from './graphql/queries';
import { createTodo, deleteTodo, updateTodo } from './graphql/mutations';
import TodoList from './components/TodoList';
import CreateTodo from './components/CreateTodo';
const initialState = { name: '', description: '' };
function App() {
const [formState, setFormState] = useState(initialState);
const [todos, setTodos] = useState([]);
const [apiError, setApiError] = useState();
const [isLoading, setIsLoading] = useState(false);
useEffect(() => {
fetchTodos();
}, []);
function setInput(key, value) {
setFormState({ ...formState, [key]: value });
}
async function fetchTodos() {
setIsLoading(true);
try {
const todoData = await API.graphql(graphqlOperation(listTodos)); const todos = todoData.data.listTodos.items;
setTodos(todos);
setApiError(null);
} catch (error) {
console.error('Failed fetching todos:', error);
setApiError(error);
} finally {
setIsLoading(false);
}
}
async function addTodo() {
try {
if (!formState.name || !formState.description) {
return;
}
const todo = { ...formState };
setTodos([...todos, todo]);
setFormState(initialState);
await API.graphql(graphqlOperation(createTodo, { input: todo })); setApiError(null);
} catch (error) {
console.error('Failed creating todo:', error);
setApiError(error);
}
}
async function removeTodo(id) {
try {
await API.graphql(graphqlOperation(deleteTodo, { input: { id } })); setTodos(todos.filter(todo => todo.id !== id));
setApiError(null);
} catch (error) {
console.error('Failed deleting todo:', error);
setApiError(error);
}
}
async function onItemUpdate(todo) {
try {
await API.graphql( graphqlOperation(updateTodo, { input: { name: todo.name, description: todo.description, id: todo.id, }, }) ); setApiError(null);
} catch (error) {
console.error('Failed updating todo:', error);
setApiError(error);
}
}
const errorMessage = apiError && (
<p style={styles.errorText}>
{apiError.errors.map(error => (
<p>{error.message}</p>
))}
</p>
);
if (isLoading) {
return 'Loading...';
}
return (
<div style={styles.container}>
<h1 style={styles.heading}>Amplify React & GraphQL Todos</h1>
{errorMessage}
<div style={styles.grid}>
<TodoList
todos={todos}
onRemoveTodo={removeTodo}
onItemUpdate={onItemUpdate}
/>
<CreateTodo
description={formState.description}
name={formState.name}
onCreate={addTodo}
onDescriptionChange={setInput}
onNameChange={setInput}
/>
</div>
</div>
);
}
export default App;
응용 프로그램은 편집 또는 삭제할 수 있는 사용 가능한 업무 목록을 표시해야 합니다.또한 새 TODO를 작성할 수도 있습니다.
인증 추가
Amplify uses Amazon Cognito를 주요 인증 제공 업체로 한다.비밀번호와 사용자 이름이 필요한 로그인 이름을 추가해서 프로그램에 인증을 추가할 것입니다.인증을 추가하려면 실행이 필요합니다
▶ amplify add auth
Using service: Cognito, provided by: awscloudformation
The current configured provider is Amazon Cognito.
Do you want to use the default authentication and security configuration? Default configuration
Warning: you will not be able to edit these selections.
How do you want users to be able to sign in? Username
Do you want to configure advanced settings? No, I am done.
및amplify push
이제 로그인 UI를 프런트엔드에 추가할 수 있습니다.withAuthenticator
패키지의 @aws-amplify/ui-react
패키지를 사용하면 로그인 흐름을 쉽게 처리할 수 있습니다.우리는 우리의 App.js
와 수입withAuthenticator
을 조정하기만 하면 된다.import { withAuthenticator } from '@aws-amplify/ui-react';
현재 우리는 withAuthenticator
패키지로 주요 구성 요소를 포장해야 한다.export default withAuthenticator(App);
Runningnpm start
이제 인증 스트림을 통해 애플리케이션을 시작하여 사용자가 등록하고 로그인할 수 있도록 합니다.어플리케이션 배포 및 호스팅
Finally, we want to deploy our app which can be either done manually or via automatic continuous deployment. In this demo I want to deploy it manually and host it as static web app. If you want to use continuous deployment instead, please check out this official guide .우선, 호스팅을 추가해야 합니다.
▶ amplify add hosting
? Select the plugin module to execute: Hosting with Amplify Console (Managed hosting with custom domains, Continuous deployment)
? Choose a type: Manual deployment
그런 다음 애플리케이션을 발표할 예정입니다.amplify publish
게시되면 응용 프로그램의 URL을 볼 수 있으며 응용 프로그램이 응용 프로그램에 있습니다.저희 터미널의com역입니다.다음
Amplify provides also a way to run your API locally, check out this tutorial .다음은 확대 프로그램에 추가할 수 있는 멋진 것들입니다.
DataStore
User File Storage
Serverless APIs
Analytics
AI/ML
Push Notification
PubSub
결론
In this article I showed you that building and deploying a full-stack serverless application using AWS Amplify requires a minimum amount of work. Without using such a framework it would be much harder and this way you can focus more on the end product instead of what is happening inside.
If you liked this article, follow me on to get notified about new blog posts and more content from me.
Reference
이 문제에 관하여(AWS Amplify를 사용하여 서버 없음GraphQL React 어플리케이션 구축 및 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mokkapps/build-and-deploy-a-serverless-graphql-react-app-using-aws-amplify-4134텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)