AWS AmplifyのUI Componentsを利用する
AWS Amplifyとは
AWSの公式に記載の通り、バックエンドを爆速で構築/デプロイするためのツールです。
AWS Amplify は、モバイルとウェブのフロントエンドデベロッパーが、安全でスケーラブルなフルスタックアプリケーションを構築しデプロイできるようにする、AWS によるエンドツーエンドのソリューションです。Amplify を使用すれば、アプリケーションのバックエンドを数分で設定し、わずか数行のコードでそれをアプリケーションに接続できます。そして、3ステップで静的なウェブアプリケーションをデプロイできます。
このツールは以下の3つのコンポーネントからなります。
- Libraries
- AWSのリソースとアプリケーションを接続するオープンソースのライブラリ
- UI Components
- 後述
- CLI
- AWSのリソースを作成/管理するための対話型コマンドラインのツールチェーン
Amplifyの代表的な利用例である「APIのコード生成およびインフラ構築」等はLibrariesとCLIのみでできるため、UI Componentsを利用している方はそこまで多くないのではないでしょうか。
ということで、この記事ではUI Componentsの利用方法を解説したいと思います。
Amplify UI Componentsとは
アプリケーションに特定の機能のUIおよびAWSリソースと連携するロジックを埋め込むためのオープンソースのUIツールキットです。
2020/11/12時点で以下の機能がUI Componentsとして用意されています。
- ログイン機能
- チャットボット機能
- ファイルアップロードなどのストレージアクセス機能
今回はVueにUI Componentsを適用し、以下の手順で上記3つの機能を作成していきます。
- Vueプロジェクト作成
- Amplify導入
- ログイン機能作成
- チャットボット作成
- ストレージアクセス機能
Vueプロジェクト作成
$ vue create ui_components
$ cd ui_components
$ npm run serve
Amplify導入
- Amplifyの設定
Amplify CLIのインストールや設定は以下を参照してください。
- UI Componentsパッケージのインストール
$ npm install aws-amplify @aws-amplify/ui-vue
- Amplifyのセットアップ
Amplifyのセットアップを行います。対話型コマンドラインで質問されるので、Enterキーを連打しましょう。
$ amplify init
Enter a name for the project uicomponents
Enter a name for the environment dev
Choose your default editor: Visual Studio Code
Choose the type of app that you're building javascript
Please tell us about your project
What javascript framework are you using vue
Source Directory Path: src
Distribution Directory Path: dist
Build Command: npm run-script build
Start Command: npm run-script serve
ログイン機能作成
UI Components導入
- template部分にて、既存のコードをamplify-authenticatorタグ、amplify-sign-outタグで挟みます。
<template>
<amplify-authenticator>
<div id="app">
<img alt="Vue logo" src="./assets/logo.png">
<HelloWorld msg="Welcome to Your Vue.js App"/>
</div>
<amplify-sign-out></amplify-sign-out>
</amplify-authenticator>
</template>
以下の様な画面が表示されました。
もちろんログイン機能のためのAWSのインフラは作成されていないため、ボタンを押してもエラーになります。
AWSリソース作成
$ amplify add auth
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
裏側では以下のリソースが作成されています。
リソースが作成されたことをCloudFormationやAmplify Consoleにて確認できれば、ログイン機能が動くことを確認できます。
UI Componentsを利用することで、ログインや確認コードのメール送信のロジックを書かずにログイン機能を作ることができました。
アカウント作成
登録したメアドに送られる確認コード登録
ログインできた
チャットボット作成
UI Components導入
<template>
<amplify-authenticator>
<div id="app">
<amplify-chatbot
bot-name="yourBotName"
bot-title="My ChatBot"
welcome-message="Hello, how can I help you?"
/>
</div>
<amplify-sign-out></amplify-sign-out>
</amplify-authenticator>
</template>
チャットボットっぽい画面が作成されました。
続いてAWSリソースを作成していきます。
AWSリソース作成
$ amplify add interactions
Provide a friendly resource name that will be used to label this category in the project: lexd2e694d4
Would you like to start with a sample chatbot or start from scratch? Start with a sample
Choose a sample chatbot: BookTrip
Please indicate if your use of this bot is subject to the Children's Online Privacy Protection Act (COPPA).
Learn more: https://www.ftc.gov/tips-advice/business-center/guidance/complying-coppa-frequently-asked-questions No
$ amplify push
裏側では以下のリソースが作成されています。
ロール変更
チャットが動くか確認したところ、エラーが発生しました。
どうやらAmazon Lexにアクセスする権限がないとのこと。
ログインユーザーのLexに対して持つアクセスポリシーを確認すると、確かにap-northeast-1のLexに対してアクセス可能となっていました。
ログインユーザーがLexに対して持つアクセスポリシー
ただ、アプリケーション側のAWSリソース設定情報を確認すると、ap-southeast-2のLexに対してアクセスするようになっていました。
対応として、リソースはすでに作成されていたためAWSコンソールから上記のポリシーを変更し、ap-southeast-2のLexに対するアクセス権限を付与しました。
const awsmobile = {
"aws_project_region": "ap-northeast-1",
"aws_cognito_identity_pool_id": "ap-northeast-1:67ad2bbf-fa4b-4320-8640-efbd3629c79c",
"aws_cognito_region": "ap-northeast-1",
"aws_user_pools_id": "ap-northeast-1_E865y2qqq",
"aws_user_pools_web_client_id": "7akqir1rjttsl6ndljr1tcumss",
"oauth": {},
"aws_bots": "enable",
"aws_bots_config": [
{
"name": "BookTrip_dev",
"alias": "$LATEST",
"region": "ap-southeast-2"
}
]
};
export default awsmobile;
画面を確認すると、エラーが起きずにチャットボットと会話ができました。
チャットボットと会話できた
ストレージアクセス機能
ファイルアップロード等も可能ですが、ここではS3のファイル表示画面のみを作成します。
UI Components導入
<template>
<amplify-authenticator>
<div id="app">
<amplify-s3-image img-key="example.png" />
</div>
<amplify-sign-out></amplify-sign-out>
</amplify-authenticator>
</template>
もちろん参照するexample.pngがありません。
AWSリソースを作成していきます。
AWSリソース作成
$ amplify add storage
Please select from one of the below mentioned services: Content (Images, audio, video, etc.)
Please provide a friendly name for your resource that will be used to label this category in the project: s34863edf5
Please provide bucket name: uicomponents4e22abf46e7b421f871b3bb9dbb20218
Who should have access: Auth users only
What kind of access do you want for Authenticated users? create/update, read, delete
Do you want to add a Lambda Trigger for your S3 Bucket? No
$ amplify push
裏側では以下のリソースが作成されています。
オブジェクト配置
作成されたバケットのpublicフォルダ配下にexample.pngを配置します。
画面を確認するとファイルが参照できました。
S3のファイルを見れた
まとめ
Amplify UI Componentsを利用することで、ロジックを書かずにログイン/チャットボット/ストレージアクセスの機能を作成することができました。
また、Amplify CLIを利用して非常に簡単にAWSリソースを作成できました。
今回はCSSを適用しておらず、UI Componentsのパラメータもシンプルなものを利用していましたが、カスタマイズすることもできるため、サクッと上記の機能を作成したい時にはAmplify UI Componentsを利用するのも一つの選択肢になるかと思います。
Discussion