Slide 1

Slide 1 text

Docker Image 既にあるから デプロイしたら動くんでしょ? 2023/5/17 App Runner Night @kzk_maeda

Slide 2

Slide 2 text

Kazuki Maeda @kzk_maeda SRE @atama plus AWS Community Builders AWS Startup Community Core Member 7+ years of experience of AWS Like:  Lambda / Step Functions / Glue / MWAA / Athena  最近はLlamaIndexとmomentoを触ってる 自己紹介

Slide 3

Slide 3 text

AppRunnerとの出会い

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

AppRunner App Runnerとの出会い

Slide 6

Slide 6 text

App Runner 始めました ● PaaSで運用していたサブシステムをAWSに移行することに(先月) ○ Docker deployを用いていた ● 既存のContainer Imageが活用できることに加え、Outbound IP固定化などのいく つかの要件があり、App Runnerが満たしていそうだったので利用開始

Slide 7

Slide 7 text

Docker Image 既にあるから デプロイしたら動くんでしょ?

Slide 8

Slide 8 text

甘い

Slide 9

Slide 9 text

初回構築 IaC CI/CD

Slide 10

Slide 10 text

初回構築 IaC CI/CD 二度と触れない文鎮Service 予測できないLog Group 諦めた自動デプロイ

Slide 11

Slide 11 text

ちゃんと作る

Slide 12

Slide 12 text

初回構築 IaC CI/CD それぞれでの注意点を紹介します

Slide 13

Slide 13 text

初回構築 IaC CI/CD 二度と触れない文鎮Service 予測できないLog Group 諦めた自動デプロイ

Slide 14

Slide 14 text

二度と触れない文鎮Service ● 初回のdeployでhealth checkに失敗すると、文鎮Serviceが完成! 初回構築 IaC CI/CD

Slide 15

Slide 15 text

【なぜ?】二度と触れない文鎮Service ● App RunnerはB/Gデプロイが裏側で実行される ● 一度でもhealthyになったServiceであれば、その後のデプロイで失敗しても 一つ前の状態に自動で戻してくれる ● が、初回デプロイだと戻し先がなくて困っちゃったのカナ 初回構築 IaC CI/CD https://docs.aws.amazon.com/apprunner/latest/dg/architecture.html

Slide 16

Slide 16 text

【どうする?】二度と触れない文鎮Service ● 無理です、作り直しましょう 初回構築 IaC CI/CD

Slide 17

Slide 17 text

初回構築 IaC CI/CD 二度と触れない文鎮Service 予測できないLog Group 諦めた自動デプロイ

Slide 18

Slide 18 text

予測できないLog Group ● App Runnerはデプロイすると自動でLog Groupを作成してくれる ● が、作成されるLog Groupにservice-idが含まれていて事前予測不可 ○ /aws/apprunner/service-name/service-id/service ● そして保持期間が無制限 ● そのためIaCで保持期間を設定したLog Groupが作成できない 初回構築 IaC CI/CD

Slide 19

Slide 19 text

【なぜ?】予測できないLog Group ● 仕様です ● コンソールからアプリケーションログ等を参照する機能が提供されており、 一意性担保のために service-id が必要になったんだと思われる 初回構築 IaC CI/CD https://docs.aws.amazon.com/ja_jp/apprunner/latest/dg/monitor-cwl.html

Slide 20

Slide 20 text

【どうする?】予測できないLog Group ● (Terraformの場合) ● App Runner Serviceに依存する形でLog Groupを定義 ● ログエントリが発生すると先に作成されるので、その場合は対象Resourceをimport して保持期間を修正 初回構築 IaC CI/CD

Slide 21

Slide 21 text

初回構築 IaC CI/CD 二度と触れない文鎮Service 予測できないLog Group 諦めた自動デプロイ

Slide 22

Slide 22 text

諦めた自動デプロイ ● ECRにpushしたら自動でApp Runnerにデプロイ!べんりぃ! ● ⇨ RepositoryとWorkloadを別のAWSアカウントにしていると 自動デプロイができない! 初回構築 IaC CI/CD

Slide 23

Slide 23 text

【なぜ?】諦めた自動デプロイ ● 仕様です ● なんとなく、いろいろ難しそうだなというのはわかります ● ECRのCross Account Replicationでもダメでした (pushが動いてるわけではなさそうなのでそれはそう) 初回構築 IaC CI/CD

Slide 24

Slide 24 text

【どうする?】諦めた自動デプロイ ● ① 別のCI/CDサービスを使って頑張る ○ これにより、デプロイプロセスの中で container targetのhealth checkを実行できる ○ のでApp Runnerにデプロイする際に health checkで落ちてrollbackすることや文鎮になることを防 止できるので逆にアリかもしれない ○ github actionsのサンプルはあるけど test phaseがない ● ②ECRをApp Runnerと同じアカウントに構築する 初回構築 IaC CI/CD CircleCIの例

Slide 25

Slide 25 text

まとめ

Slide 26

Slide 26 text

色々あったけど、App Runnerの抽象レベルは好きなので これからもよろしくね!