Slide 1

Slide 1 text

AWS App Runnerで気軽にAPIを 作ってみる ーそして、これはどんな⼈向けなのか︖ー 2024.05.09 SATOSHI KANEYASU

Slide 2

Slide 2 text

⾃⼰紹介 ⽒名︓兼安 聡 職種︓クラウドエンジニア 最近のお仕事︓DevOpsの推進 趣味︓サックス、筋トレ、CS ゲーム 資格︓ X(Twitter)︓@satoshi256kbyte

Slide 3

Slide 3 text

はじめに • 新サービス開発やオンプレ>クラウドの技術⽀援をしています。 • ゼロからSPAとサーバーレスをやりたい声を頻繁に頂きます。 • 急激な変化は⼾惑う可能性⼤なので中間の技術が探して、 AWS App Runnerをやってみたので紹介します。 • 資料内のサンプルはPython+FastAPIです。 • AWS App Runnerを全⼒で推してるわけではありません。 • 本資料は2024.05時点で筆者が調べた範囲で書いています。

Slide 4

Slide 4 text

SPAとサーバーレスは考えることが多い • そもそもフロントとバックが別れる • ソースの書き⽅が変わる • サーバーレスなりのデプロイ⽅法が必要 • AWS SAM、CI/CDがないと負担が⾼い AWS Lambda Amazon API Gateway

Slide 5

Slide 5 text

取り急ぎアプリ側だけの変化を優先させよう AWS Lambda Amazon API Gateway • そもそもフロントとバックが別れる • ソースの書き⽅が変わる • サーバーレスなりのデプロイ⽅法が必要 • AWS SAM、CI/CDがないと負担が⾼い AWS App Runnerを使えば ここの負担が軽くなる。

Slide 6

Slide 6 text

AWS App Runnerのメリット • ECRまたはGitHubにプッシュしたら⾃動デプロイ • 何もしなくてもロードバランサーがつく • 何もしなくてもオートスケーリング(⾃動拡張) • 料⾦体系がサーバーレスに近い • アクセスされた分だけ費⽤がかかる AWS App Runner

Slide 7

Slide 7 text

AWS App Runnerのメリット • ECRまたはGitHubにプッシュしたら⾃動デプロイ • 何もしなくてもロードバランサーがつく • 何もしなくてもオートスケーリング(⾃動拡張) • 料⾦体系がサーバーレスに近い • 使った分だけ費⽤がかかる AWS App Runner 今回はこちらでお話しします。

Slide 8

Slide 8 text

AWS App Runnerのデプロイの仕組み AWS App Runnerのサービス作成画⾯でGitHub接続新規作成します。 ブラウザでポップアップをブロックしてると、新規追加を押しても何も反応しないので要注

Slide 9

Slide 9 text

AWS App Runnerのデプロイの仕組み GitHubアカウントにAWSとの接続アプリが追加されます。 連携を許可するリポジトリを指定します。(従って、勝⼿に連携されることはないと思います。)

Slide 10

Slide 10 text

AWS App Runnerのデプロイの仕組み • リポジトリ側にビルド・デプロイ⽤ファイル (apprunner.yaml)を⽤意します。 • AWS App Runnerはこのファイルに従い、 ビルドとデプロイを⾏います • FastAPIで書いています。 • uvicornでAPIを起動しています。 • 環境変数については後述します。 ライブラリの Install 環境変数 APIの起動

Slide 11

Slide 11 text

AWS App Runnerの料⾦イメージ 負荷はOSSのk6でかけています。 0.009 USD/GB 0.081 USD/vCPU 時×1〜5

Slide 12

Slide 12 text

実際の作業 • FastAPIのチュートリアルを参考にコード書きます。 • 起動コマンドで動作確認 uvicorn app.main:app --host 0.0.0.0 --port 8080 • コンテナ内のFastAPI – DockerにあるDockerfileを参考に、 apprunner.yamlを書きます。 • GitHubにプッシュ。 • AWS App Runnerを設定、GitHubを⾒にいきデプロイ。

Slide 13

Slide 13 text

AWS App Runnerのここまでの感想 • GitHubとの連携までできればかなり快適 • オートスケールの反応も早く、使ってない時は本当に安い • アプリログがCloudWatch Logsに出るのでログ活⽤もしやすい

Slide 14

Slide 14 text

ここから気になるところです

Slide 15

Slide 15 text

⼀⾏︖で起動コマンドを書かないと、 環境変数をYAMLに書かなければならない 環境変数のボタンがない

Slide 16

Slide 16 text

⼀⾏︖で起動コマンドを書かないと、 環境変数をYAMLに書かなければならない 環境変数 このファイルはGitHubにプッシュするので、 ここに環境変数を書くのは抵抗感を感じる。 パラメータストアやSecretsManager との連携は可能。

Slide 17

Slide 17 text

YAMLが気になるなら、 コンテナレジストリの⽅がよいかも

Slide 18

Slide 18 text

RDSなどと連携させるのに、 VPCコネクタという機能が必要 Amazon Aurora AWS App Runner Virtual private cloud (VPC) Public subnet Private subnet <VPCコネクタ> セキュティグループもあり VPCコネクタからの 通信許可が必要 App Runner⾃体はあくまでパブリックにいる。 App Runnerの送信をVPCに向けないとPrivate Subnet内のRDSとの通信はできない。 送信をVPCに向けるとそのままだと外部との通信ができなくなるので、NAT Gatewayなどが必要になる。

Slide 19

Slide 19 text

以上踏まえてどんな⼈にお勧めなのか

Slide 20

Slide 20 text

コンテナ化を進めていく⼈にお勧めかと AWS App Runner AWS Lambda Amazon API Gateway Amazon Elastic Kubernetes Service (Amazon EKS) Amazon Elastic Container Service (Amazon ECS) コンテナの道 サーバーレスの道

Slide 21

Slide 21 text

理由 • AWS App Runner⾃体は全体的にコンテナっぽい • 現状Amazon Cognitoなどの連携もできないので、 早い段階でコンテナかアプリの⼒でガシガシ実装していくと予想 • そうするとサーバーレスに移⾏するメリットが薄くなる

Slide 22

Slide 22 text

AWS App Runnerを⻑く使い続けられるか︖ • 若⼲の発展途上感とブラックボックス感を感じるので、 あくまでSIer向けの技術⽀援という観点だと微妙 • Elastic Beanstalkで苦労したので・・・ • 保守フェーズでの引き継ぎに苦労する気がする • ⾃⾝で選び、開発できるなら⽴場なら話は別 • ⾃分で開発していいのなら選ぶことは⼤いにある

Slide 23

Slide 23 text

まとめ • AWS App Runnerは⼿軽で格安 • コンテナ系技術で攻めていきたいなら⾜掛かりとしてアリ • ⾃分で開発できるならアリ、引き継ぎ伴うならちょっと待って • いざとなったら移⾏することは意識しておく⽅よさげ • なので、⼩さめなシステム、適度に分割されてるシステムと相 性がよさそう

Slide 24

Slide 24 text

ありがとうございました。