AI解析を使った画像シェアWEBアプリを超簡単に作る【設定編】#reinvent
はじめに
このエントリはre:Invent2018で参加したワークショップのまとめです。 AmplifyとGraphQL、フロントにReact.jsを使って写真をシェアできるWEBアプリケーションを作るというものです。
Amplify CLIを超活用してAPIを作成したりLambdaをデプロイしたりと学びが多かったので、 何章かに分けて手順をまとめました。長くなりますがお付き合いいただけると幸いです。
作るもの
ユーザーが写真を共有できるWEBアプリを作成します。仕様は以下です。
- サインアップ、サインイン機能でどのユーザが何を投稿したか紐づけられるようにする
- APIサーバーを設定し、ユーザーとひもづく写真の情報を取得、表示させる
- アルバムの設定データを保存するデータベースを設定する
- 写真を保存するためにS3バケットを作成する
- 写真のサムネイルを自動生成する
- Rekognitionで認識したデータを写真にタグ付けする
- 写真をタグで検索できるようにする
利用するもの
- AWS Amplify CLI: AWSリソースのプロビジョニング
- AWS Amplify JS Library: AWSリソースとフロントエンドの疎通
- React.js:フロントエンド構築
- Cloud9 IDE:開発環境
利用するAWS サービス
- AppSync(GraphQL) :GraphQL APIのホスティング
- Amazon S3:写真との保存先
- Amazon Rekognition:画像解析、写真へのラベリング
- DynamoDB:アルバム、写真、ラベル、ユーザーの情報をストアする
- Cognito:Auth機能
- AWS Lambda:サムネイルの自動生成機能
- Elastic Search:ラベル別に写真を検索
アーキテクチャ
Cloud9設定
開発環境にはCloud9を利用します。
Cloud9環境を新規に作成します。
- リージョンがデフォルトでシンガポールになっているので、N.Virginiaに変更する
- Create EnvironmentからCloud9環境を新規作成
- 環境名を”workshop”にして保存する
- ”Other instance type”を選択し、インスタンスサイズはt2.mediumを選ぶ
- 他の設定はそのまま次へ進み、”Create environment”をクリックする
リージョンはどこでもいいのですが、後でRekognitionを使うので対応しているリージョンである必要があります。(デフォルトに設定されるシンガポールリージョンだと使えないので注意です。)
必要な諸々をCloud9環境にインストール
# AWS CLIをアップデートする pip install --user --upgrade awscli # Lambdaの設定と合わせるためNode.js v8.10をインストール&設定 nvm install v8.10.0 nvm alias default v8.10.0 # AWS Amplify CLIをインストール npm install -g @aws-amplify/cli
混乱を防ぐ意味で使うリソースのリージョンを全て統一することをお勧めします。
リソースのデフォルトリージョンの設定
cat <<END > ~/.aws/config [default] region=us-east-1 END
AWS Amplify CLI
- AWS Amplify CLI はモバイルアプリとウェブアプリケーションに特化したコマンドラインツールです。
- Amplifyの機能を利用するためには既存のAWSユーザーアカウントと紐付ける設定が必要です。
- 今回はAWS Cognito, S3, DynamoDB, AppSync, Lambda, Rekognition, Elasticsearch Serviceを全てAmplify CLIから設定します。
次の章ではAmplify CLIをフル活用してAWSリソースを構築してゆきます。