目次
はじめに
こんにちは、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にプッシュ
Dockerの開発環境でコンテナイメージを作成します。
動的ページでも問題なし~ということで今回はPHPで日時を表示するWEBページを提供するWEBサーバコンテナを作成します。
また、あとで自動デプロイを行う準備として「バージョン1」という記載を入れておきます。のちほど「バージョン2」に変えて更新を行います。
Dockerfileを作成して、ビルド、ECR用にタグ付け、ECRにプッシュの流れでコンテナイメージをECRにプッシュします。
ちなみに、ECRにプッシュする際のコマンドはリポジトリの「プッシュコマンドの表示」から確認できます。
これでECR上にApp Runnerで実行するコンテナイメージを用意できました。
App Runnerセットアップ
準備が完了したのでApp Runnerのセットアップを行います。
App Runnerのコンソールから「サービスの作成」を選択します。
ソースに「コンテナレジストリ」を選択し、プロバイダーを「Amazon ECR」にします。URIに先程、リポジトリにプッシュしたlatestのコンテナイメージを参照させます。
デプロイを「自動」にし、新規でIAMロールを作成します。
サービス名やスペックを設定し、その他設定・タグを必要に応じて設定します。
App Runnerのセットアップはこれで完了です。
しばらく待ってみるとサービが起動しています。
用意されたデフォルトドメインにアクセスしてみるとコンテナ上で実行するよう作成したWEBサービスが表示されます。
独自ドメインを利用する場合は「カスタムドメイン」から設定できます。
対象のDNSレコードにデフォルトドメインに転送する用のCNAMEと証明書の検証用のCNAMEを設定することで独自ドメインを用いたHTTPSでの接続が可能になります。
これでECRに登録したコンテナイメージがApp Runnerで実行されるようになりました。
自動デプロイ
では最後にコンテナイメージを再度プッシュして最新のコンテナがデプロイされることを確認します。
先程、App Runnerのセットアップ時に「デプロイ方法」を「自動」に設定しました。
この設定によりApp RunnerがECRへのプッシュを監視するようになり、プッシュ時に自動でデプロイしてくれます。
特に意味のない変更ですが、ソースで「バージョン1」と表示していた箇所を「バージョン2」に変えて再度ECRへプッシュします。
ECR上でlatestタグが更新されています。
App Runnerにアクセスするとステータスが「Running」から「Operation in progress」に変わり、デプロイが実行されていることがわかります。
イベントログ、デプロイログからそれぞれECRへのプッシュと同時刻にデプロイが実行されていることがわかります。
サービスにアクセスすると「バージョン2」の記述に変更されています。
以上でコンテナの自動デプロイが実行されていることが確認できました。
おわりに
このあとバージョン3をプッシュしたらイメージが上手く起動できなかったのですが(PHPのソースに誤りがあったため?)、自動でバージョン2にロールバックしてくれたので安心ですね。
設定することも多くなく裏側で色々動かしてくれていて、利用する側としては作業内容がほぼコンテナの開発、ECRのプッシュだけで済むので非常に楽でした。
難点としてはVPCに依存しないサービスなので他のサービスとの連携をどうしようかというところでしょうか。
以上、お付き合いありがとうございましたー。
アーキテクト課のomkです。
AWSについて雑多に取り組んだ内容を発信しています!!