コラム
App Runnerを使ってWebアプリを簡単にデプロイする
-
TAG
App Runner AWS -
UPDATE
2023/02/20
はじめに
こんにちは。BTCクラウドCoEの竹中です。
今回はAWS App Runnerを紹介していきます。
AWSにおいてWebアプリを簡単にデプロイできるPaaSというと、代表的なものはElastic Beanstalkです。こちらはEC2やELBなどのAWSリソースを作成するため、結局それなりにインフラの知識は必要です。
ECS Fargateも広義のPaaSです。こちらもインフラリソースの管理を省力化できますが、タスク定義の作成が必要ですし、実運用を考えるとCI/CDのパイプラインを自作する必要があります。
上記のサービスはいずれも構成の自由度がある程度高い分、ユーザー側のインフラの管理責任は大きくなります。
AWS App Runnerとは
アプリケーションを簡単にデプロイできるサービスで、最も簡単な構成であればソースコードリポジトリさえ設定すればデプロイが可能です。
現在積極的な開発が行われており、2022年にも大きなアップデートがいくつかありました。
今回はそれらの新機能を使って、実際にどれくらい簡単にデプロイできるのか試してみました。
実際に使ってみる
構成
App Runnerの設定は、2022年のアップデート内容を取り入れて以下の通りとしました。
- ランタイム: Go1.18
- ソースコードプロバイダー: GitHub
- シークレット管理: Secrets Manager
- ネットワーキングモード: VPC
- データベース: MySQL
GitHubのソースコードをビルドし、Secrets ManagerからDBの接続情報を取得してアプリケーションを起動します。起動後にEC2からcurlコマンドでリクエストし、DBの値を正しく返せているか確認します。
ソースコードはこちらに格納しています。
環境構築
RDS
App Runnerからのインバウンドリクエストを許可するようSecurity Groupを設定しました。
設定の詳細は割愛します。
Secrets Manager
DBの接続情報を格納します。以下の値を設定しました。
Key | Value |
---|---|
DB_PORT | 3306 |
DB_USER | <ユーザー名> |
DB_PASSWORD | <パスワード> |
DB_HOSTNAME | <DB識別子>.xxxxxxxxxxxx.<region>.rds.amazonaws.com |
DB_NAME | <データベース名> |
IAM Role
カスタム信頼ポリシーを以下のように設定します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "tasks.apprunner.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
Roleには以下の権限をもつPolicyを付与します
{ "Statement": [ { "Action": "secretsmanager:GetSecretValue", "Effect": "Allow", "Resource": [ "arn:aws:secretsmanager:<region>:<account-id>:secret:<secret-name>*" ] } ], "Version": "2012-10-17" }
準備が整いました。実際にデプロイをしていきます。
なお、VPC ConnectorとVPC EndpointはApp Runnerの設定の中で作成していきます。
App Runnerによるデプロイ
ソースコードリポジトリの設定
GitHubからソースコードを取得するように設定します。
アプリケーションのビルド・実行コマンドの設定
yamlファイルでも設定可能ですが、今回はコンソールから設定しました。
シークレットの設定
以下のように、具体的なキーを指定して取得します。ECSのタスク定義から取得するときと同じ記法です。
arn:aws:secretsmanager:<region>:<account-id>:secret:<secret-name>-xxxxxx:DB_HOSTNAME::
IAMの設定
先ほど作成したIAM Roleを設定します。
ネットワークの設定
VPC内のリソース(RDS)にアクセスできるようにするため、VPC EndpointとVPC Connectorを作成します。
デプロイ完了しました。
動作確認
curlコマンドを実行すると、無事DBの値を取ることができています。
・Secrets Managerからのシークレットの取得
・VPC内部のリソースへの接続
ができていることが確認できました。
せっかくGitHubからコードを取得しているので、mainブランチにマージされたときに自動デプロイされるかも見てみます。
アプリのmodelを書き換えて、レスポンスにdueフィールドを含めるようにします。
PRをマージするとデプロイが始まります。
デプロイ中はレスポンスにdueは含まれませんが、デプロイが完了するとdueフィールドが含まれていることが分かります。
GitHubのmainリポジトリの更新をトリガーにデプロイを実行できることが確認できました。
まとめと今後の課題
Webアプリがとても簡単にデプロイできました。
今後の課題としては主に以下のようなものがあります。
- Blue/Greenデプロイを完了させる前にGreenの動作確認ができない
- ECRのコンテナイメージをデプロイする場合、タグを固定する必要がある(※1)
- WAFがサポートされていない(※2)
※1 筆者の環境で検証したところ、特定のイメージの特定のタグのアップデート契機に自動デプロイすることしかできず、tag immutabilityと自動デプロイの両立のためにはEventBridge + Lambdaのような追加リソースが必要になりそうです。
※2 2023/02/20現在、Comming Soonになっているのでまもなく実現されそうです!
一部不便なところはあるものの、本番環境への導入も考えられるレベルになってきていると思います。
今後のアップデートに期待したいところです。
-
PICK UP
ピックアップ
-
ピックアップコンテンツがありません
-
RANKING
人気の記事
-
-
1
AWS Secrets Managerを使用したK…
AWS Secrets Managerを使用したKubernetes Secre…
2021/08/23
-
2
AWS Lake Formationで行およびセル…
AWS Lake Formationで行およびセルレベルのきめ細かなアクセス制御…
2021/12/13
-
3
公共システムのコスト見直しのアプローチと調達仕様書…
公共システムのコスト見直しのアプローチと調達仕様書への記載事項(AWS Comp…
2023/12/21
-
4
望雲彼方に ~クラウド移行その2(インフラエンジニ…
望雲彼方に ~クラウド移行その2(インフラエンジニア編)~
2020/06/12
-
5
EKSを理解する(第3回)Pod単位のセキュリティ…
EKSを理解する(第3回)Pod単位のセキュリティグループ割り当て
2020/11/27
-
-
ARCHIVE
アーカイブ
-
- July 2024 (1)
- January 2024 (1)
- December 2023 (2)
- June 2023 (2)
- May 2023 (1)
- April 2023 (1)
- March 2023 (2)
- February 2023 (2)
- January 2023 (1)
- December 2022 (2)
- October 2022 (2)
- September 2022 (2)