🐡

AWSの基礎を学ぼう クラウドお遍路特別編 最新サービスをみんなで触ってみる Amplify に参加してわかったこと

2021/11/15に公開

AWSの基礎を学ぼう クラウドお遍路特別編 最新サービスをみんなで触ってみる Amplifyに参加しました。
そのときのレポートです。

ハンズオンの概要

  • 講師はゲスト講師に木原卓也さん
    • 主催はAWS 亀田さん
  • zoomで実施
  • 実施日時:2021/11/13
  • 資料にそって説明をうけながらハンズオンを実施
  • DynamoDBにデータを入れて、読み取る、Reactを使ったWenアプリをホスティングまで実施

Amplify概要

  • 公式サイト: AWS Amplify
  • サーバレスな構成のバックエンド構築、静的ウェブアプリケーションのホスティング、管理画面によるコンテンツ管理を簡単にできる
    • 必要なリソース(lambda, APIGateway, S3, CloudFront, etc..)がコマンドをぽちぽち押すだけで用意される
    • IAMの設定も適宜してくれる
    • アプリケーションの構成要素だけではなく、デプロイ、CI/CDも設定できる
  • Amplifyは進化が早い -> そのぶん日本語での情報が少ない
  • コミュニティサイトや、SLACKがあり、質問できる
    • あとから調べてわかったけど、こちらに日本語情報がよくまとまっているっぽい
  • 他のAWSサービスとは異なるamplifyの特徴として、ツールはOSSなので、利用者はいっしょに開発しながらサービスを成長させられる
  • 認証画面とか作りやすくなるライブラリも提供されている

やったこと

  • 資料の102ページから実施
  • cloud9を使ってビルドや各種設定、ホスティングを実施
    • cloud9でやることはマストではないけど、権限設定が楽なのでこちらで
    • ちょっとパワーがいるのでインスタンスタイプはt3 smallで。
  • 105ページに前提環境の確認があり、そこでは、node 10.22.0となっているが、今回はv16.13.0で実施
  • npm install -g @aws-amplify/cliでaws-amplify cliをいれる
    • cliも進化が早い。
      • ハンズオンでもドキュメントと、バージョンは違った。
  • reactアプリをnpxコマンドで作ったらあとはだいたいamplify-cliで操作
    • npx create-react-app amplify20211113
    • 初期化: amplify init
    • アプリで使うAPIを追加: amplify add api
    • ホスティング: amplify publish
    • etc ...

わかったこと

  • 開発用や本番用といったように運用しやすいよう環境をつくることができる
  • 作れるアプリの種類は4つ
    • android
    • flutter
    • ios
    • javascript
      • 今回はjavascript
  • APIはアプリとは異なるランタイムを選べる(lambdaのランタイムですね)
    • .NET Core 3.1
    • Go
    • Java
    • NodeJS
    • Python
  • APIの構成は、APIGateway, dynamodb, lambda
    • 認証も入ると、Amazon Cognitoも
    • Lambda実行ロールなどの必要なIAMロールも作られる
      • amplifyがcloud9からIAMの権限をもらう(一時的に使うクレデンシャルをもらう)
      • cloud9もcloud9実行ユーザーからクレデンシャルをもらってやる
  • Amplifyでは初期化やホスティングなどの操作に伴って関連するAWSリソースを作成するCloudFormationが実行されるとのこと
  • 初期化から公開までのamplifyのコマンド
    • 初期化: amplify init
    • アプリで使うAPIを追加: amplify add api
    • 認証機能追加: amplify add auth
    • ホスティング: amplify add hosting
    • デプロイ: amplify push
      • ホスティングして公開できるようになる
      • hostingの方式は、CICDかけてやることもできる
    • 公開: amplify publish
    • おかたづけ(作ったリソースをすべて消す): amplify delete
      • Cloud Watch Logsだけは別
  • 提供されているライブラリは、npmコマンド
    • 例: 認証画面とか作りやすくなるライブラリAmplify Libraryのインストール
      • npm install aws-amplify @aws-amplify/ui-react
  • amplifyのコマンドは基本インタラクティブに進む
    • APIリソースの追加の場合
AdministratorK:~/environment/amplify20211113 (master) $ amplify add api
? Please select from one of the below mentioned services:
  GraphQL
❯ REST

...

? Choose the runtime that you want to use: (Use arrow keys)
  .NET Core 3.1
  Go
  Java
❯ NodeJS
  Python
? Choose the function template that you want to use:

...

❯ CRUD function for DynamoDB (Integration with API Gateway)
  Hello World
  Lambda trigger
  Serverless ExpressJS function (Integration with API Gateway)

その他

  • かんたんに構築・削除できるけど、都度cliを実行するのはちょっと面倒だなと思っていたら、近日cdkで管理できるようになるとのこと
  • よりセキュアにしたい場合はAPI GatewayにWAFを導入する。もしくは、S3 CloudFrontで構築するか
  • hostingの方式のうち、amplify独自形式のホスティングは内部の詳細は明かされていない(S3使っているとか、CloudFront使っているとか)
    • 把握できるようにしたい場合は、S3ホスティングの方がいいかもとのこと
  • aws flashというメルマガで技術情報だけではなくAWSで使えるクーポンもらえるらしい
    • 最初1年間の無料枠がなくなってもこれでいろいろ試せるね

所感

  • およそ2時間ぐらいで、とてもシンプルですが、DBに読み書きするアプリをホスティングするところまで実施できました。
    • なれている人ならば、1時間ぐらいでできるかな?
  • プロトタイプを作るとき、新サービスをだしたいときには良さそう
    • CI/CDも設定できるので、最初は負債も残らなさそうでいい
  • Amplifyのようにサービスを簡単にユーザーへ提供できるサービスに触れると、アプリケーションの設計としてはインフラ・DBなどと依存が少ないようにできるようになっておきたいと思えました
    • サービスが大きくなったときに移行しやすくなる→サービスとしては信頼性を維持しやすい(はず)

Discussion