Slide 1

Slide 1 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. 濵 真⼀(はまーん)/ :track3jyo アマゾン ウェブ サービス ジャパン合同会社 シニアソリューションアーキテクト T 3 - 4 AWS App Runner を使う時に 押さえておきたい勘所 〜 Web アプリをコンテナに最適化する 〜

Slide 2

Slide 2 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Shinichi Hama (@track3jyo) Sr. Solutions Architect, Startup Amazon Web Services Japan --- • ⼤阪オフィス勤務(ほぼ家にいますが) • スタートアップ企業の⽀援 • 過去のスライド: https://speakerdeck.com/track3jyo • 最近の趣味はたい焼き作り

Slide 3

Slide 3 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. 本セッションのゴール • お⼿元の Web アプリのコードやコンテナイメージを AWS App Runner 上で動かすために最適化できるようになる

Slide 4

Slide 4 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. • App Runner がもたらすメリット • App Runner プラクティスガイド • ストレージ • SIGTERM • ロギング • 秘密情報 • 分散トレーシング アジェンダ

Slide 5

Slide 5 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS は幅広い選択肢を提供

Slide 6

Slide 6 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS は幅広い選択肢を提供 200 以上のサービス

Slide 7

Slide 7 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. ブロックのようにサービスを組み合わせて アプリケーション構築が可能

Slide 8

Slide 8 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS サービスを組み合わせてインフラを構築 柔軟性が⾼い Amazon Virtual Private Cloud (Amazon VPC) [ネットワーク] AWS Fargate [コンピュート] Amazon Elastic Container Service (Amazon ECS) [オーケストレーション] Application Load Balancer (ALB) [ロードバランサー] AWS Auto Scaling [オートスケール] AWS CodeBuild [CI/CD] ⼿間がかかる

Slide 9

Slide 9 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. 構築済みのインフラにすぐにデプロイ AWS App Runner

Slide 10

Slide 10 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. App Runner の代表的ユースケース 1. モノリスな Web アプリ AWS App Runner Amazon Aurora

Slide 11

Slide 11 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. App Runner の代表的ユースケース 2. モバイルアプリやシングルページアプリケーションの バックエンド API AWS App Runner Amazon DynamoDB データを保存 ログイン ⼀覧表⽰

Slide 12

Slide 12 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. App Runner の代表的ユースケース 3. 社内向け Web サイトや API お客様の VPC AWS App Runner 社内ネットワーク AWS Direct Connect VPC Endpoint (プライベートなエンドポイント) VPC Endpoint からのみアクセス可能

Slide 13

Slide 13 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. App Runner がもたらすメリット • 市場投⼊までの時間を短縮 • 簡単かつ迅速に Web アプリを公開 • アプリケーション開発に集中 • アプリケーションの 実⾏時間に対して課⾦

Slide 14

Slide 14 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. App Runner がもたらすメリット • 市場投⼊までの時間を短縮 • 簡単かつ迅速に Web アプリを公開 • アプリケーション開発に集中 • アプリケーションの 実⾏時間に対して課⾦

Slide 15

Slide 15 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. 簡単かつ迅速に Web アプリを公開可能 サンプル Web アプリを App Runner 上にデプロイして、 インターネットからアクセス可能になるまでの流れを デモしました

Slide 16

Slide 16 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. 簡単かつ迅速に Web アプリを公開可能 既に App Runner 上にデプロイ済みの Web アプリを 更新するときの流れをデモしました

Slide 17

Slide 17 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS App Runner GitHub Repo GitHub ソースコードベースのサービス

Slide 18

Slide 18 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. コンテナイメージベースのサービス AWS App Runner Amazon Elastic Container Registry (Amazon ECR) Image Repo

Slide 19

Slide 19 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. コンテナイメージベースのサービス AWS App Runner コンテナイメージを取得 Amazon Elastic Container Registry (Amazon ECR) Image Repo

Slide 20

Slide 20 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. コンテナイメージベースのサービス AWS App Runner コンテナインスタンス ロードバランサー AWS App Runner コンテナイメージをデプロイ Amazon Elastic Container Registry (Amazon ECR) Image Repo

Slide 21

Slide 21 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. App Runner プラクティスガイド

Slide 22

Slide 22 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. ストレージ 消えては困るデータは DB やオブジェクトストレージなどの外部ストレージへ

Slide 23

Slide 23 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. App Runner のストレージ • コンテナインスタンス終了後はアクセスできない エフェメラルなストレージ • 書き込み⾃体は可能 • 1 コンテナインスタンスあたり イメージサイズを含めて 3GB まで • 各ストレージは コンテナインスタンスに属し 他のコンテナインスタンスからは 参照できない コンテナ インスタンス AWS App Runner エフェメラル ストレージ 3GB 3GB

Slide 24

Slide 24 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. 消えては困るデータは外部ストレージへ • アプリケーションはステートレスな作りにする コンテナインスタンス ロードバランサー AWS App Runner Amazon Aurora Amazon Simple Storage Service (Amazon S3) ステートは外部ストレージに格納

Slide 25

Slide 25 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. S3 や DynamoDB への接続⽅法 • インスタンスロール (IAM Role) でアクセスを制御する コンテナインスタンス ロードバランサー サービス A Amazon S3 コンテナインスタンス ロードバランサー サービス B インスタンスロール S3 バケットへの アクセスを許可

Slide 26

Slide 26 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. VPC 内にあるサービスへの接続⽅法 • VPC コネクターを設定し、⾃⾝の VPC に接続する コンテナインスタンス ロードバランサー AWS App Runner お客様の VPC Private subnet Amazon Aurora ENI VPC コネクター プライベート接続

Slide 27

Slide 27 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. SIGTERM SIGTERM をきちんとハンドリングできる アプリケーションを実装する

Slide 28

Slide 28 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. コンテナインスタンスの停⽌指⽰ • App Runner は内部的にコンテナ内のアプリケーションに対して SIGTERM を送信 • e.g. オートスケーリングのスケールインの時 • その後タイムアウトののちに SIGKILL が送信される • SIGTERM でシャットダウンできないアプリケーションは強制終了される • 処理中のデータをロストするような不具合が発⽣しうる ①SIGTERM 送信 ②SIGKILL 送信 猶予期間 (この間に終了処理をおこなう)

Slide 29

Slide 29 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. SIGTERM をきちんとハンドリングできる アプリケーションを実装する • SIGTERM を受け取ったら 終了処理をおこなう実装を追加する • 処理中のデータの取り扱いまで含めて 設計で考慮する • Web アプリのフレームワークなどで ⼀定程度終了処理が実装済みなことも process.on('SIGTERM', () => { console.log('Caught SIGTERM, shutting down'); // TODO: ここで何か処理する process.exit(0); }); Node.js での例

Slide 30

Slide 30 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. 秘密情報 秘密情報の受け渡しには、AWS Secrets Manager を使う

Slide 31

Slide 31 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. コンテナのインスタンスの中に秘密情報を受け渡す⽅法 • コード内や App Runner の環境変数に秘密情報を直書きするのは 秘密情報の保護の観点でアンチパターン コンテナインスタンス AWS App Runner Amazon Aurora ... snip ... run: runtime-version: 3.7.7 env: - name: "DB_USER" value: "myappdbuser" - name: "DB_PASSWD" value: "mysupersecretpasswd" - name: "DB_HOST" value: "my-db...rds.amazonaws.com" - name: "DB_PORT" value: "3306" ... snip ...

Slide 32

Slide 32 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. 秘密情報の受け渡しには AWS Secrets Manager を使う コンテナインスタンス AWS App Runner Amazon Aurora AWS Secrets Manager • Secrets Managerとの統合機能を使って、透過的に秘密情報をコンテ ナインスタンスに配布する ※シークレットを更新した場合は再デプロイが必要です ... snip ... run: runtime-version: 3.7.7 secrets: - name: "DB_USER" value-from: "arn:aws:secretsmanager:...username::" - name: "DB_PASSWD" value-from: "arn:aws:secretsmanager:...password::" env: - name: "DB_HOST" value: "my-db...rds.amazonaws.com" - name: "DB_PORT" value: "3306" ... snip ...

Slide 33

Slide 33 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. ロギング ログはファイルではなく STDOUT/STDERR へ

Slide 34

Slide 34 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. ログはファイルではなく STDOUT/STDERR へ • ファイルに吐き出したログを確実に取り出すことは難しい • ログは標準出⼒ (STDOUT)・標準エラー出⼒ (STDERR) に出⼒する Twelve-Factor App はアプリケーションの出⼒ストリームの送り先やストレージについて ⼀切関知しない。 アプリケーションはログファイルに書き込んだり管理しようとするべきではない。 代わりに、それぞれの実⾏中のプロセスはイベントストリームを stdout(標準出⼒)に バッファリングせずに書きだす。 “ ” The Twelve-Factor App, ⅺ. Log ( https://12factor.net/ja/logs )

Slide 35

Slide 35 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. App Runner のログ収集 ロードバランサー AWS App Runner 開発者 App Runner コンソール コンテナインスタンス STDOUT/STDERR のログを⾃動で収集

Slide 36

Slide 36 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. App Runner のログ収集 ロードバランサー AWS App Runner 開発者 App Runner コンソール コンテナインスタンス App Runner コンソールから確認

Slide 37

Slide 37 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. App Runner のログモニタリング

Slide 38

Slide 38 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. 分散トレーシング AWS X-Ray でトレーサビリティを確保する

Slide 39

Slide 39 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS App Runner Amazon S3 クライアント Amazon Aurora AWS Lambda Amazon SQS

Slide 40

Slide 40 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. あのとき、どこで、何が起きていた︖ AWS App Runner Amazon S3 クライアント Req. POST /something Resp. 3.0 sec. Amazon Aurora AWS Lambda Amazon SQS

Slide 41

Slide 41 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. あのとき、どこで、何が起きていた︖ AWS App Runner Amazon S3 クライアント Req. POST /something Resp. 3.0 sec. Amazon Aurora AWS Lambda Amazon SQS

Slide 42

Slide 42 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. あのとき、どこで、何が起きていた︖ AWS App Runner Amazon S3 クライアント Req. POST /something Resp. 3.0 sec. . . [09/07:14:16:18] ”POST /something" 201 2950ms . . . - CPU Util. 91% - Mem Util. 55% . . Amazon Aurora AWS Lambda Amazon SQS

Slide 43

Slide 43 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. あのとき、どこで、何が起きていた︖ AWS App Runner Amazon S3 クライアント Req. POST /something Resp. 3.0 sec. ① ② ③ ④ ログとメトリクスだけでは 問題箇所の特定が困難 Amazon Aurora AWS Lambda Amazon SQS

Slide 44

Slide 44 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. システムの分散を前提とした可視化の必要性 総処理時間 最も時間を要した処理

Slide 45

Slide 45 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. 分散トレーシングとは 分散トレーシングとは、分散されたシステム間でやり取りされる 処理をトレース(=追跡)するための考え⽅やそれを実現する仕組み • マイクロサービスに限った話ではない • アプリケーションで発⽣したエラーや障害の原因特定 • パフォーマンス問題の原因特定

Slide 46

Slide 46 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS X-Ray による分散トレーシング AWS X-Ray はアプリケーションの トレースの分析・調査のための 分散トレーシングサービス • App Runner は X-Ray と統合可能 • App Runner 側はワンクリックで有効化 • アプリケーション側は OpenTelemetry で計装

Slide 47

Slide 47 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS X-Ray による分散トレーシング

Slide 48

Slide 48 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS X-Ray による分散トレーシング

Slide 49

Slide 49 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS X-Ray による分散トレーシング

Slide 50

Slide 50 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. まとめ • App Runner の特徴を知る § インフラや AWS についての経験がなくても、コンテナ化された Web アプリを 簡単かつ迅速に AWS 上で動かせるサービス • App Runner のプラクティスから学ぶ § App Runner で Web アプリを実⾏する際のポイントを知り、最適化に役⽴てる

Slide 51

Slide 51 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. App Runner の公開ロードマップ https://github.com/aws/apprunner-roadmap

Slide 52

Slide 52 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. 次の⼀歩 – ワークショップにチャレンジ - AWS App Runner Workshop https://catalog.us-east- 1.prod.workshops.aws/works hops/e801f943-aad8-4d9e- aa8a-3bcc2913340f/ja-JP/

Slide 53

Slide 53 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. 参考リンク • P24 / App Runner のストレージの考慮事項 • https://docs.aws.amazon.com/apprunner/latest/dg/develop.html#develop.considerations • P26 / App Runenr のインスタンスロールについて • https://docs.aws.amazon.com/apprunner/latest/dg/security_iam_service-with-iam.html#security_iam_service-with-iam-roles • P27 / App Runner VPC コネクターについて • https://docs.aws.amazon.com/apprunner/latest/dg/network-vpc.html • P33 / App Runner の Secrets Manager 統合について • https://aws.amazon.com/jp/blogs/containers/aws-app-runner-now-integrates-with-aws-secrets-manager-and-aws-systems- manager-parameter-store/ • P36 / App Runner でのログモニタリングについて • https://docs.aws.amazon.com/apprunner/latest/dg/monitor-cwl.html • P47 / App Runner における分散トレーシングについて • https://docs.aws.amazon.com/apprunner/latest/dg/monitor-xray.html

Slide 54

Slide 54 text

© 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. ご清聴ありがとうございました 濵 真⼀(はまーん) :track3jyo