AWS

AWS App Runnerでコンテナを自動デプロイしてみた

はじめに

こんにちは、4月からコンテナの勉強をしているomkです。
今回は1ヶ月ほど前に発表された「AWS App Runner」を触ってみました。
手軽にコンテナの実行環境を構築してくれるので非常に使いやすくて良いなという印象です。

AWS App Runnerとは

以下公式より引用。

AWS App Runner は、コンテナ化されたウェブアプリケーションや API を開発者が簡単かつ迅速にデプロイできるフルマネージド型サービスです。大規模に、しかも事前のインフラ経験を必要とせずにデプロイすることができます。ソースコードからでも、コンテナイメージからでも始められます。

Elastic Beanstalkを利用されたことがあるとわかりやすいと思いますが、ソースコードやコンテナイメージを指定して、その実行環境を作ってくれるPaaSの機能を提供してくれます。

また、ECSのように細かいタスク定義やサービスの設定が不要で、自動でAutoScalingまで設定してくれるフルマネージド型サービスです。

コンテナなので動作可否がプラットフォームの対応言語に限定されない点が良いですね。

やってみた

ECRからコンテナイメージをApp Runnerに自動でデプロイします。

事前準備

ECRリポジトリ作成

AWSコンソールからリポジトリを作成します。
タグのイミュータビリティを無効化したプライベートリポジトリを作成しました。
ここに最新の本番イメージを「latest」とタグ付けしてプッシュすることとします。

ECRリポジトリ作成

コンテナイメージ作成・ECRにプッシュ

Dockerの開発環境でコンテナイメージを作成します。
動的ページでも問題なし~ということで今回はPHPで日時を表示するWEBページを提供するWEBサーバコンテナを作成します。
また、あとで自動デプロイを行う準備として「バージョン1」という記載を入れておきます。のちほど「バージョン2」に変えて更新を行います。

Dockerfileを作成して、ビルド、ECR用にタグ付け、ECRにプッシュの流れでコンテナイメージをECRにプッシュします。

ちなみに、ECRにプッシュする際のコマンドはリポジトリの「プッシュコマンドの表示」から確認できます。

これでECR上にApp Runnerで実行するコンテナイメージを用意できました。

ECRにプッシュ

App Runnerセットアップ

準備が完了したのでApp Runnerのセットアップを行います。
App Runnerのコンソールから「サービスの作成」を選択します。

ソースに「コンテナレジストリ」を選択し、プロバイダーを「Amazon ECR」にします。URIに先程、リポジトリにプッシュしたlatestのコンテナイメージを参照させます。

デプロイを「自動」にし、新規でIAMロールを作成します。

サービス名やスペックを設定し、その他設定・タグを必要に応じて設定します。

App Runnerのセットアップはこれで完了です。
しばらく待ってみるとサービが起動しています。

App Runner起動

用意されたデフォルトドメインにアクセスしてみるとコンテナ上で実行するよう作成したWEBサービスが表示されます。

サービス

独自ドメインを利用する場合は「カスタムドメイン」から設定できます。
対象のDNSレコードにデフォルトドメインに転送する用のCNAMEと証明書の検証用のCNAMEを設定することで独自ドメインを用いたHTTPSでの接続が可能になります。

これでECRに登録したコンテナイメージがApp Runnerで実行されるようになりました。

自動デプロイ

では最後にコンテナイメージを再度プッシュして最新のコンテナがデプロイされることを確認します。

先程、App Runnerのセットアップ時に「デプロイ方法」を「自動」に設定しました。
この設定によりApp RunnerがECRへのプッシュを監視するようになり、プッシュ時に自動でデプロイしてくれます。

特に意味のない変更ですが、ソースで「バージョン1」と表示していた箇所を「バージョン2」に変えて再度ECRへプッシュします。

ECR reプッシュ

ECR上でlatestタグが更新されています。

App Runnerにアクセスするとステータスが「Running」から「Operation in progress」に変わり、デプロイが実行されていることがわかります。
イベントログ、デプロイログからそれぞれECRへのプッシュと同時刻にデプロイが実行されていることがわかります。

ログ

サービスにアクセスすると「バージョン2」の記述に変更されています。

サービス

以上でコンテナの自動デプロイが実行されていることが確認できました。

おわりに

このあとバージョン3をプッシュしたらイメージが上手く起動できなかったのですが(PHPのソースに誤りがあったため?)、自動でバージョン2にロールバックしてくれたので安心ですね。

設定することも多くなく裏側で色々動かしてくれていて、利用する側としては作業内容がほぼコンテナの開発、ECRのプッシュだけで済むので非常に楽でした。

難点としてはVPCに依存しないサービスなので他のサービスとの連携をどうしようかというところでしょうか。

以上、お付き合いありがとうございましたー。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA