© 2023, Amazon Web Services, Inc. or its affiliates.© 2023, Amazon Web Services, Inc. or its affiliates.金森政雄Solutions Architect, DevAxAmazon Web Services Japan G.K開発者のためのAWS の始め方2023年最新版
View Slide
© 2023, Amazon Web Services, Inc. or its affiliates.自己紹介• 金森 政雄Ø 所属/役職 :DevAx(Developer Acceleration) チームソリューションアーキテクトØ 好きなサービスAmazon ElasticContainer ServiceAWS Step Functions AWS Fault InjectionSimulator
© 2023, Amazon Web Services, Inc. or its affiliates.このセッションでお話しすること• 皆さんのアプリケーション開発にクラウドがどのように役⽴つのか• AWS でアプリケーション開発を始めるときの選択肢のご紹介• クラウドでのアプリケーション開発において意識していただきたいこと(本当は話したいけど)お話ししないこと• AWS のアカウントの作り⽅などの最も基礎的なところ• DevOps、セキュリティとガバナンスなどの実運⽤/⾃動化の話3
© 2023, Amazon Web Services, Inc. or its affiliates.© 2023, Amazon Web Services, Inc. or its affiliates.現代のアプリケーションに求められるもの4
© 2023, Amazon Web Services, Inc. or its affiliates.質問5皆さんのアプリケーションは、どのくらいの頻度でデプロイされていますか?
© 2023, Amazon Web Services, Inc. or its affiliates. 6>150, 000, 000Amazonにおける1年間のデプロイ数平均すると1秒間に4.5回(0.21秒ごと)にデプロイ
© 2023, Amazon Web Services, Inc. or its affiliates. 8デプロイ頻度の低下リリース速度の低下障害が増え、復旧に時間がかかる低いアジリティの影響0204060RED YELLOW GREENCIOによるIT プロジェクトのリスク評価2021 (64% Risk)6兆ドル以上世界全体のIT障害のコスト
© 2023, Amazon Web Services, Inc. or its affiliates.『』“…innovation is now recognized as thesingle most important ingredient in anymodern economy…”イノベーション こそが近代経済において最も重要な要素と考えられている。競合よりも早く、新しい波を創っていくことが重要
© 2023, Amazon Web Services, Inc. or its affiliates.イノベーションがビジネスを進化させる新たなマーケット新たな顧客価値New economics新たなデジタル製品とサービス
© 2023, Amazon Web Services, Inc. or its affiliates.ListenIdeaExperimentInnovationFlywheel実験がイノベーションを加速する
© 2023, Amazon Web Services, Inc. or its affiliates.⽅法、プロセス、ツール、組織構造などがアジリティを阻害しているDevOps は組織的な変化であり、単なるツールの変更ではない開発者はモダンな開発⼿法使⽤した、モダンアプリケーションを構築できるようになる必要がある開発者は拡張可能でセルフサービスなプラットフォームを必要とする⾃動化とテストにより継続的なデリバリをサポートしないと、⾃信を持った開発は難しいアジリティが低下する理由...
© 2023, Amazon Web Services, Inc. or its affiliates.Self-service Platformswithout Gatekeepers何千人もの人々が大胆に実験や実行が可能な、強力なセルフサービスプラットフォームを作り出しているそして、Amazonでもそれが使われている
© 2023, Amazon Web Services, Inc. or its affiliates. 16Amazon Web Serviceとは
© 2023, Amazon Web Services, Inc. or its affiliates.Amazon が、ビジネス課題解決のために作り上げたITを誰でもサービスとして利⽤できるようにしたもの⼀般的にはクラウドコンピューティングと呼ばれているAWS (Amazon Web Services) とは
© 2023, Amazon Web Services, Inc. or its affiliates.クラウドとは新しいITリソース利⽤のカタチ必要な時に、必要なだけ、低価格でITリソースを提供
© 2023, Amazon Web Services, Inc. or its affiliates.Amazon Web Serviceとはデータセンターストレージ機器サーバーü 実際の使⽤分のみ⽀払いü 市場投⼊と俊敏性の改善ü 初期投資不要ü スピード ü 容易なスケールアップ&ダウンü 低額の変動費サービス化予め⼤規模に投資し準備する 必要な時に、必要なだけ、低価格で
© 2023, Amazon Web Services, Inc. or its affiliates.マネージドサービスでさらに運⽤コストを低減ビジネスの本質ではない作業はAWSにアウトソースし運用コストを削減、サービス開発やアプリ構築などの作業に注力AWSサービスの一例• ロードバランサー(Elastic Load Balancing)• Data Warehouse(Amazon Redshift)• Hadoop/Spark (Amazon EMR)• メールサービス (Amazon Simple Email Service)• VDI(Amazon WorkSpaces,Amazon AppStream 2.0)• IoT (AWS IoT):
© 2023, Amazon Web Services, Inc. or its affiliates.AWSサービスの本質はビルディングブロック。サービスを組み合わせることで、素早くアプリケーション構築が可能
© 2023, Amazon Web Services, Inc. or its affiliates.AWS は幅広い選択肢を提供
© 2023, Amazon Web Services, Inc. or its affiliates.200 以上のサービスAWS は幅広い選択肢を提供
© 2023, Amazon Web Services, Inc. or its affiliates.© 2023, Amazon Web Services, Inc. or its affiliates.どこから始めれば良い?24
© 2023, Amazon Web Services, Inc. or its affiliates.やりたいこと別 AWS 開発の始め⽅• よくあるWeb アプリケーションフレームワークor コンテナ化されたWeb アプリケーションを開発したい• フロントエンド/モバイルのアプリケーションを開発したい• 開発環境やCI/CD が統合された開発環境が欲しい25
© 2023, Amazon Web Services, Inc. or its affiliates.やりたいこと別 AWS 開発の始め⽅• よくあるWeb アプリケーションフレームワークor コンテナ化されたWeb アプリケーションを開発したい• フロントエンド/モバイルのアプリケーションを開発したい• 開発環境やCI/CD が統合された開発環境が欲しい26
© 2023, Amazon Web Services, Inc. or its affiliates.AWS サービスを組み合わせてインフラを構築柔軟性が高いVPC (ネットワーク)Fargate (コンピュート)ECS (オーケストレーション)ALB (ロードバランサ)AWS Auto Scaling (オートスケール)CodeBuild (CI/CD)手間がかかる
© 2023, Amazon Web Services, Inc. or its affiliates.構築済みのインフラにすぐにデプロイAWS App Runnerインフラや AWS についての経験がなくても、コンテナ化されたウェブアプリケーションや API を簡単かつ迅速に AWS 上で動かせるサービス
© 2023, Amazon Web Services, Inc. or its affiliates.ソースコードリポジトリ既存ツールを用いたコンテナイメージのビルドコンテナイメージをECR にプッシュ開発チームApp Runner によるアプリケーションのビルド自動実行アプリケーションのデプロイorAWS Copilot CLI からのデプロイにも対応柔軟なアプリケーションのビルドとデプロイ
© 2023, Amazon Web Services, Inc. or its affiliates.AWS App Runner の仕様概略• ソースコード/イメージの変更を検知して⾃動でB/G デプロイ• トラフィック量に応じた⾃動スケール• ログとメトリクスの⾃動収集• 任意のVPC への接続(DB などの閉域の資源への接続)• TLSの⾃動設定や各コンテナの独⽴した実⾏などのセキュリティ• VPC からのみアクセスできるプライベートエンドポイント• 環境変数やカスタムドメイン• 料⾦ -> コンテナインスタンス課⾦+ アドオン課⾦( https://aws.amazon.com/jp/apprunner/pricing/ を参照)30
© 2023, Amazon Web Services, Inc. or its affiliates.デモApp RunnerGitHub RepoGitHubコンテナインスタンスロードバランサーネットワーク (VPC)App Runner
© 2023, Amazon Web Services, Inc. or its affiliates.デモコンテナインスタンスロードバランサーネットワーク (VPC)App Runnerエンドユーザー デフォルトドメインhttps://xxxxxxxx..awsapprunner.com
© 2023, Amazon Web Services, Inc. or its affiliates.デモ33Hello World と表⽰/出⼒Node.js 製3000 番ポートnpm install で依存関係を解決npm start で起動
© 2023, Amazon Web Services, Inc. or its affiliates.やりたいこと別 AWS 開発の始め⽅• よくあるWeb アプリケーションフレームワークor コンテナ化されたWeb アプリケーションを開発したい• フロントエンド/モバイルのアプリケーションを開発したい• 開発環境やCI/CD が統合された開発環境が欲しい34
© 2023, Amazon Web Services, Inc. or its affiliates.AWS Amplifyフロントエンド開発者がアプリをビルド、デプロイ、スケールするためのツールを提供ビルドバックエンドの素早い構築フロントエンドのシームレスな作成と接続デプロイバックエンドスケールAWS CDK を使⽤したリソースの上書き、追加、エクスポート
© 2023, Amazon Web Services, Inc. or its affiliates.AWS Amplify開発者のニーズに合わせて作られたツールやサービスAWS Amplify Studio• アプリのバックエンドを視覚的に構成• データのモデル化• 認証とクラウドストレージの設定• AWS Amplify CLIをベースに構築• AWS CDK を使⽤してカスタマイズし、既存の CI/CD と統合可能• 数⼗種類のビルド済みコンポーネント(ボタン、フォーム、など)を使って、フロントエンド UI の視覚的な構築• Figma からデザインを React のコードとしてインポートAWS Amplify Libraries• アプリを新規または既存の AWS サービスに接続• 認証、ストレージ、REST、GraphQL、オフライン、AI/ML、位置情報、関数などのライブラリにより、機能豊富なアプリケーションを構築可能• JavaScript、React、Angular、Vue、React Native、Flutter、iOS、Androidに対応• ユースケース中⼼で、使いやすく、安全なライブラリAWS Amplify Hosting• Amazon の信頼性の⾼いコンテンツデリバリーネットワークを通じて提供される、Webアプリケーションのデプロイとホスティングのためのフルマネージドサービス• 静的レンダリングとサーバーサイドレンダリング(SSR)React、Angular、Vue、Next.js• CI/CD ワークフローを内蔵• フロントエンドとバックエンドを⼀度にデプロイする Git ワークフロー
© 2023, Amazon Web Services, Inc. or its affiliates.AWS Amplify を使ったビルド12の機能カテゴリにわたるフルスタックデベロッパーの経験ビルドAWSAmplify CLIAWSAmplify StudioAWSAmplify libraries機能カテゴリ
© 2023, Amazon Web Services, Inc. or its affiliates.これからAmplify を始めてみようという⽅へ40AWS Hands-on for Begineershttps://bit.ly/3I925oo• 短い動画での解説付きハンズオン• 無償で好きな時に始められます!
© 2023, Amazon Web Services, Inc. or its affiliates.やりたいこと別 AWS 開発の始め⽅• よくあるWeb アプリケーションフレームワークor コンテナ化されたWeb アプリケーションを開発したい• フロントエンド/モバイルのアプリケーションを開発したい• 開発環境やCI/CD が統合された開発環境が欲しい41
© 2023, Amazon Web Services, Inc. or its affiliates.Amazon CodeCatalyst: 統合ソフトウェア開発サービス42ü マネージドü オールインワンü 統合されているü セキュリティ重視ü フレキシブルü さらにもっと計画プロジェクトマネジメントコラボレーションコードビルドテスト… デプロイ
© 2023, Amazon Web Services, Inc. or its affiliates.Amazon CodeCatalyst: メリット43プロジェクトのセットアップを加速⽇々のワークフローを⾃動化⾃動化された環境スムーズなコラボレーション
© 2023, Amazon Web Services, Inc. or its affiliates.プロジェクトのセットアップを加速44統合プロジェクトツールを数分でセットアップ適切に設計されたアプリケーションパターンのライブラリから選択GitHub やJiraを使い続けることも既存のプロジェクトの作業を継続することも
© 2023, Amazon Web Services, Inc. or its affiliates.⽇々のワークフローを⾃動化45デプロイメントの⾃動化 セキュアなリリース⾃動化ビジュアルエディターまたは YAML による作成柔軟性に優れたマネージドコンピュートでビルドGitHub アクションとの併⽤テストとレポート作成を効率化ビルドの来歴 …
© 2023, Amazon Web Services, Inc. or its affiliates.⾃動化された環境:開発環境46必要に応じて環境のサイズを変更コンテキストをすばやく切り替えるコードとして定義オンデマンドで起動⼈気の IDEを利⽤可能⾃分のコードだけに集中開発環境の作成
© 2023, Amazon Web Services, Inc. or its affiliates.⾃動化された環境:デプロイ環境47プロジェクトブループリントでIaC を⽣成サービスプロビジョニングを⾃動化環境更新を追跡するコードのデプロイを追跡する
© 2023, Amazon Web Services, Inc. or its affiliates.スムーズなコラボレーション48チームメイトをメールで招待Issueの追跡⾃動通知を設定プロジェクトのアクティビティをフォロー
© 2023, Amazon Web Services, Inc. or its affiliates.© 2023, Amazon Web Services, Inc. or its affiliates.これらのサービスを使えばアプリケーション開発がモダンになる?
© 2023, Amazon Web Services, Inc. or its affiliates.最も重要なことは何かビジネスエキスパートの要件を正しくサービスに反映することモダンアプリケーションでビジネスをドライブするビジネスのドメインモデルを正しく設計しコードに落とすことこれが最も重要なこと
© 2023, Amazon Web Services, Inc. or its affiliates.でもどうやって?o サービスが価値を提供するためにはビジネスについての理解が必要o そのためにはビジネスを理解している⼈(ドメインエキスパート)の知識が必要不可⽋o ドメインエキスパートの要件を正しくサービスに反映させる必要があるo そのためには正しくドメインモデルの設計を⾏い、実装コードに反映させる必要があるo ではドメインモデルを正しく設計するにはどうすれば良いのか
© 2023, Amazon Web Services, Inc. or its affiliates.ドメイン駆動設計 (Eric Evans - 2003)o ⾼品質なソフトウェアモデルを設計するためのソフトウェア開発⼿法o 設計における意思決定とドメイン設計の議論における技術的な⽤語の広義のフレームワークを提供o ユビキタス⾔語 ー ビジネスドメインエキスパートと開発者の間の意思疎通として利⽤される⽤語によってモデリングと設計を⾏うo 戦略的な設計のためのガイドライン境界づけられたコンテキスト、蒸留、⼤規模な構造の考察
© 2023, Amazon Web Services, Inc. or its affiliates.AWS Developer Live Show - 「ドメイン駆動設計のススメ」https://go.aws/3Q2nNgl54AWS公式YouTube Channel
© 2023, Amazon Web Services, Inc. or its affiliates.境界づけられたコンテキスト境界づけられたコンテキストは特定のモデルを適⽤できる限定された範囲。コンテキストの境界を定めることで、チームメンバーは何を⼀致させるべきで何を独⽴して開発できるのかについての理解を明確化し、共有できる。https://www.martinfowler.com/bliki/BoundedContext.htmlCustomerTicketProductProductversionCustomerProductTerritoryOpportunityPipelineSalespersonDefectSales context Support context
© 2023, Amazon Web Services, Inc. or its affiliates.コンテキストマップ 境界つけられたコンテキストだけでは、ドメインの全体像を⽰すことはできない。コンテキストマップは、境界づけられたコンテキストを統合することにより、異なるが関連するユビキタス⾔語のマッピングを処理する。DDDでは境界づけられたコンテキストを統合するための7つのパターンを説明• 共有カーネル (Shared Kernel)• 顧客/供給者の開発チーム (Customer/SupplierDevelopment Teams)• 順応者 (Conformist)• 腐敗防⽌層 (Anticorruption layer)• 別々の道 (Separate ways)• 公開ホストサービス (Open/Host service)• 公表された⾔語 (Published language)Sales context Support contextMarketing context
© 2023, Amazon Web Services, Inc. or its affiliates.作成したモデルをコードに反映• 戦術的DDD§ ドメインモデルを実装に反映する§ モデルと実装は繰り返し改善する§ ドメインモデルがビジネスロジックに対する責務を持つ§ ドメインモデルとインフラストラクチャを分離する– 依存関係逆転の原則により、ドメイン層をシステム的な関⼼ごとから分離– ヘキサゴナル/オニオン/クリーンアーキテクチャ
© 2023, Amazon Web Services, Inc. or its affiliates.参考: ヘキサゴナルアーキテクチャ63DomainModelPortsAdaptersPrimary Actor SecondaryActorHTTP RequestEvent MessageQueue…File StorageDatabaseQueue…
© 2023, Amazon Web Services, Inc. or its affiliates.参考: ヘキサゴナルアーキテクチャ64DomainModelPortsAdaptersPrimary Actor SecondaryActorHTTP RequestEvent MessageQueue…File StorageDatabaseQueue…アプリケーションはポートによって接続されるアダプタは外界との糊の役⽬を果たすアプリケーションの外側にあってアプリケーションを駆動する側をプライマリアクター、駆動される側をセカンダリーアクターと呼ぶ
© 2023, Amazon Web Services, Inc. or its affiliates.参考︓ヘキサゴナルアーキテクチャのサンプルコード• ヘキサゴナルアーキテクチャを利⽤したLambda関数のドメインモデルの実装Live§ 動画︓ https://www.youtube.com/watch?v=whQ-P05QeDQ§ 資料︓ https://pages.awscloud.com/rs/112-TZM-766/images/DEV-09_LiveCoding_with_hexagonal_architecture.pdf• ヘキサゴナルアーキテクチャを利⽤した AWS Lambda のドメインモデルオブジェクトサンプルコードhttps://github.com/aws-samples/aws-lambda-domain-model-sample
© 2023, Amazon Web Services, Inc. or its affiliates.© 2023, Amazon Web Services, Inc. or its affiliates.マネージドサービスを使うとロックインにならない?66
© 2023, Amazon Web Services, Inc. or its affiliates.マネージドサービス == ロックイン??トラディショナルモノリシックOpsトイル“⾃由”モダンFine-grainedマネージドサービス“ロックイン”⼀元的な⾒⽅では、不幸せかもしれない
© 2023, Amazon Web Services, Inc. or its affiliates.“ロックイン”にもさまざまな⾯がある• ベンダー• プロダクト• バージョン• アーキテクチャ• スキル• 法律• メンタル
© 2023, Amazon Web Services, Inc. or its affiliates.それぞれ潜在的な切り替えコストを含んでいる• ベンダー• プロダクト• バージョン• アーキテクチャ• スキル• 法律• メンタルhttps://martinfowler.com/articles/oss-lockin.htmlベンダーAからBへの切り替えにかかるコストは?他のプロダクトに移⾏するためのコストは?アップグレードの難しさは?リファクタリングの難しさは?ラーニングパスは?認知的負荷は?調整や、規制⾃体の⾒直しは可能?古くなった思い込みを捨てられるか?
© 2023, Amazon Web Services, Inc. or its affiliates.違う側⾯から⾒ることで新しい気づきを得るOSSはベンダーロックインを緩和するが、他の形式のロックインは残る(特にプロダクトとアーキテクチャ)メンタルのロックインは最も微妙で、克服するのが難しくもある
© 2023, Amazon Web Services, Inc. or its affiliates.© 2023, Amazon Web Services, Inc. or its affiliates.プロバイダの変更- サービスマッピング71
© 2023, Amazon Web Services, Inc. or its affiliates.複数のベンダが同じサービスを提供しているように⾒える72メッセージキューサーバレス関数NoSQL データベース“こちら” “あちら”仮想マシン🤔
© 2023, Amazon Web Services, Inc. or its affiliates.サービスアイコンの裏に隠れているものAmazonEventBridgeAWS、既存システム、SaaS アプリケーションを通じて⼤規模なイベント駆動型アプリケーションを構築• Global endpoints• API destinations• Archive and replay events• AWS Glue Schema Registry• Fully managed and scalable event bus• SaaS integration• Over 100 built-in event sources and targets• Decoupled event publishers and subscribers• Event filtering• Reliable event delivery• Automatic response to operational changes in AWS services• Scheduled events• Monitoring and auditing• Security and compliance機能 (ドキュメントから抜粋)加えて、サービスはそれだけで成⽴せずプラットフォームの⼀部である
© 2023, Amazon Web Services, Inc. or its affiliates.サービスマッピングはうまくいかない74ニーズとアイデアNG!実⾏環境“要求”設計“こちら” “あちら”
© 2023, Amazon Web Services, Inc. or its affiliates.© 2023, Amazon Web Services, Inc. or its affiliates.抽象化のレイヤ75
© 2023, Amazon Web Services, Inc. or its affiliates.いかなる問題も他のレベルのインダイレクションによって解決できる。David J. WheelerThe fundamental theorem of software engineering76
© 2023, Amazon Web Services, Inc. or its affiliates.共通の要素によって柔軟性を得られるJava“こちら” “あちら”API layer API layerHTTPS, JSON, OAuth, etc.
© 2023, Amazon Web Services, Inc. or its affiliates.ボトムアップの抽象化も実際にはうまくいかない78NG!ニーズとアイデア実行環境“要求”Magic layer Magic layer??設計“こちら” “あちら”ランタイムの違い最⼩公分⺟
© 2023, Amazon Web Services, Inc. or its affiliates.© 2023, Amazon Web Services, Inc. or its affiliates.パターンによって設計の意図を維持する79
© 2023, Amazon Web Services, Inc. or its affiliates.サービスマッピングの問題点80ニーズとアイデアNG!実⾏環境“要求”設計“こちら” “あちら”意図の消失
© 2023, Amazon Web Services, Inc. or its affiliates.サービス利⽤に隠れた”意図”は何か?81メッセージフィルターメッセージトランスレーターコンテンツベースのルーター受信者リスト?https://www.enterpriseintegrationpatterns.com/AmazonEventBridge
© 2023, Amazon Web Services, Inc. or its affiliates.プラットフォームのサービスだけを考えていると設計の意図が失われ、メンタルがロックインされるデザインパターンによって意図を保つことができる82
© 2023, Amazon Web Services, Inc. or its affiliates.抽象化とスイッチングコストの⾒直し84NG!意図の消失ニーズとアイデア実⾏環境“要求”Magic layer Magic layer??設計“こちら”ランタイムの違い最⼩公分⺟“あちら”
© 2023, Amazon Web Services, Inc. or its affiliates.抽象化とスイッチングコストの⾒直し85ニーズとアイデアNG!実⾏環境“要求”Magic layer Magic layer??設計意図の消失最⼩公分⺟“こちら” “あちら”意図を保持意義ある抽象化ニーズにマッチするランタイムの違いパターンデプロイ⾃動化CDK
© 2023, Amazon Web Services, Inc. or its affiliates.まとめ• まずは自分が作りたいものを素早く作れるサービスから初めてみましょう!!• 例) Web アプリ -> AWS App Runnerフロント、モバイル -> AWS Amplify開発環境を整えたい -> Amazon CodeCatalyst• 「どのサービスを使うか」ではなく、「要求を実現するための」設計が大事• パターンをうまく使って、サービスの変更のコストは抑えましょう86
© 2023, Amazon Web Services, Inc. or its affiliates.© 2023, Amazon Web Services, Inc. or its affiliates.Thank you!87Happy Coding!!