$30 off During Our Annual Pro Sale. View Details »

Running App on AppRunner

ohr486
June 27, 2021

Running App on AppRunner

2021-06-27
Drecom SRE Sunday
https://drecom.connpass.com/event/213139/

ohr486

June 27, 2021
Tweet

More Decks by ohr486

Other Decks in Technology

Transcript

  1. Running App on
    AppRunner
    2021-06-27 Drecom SRE Sunday
    slide:https://docs.google.com/presentation/d/1LpzbfhtwIhHo6t4lzhboy75L6Vj5LYpdlbPwvmmW5ek/edit?usp=sharing
    demo:https://github.com/ohr486/blog-sample-aws-app-runner

    View Slide

  2. agenda
    ● About Me
    ● Target
    ● Goal
    ● AppRunnerとは
    ● AppRunnerのアーキテクチャ
    ● Set Up AppRunner
    ● Demo
    ● AppRunnerでできること
    ● AppRunnerでできないこと
    ● AppRunnerに足りないもの
    ● まとめ

    View Slide

  3. About Me
    ● Tsunenori Ohara/おーはら
    ○ Twitter: @ohrdev
    ○ Github: ohr486
    ● Work
    ○ Drecom, SRE部 manager
    ○ SRE/Infra/Ruby,Elixir,Lisp,etc
    ● Community
    ○ tokyo.ex, ElixirConfJapan, Erlang&ElixirFest
    ○ Japan Elixir Association
    ○ meguro.rb, meguro.es, etc
    ● Hobby
    ○ 仏像制作, 丸太収集, 写経, 寺社仏閣
    ○ 人工衛星/アマチュア無線
    ○ 自転車/ダイエット/脂肪燃焼

    View Slide

  4. Target
    ● AWSでサービスを運用したい人
    ● EC2ではなくコンテナでサービスを運用したい人
    ● 簡単にサービスをセットアップしたい人
    ● Kubernetesの学習に挫折した人
    ● モチベーション
    ○ 運用サービス/システムが多すぎで管理がしんどい
    ○ アプリはコンテナで運用したい
    ○ ECS/EKSは便利だけどセットアップ・メンテする為に必要な知識が多すぎる
    ○ ぱっとセットアップできて、いい感じにマネージしてくれるマネージドサービスが出たぞ

    View Slide

  5. Goal
    ● AppRunnerについて以下を理解する
    1. AppRunnerの構成/アーキテクチャ
    2. AppRunnerでできること・できないこと
    3. AppRunnerで運用する際に気をつけること

    View Slide

  6. AppRunnerとは
    ● AWSのコンピューティング系の新サービス
    ○ ソースコードのリポジトリ or コンテナイメージから Webアプリを簡単にデプロイ
    ○ ネットワーク・ロードバランサー・ TLS証明書等の関連リソースを一括でセットアップ
    ○ 同時リクエスト数に応じてオートスケールされる
    ○ 簡単に一時停止&再開可能
    ○ サービスの実行分のみコスト請求される
    ● 今(2021/6)のところソースコードからデプロイする場合のランタイムはPython3、
    nodejs12のみ対応
    ○ これ以外のランタイムを利用したい場合は Dockerのコンテナレジストリからデプロイする必要があ

    ● 実際に動かして確認したい人はWORKSHOPがおすすめ
    ○ https://www.apprunnerworkshop.com/

    View Slide

  7. AppRunnerのアーキテクチャ
    user
    AppRunner
    ECR
    or
    initial & monitor
    code / image
    AppRunner Service
    deploy
    web console
    API
    AWS CLI
    AWS SDK
    operation
    AppRunnerサービスのVPC LoadBalancer TLS証明書
    AutoScaling
    container container container ・・・
    Custom Domain
    CloudWatch
    logs
    github
    connection

    View Slide

  8. Set Up AppRunner
    ● GitHubのソースコードからdeployする場合
    ○ WORKSHOP参照(今回のプレゼンでは割愛します )
    ● コンテナイメージからdeployする場合
    ○ アプリを作成
    ○ ECRにリポジトリを作成
    ○ AppRunnerサービスの作成
    ○ Dockerイメージの作成
    ○ ECRのリポジトリにイメージを push
    ○ (必要に応じて)カスタムドメインの登録

    View Slide

  9. Demo
    ● AWSの事前準備
    ○ ECRリポジトリ
    ○ RDS(Aurora/MySQL) ※ publicアクセス可能にしておく
    ○ IAMロール
    ● ソースコード
    ○ aws: https://github.com/ohr486/blog-sample-aws-app-runner/tree/master/aws
    ○ app: https://github.com/ohr486/blog-sample-aws-app-runner/tree/master/app
    ● アプリ仕様
    ○ https://github.com/ohr486/blog-sample-aws-app-runner/blob/master/app/app/controllers/info_c
    ontroller.rb
    ○ /info/cpu => アプリが動作するサーバー /コンテナのCPU情報を出力
    ■ cat /proc/cpuinfo
    ○ /info/mem => アプリが動作するサーバー /コンテナのメモリ情報を出力
    ■ cat /proc/meminfo

    View Slide

  10. App概要(1)
    container
    expose
    8080 (HTTP)
    rails
    puma
    MySQL driver
    entrypoint.sh
    = DB Migration =
    = Railsの起動 =
    expose
    3306 (MySQL)

    View Slide

  11. App概要(1)
    ● Dockerfile
    ○ https://github.com/ohr486/blog-sample-aws-app-runner/blob/master/app/Dockerfile.apprunne1
    ● entrypoint.sh
    ○ https://github.com/ohr486/blog-sample-aws-app-runner/blob/master/app/ep.apprunner1.sh
    ● puma.rb
    ○ https://github.com/ohr486/blog-sample-aws-app-runner/blob/master/app/config/puma1.rb

    View Slide

  12. AppRunnerでできること
    ● 負荷分散(ロードバランシング)
    ● HTTPS通信(証明書発行)
    ● オートスケーリング
    ● 自動Deploy

    View Slide

  13. AppRunnerでできないこと
    ● バッチ・タスクスケジューラー
    ○ RailsでいうところのSidekiqの様な非同期処理
    ● FireWall (WAF)
    ● WebSocket通信
    ● コンテナへ内のプロセスへのAttach/Exec(REPL)
    ● Webサーバー
    ○ nginx/apacheの様な大量のコネクションの処理機構
    ● ログ転送(サイドカー)
    ● apprunner-roadmap
    ○ https://github.com/aws/apprunner-roadmap/issues

    View Slide

  14. App概要(2) webサーバーを追加
    container
    expose
    8080 (HTTP)
    /app/tmp/sockets/puma.sock
    nginx
    listen 8080;
    upstream sock
    rails
    puma
    bind
    unix domain sock
    MySQL driver
    entrypoint.sh
    = DB Migration =
    = Railsの起動 =
    = nginxの起動 =
    expose
    3306 (MySQL)
    proxy

    View Slide

  15. App概要(3) ログコレクタを追加
    container
    expose
    8080 (HTTP)
    /app/tmp/sockets/puma.sock
    nginx
    listen 8080;
    upstream sock
    rails
    puma
    bind
    unix domain sock
    MySQL driver
    entrypoint.sh
    = fluentdの起動 =
    = DB Migration =
    = Railsの起動 =
    = nginxの起動 =
    expose
    3306 (MySQL)
    logs
    fluentd
    expose
    24224 (fluentd)

    View Slide

  16. AppRunnerに足りないもの
    ● WebAppの運用上困るもの/こと
    ○ 選択できるCPU/Memoryのバリエーション(1vCPU/2vCPU, 2GB/3GB/4GB)が少ない
    ○ Dockerイメージ(Dockerfile)が複雑になる(ベストプラクティスから逸脱する )
    ■ https://cloud.google.com/architecture/best-practices-for-building-containers?hl=ja
    ○ Dockerで複数のプロセスを起動するので何かしらのプロセス管理の機構が必要
    ■ https://matsuand.github.io/docs.docker.jp.onthefly/config/containers/multi-service_contai
    ner/
    ○ Blue/Green Deploy・カナリアリリースの仕組み
    ■ AWSの既存サービス(Route53 etc)を組み合わせてがんばればなんとかなるけど、煩雑にな

    ● セキュリティ上困るもの/こと
    ○ AppRunnerからPrivateなSubnetへのアクセスができない

    View Slide

  17. App概要(4) ネットワーク
    AWSのネットワーク
    AppRunnerサービスのVPC LoadBalancer
    AutoScaling
    container
    運用アカウントのネットワーク
    運用サービスのVPC
    publicなsubnet
    privateなsubnet
    通信できない
    通信可能
    RDS ElastiCache
    internet
    RDS ElastiCache
    Aurora
    Serverless
    仕様上privateな
    subnetにDBを配
    置できない
    DBはprivateな
    subnetに配置し
    たいができない

    View Slide

  18. まとめ
    ● AppRunnerの概要について紹介しました
    ● ソース/Dockerイメージから簡単にWebAppに必要なリソース一式をdeployできる
    事を開設しました
    ● ただし今(2021/6)時点では本番運用に足りない機能・仕組みが散見します
    ○ FireWall, ログ転送, バッチ, WebSocket, etc
    ○ Privateなネットワークへのアクセス
    ○ マシンspec(vCPU/Mem)のバリエーション
    ○ etc
    ● AWSの改善に期待しましょう

    View Slide