[アドカレ2023]「App Runner」でコンテナアプリを爆速デプロイしてみた

はじめに

お疲れさまです。
「DENET ADVENT CALENDAR 2023」12月15日は今回で2回目を担当させていただく寺井です。

アドカレ企画概要はこちら→[アドカレ2023] DENET ADVENT CALENDAR 2023に雪が降る

あと10日でクリスマスですよ!!いよいよ迫ってきましたね~~

今回はサクッとやってみた系の記事を書かせていただきます。

経緯と目的

これまで軽くコンテナの学習を進めてきたんですけど、まだAWSのコンテナ関連サービスに全然触れられてませんでした。

参考:これまでに書いたコンテナ記事
【初心者向け】今更だけどDockerを使ってコンテナでアプリケーションを構築したい
【中級者向け】「Docker compose」でサクッと複数のコンテナを一元管理する

そこで、お手軽爆速でコンテナアプリをすぐに立ち上げられるという「AWS App Runner」を触ってみることにしました。

この記事でやること

  • 「ECR」リポジトリ作成
  • 「ECR」リポジトリにプッシュ
  • 「App Runner」でデプロイ
  • 「App Runner」カスタムドメイン機能を使って「Route53」に登録しているドメインでアクセス
    するところまでをサクッとやってみたいと思います。

Amazon ECR(Elastic Container Registry) について

セキュリティ、スケーラビリティ、信頼性を備えた AWS マネージドコンテナイメージレジストリサービスです。
Amazon Elastic Container Registry とは - Amazon ECR

「Amazon ECR」の料金

まず保存されたデータ量に対する課金があります。

  • 保存されたデータのストレージ料金
    • GB/月あたり 0.10USD

上記に加え、「リポジトリから転送されたデータ(OUT)」に対する課金がありますが、同一リージョン内の他のサービス間とのやり取りなら無料です。(App Runner含む)

詳細については以下の公式ページを確認ください。

同じリージョン内の Amazon ECR と他のサービス (Amazon EC2、AWS Lambda、AWS App Runner、AWS Fargateなど) の間でデータを転送する場合は無料です (つまり 0.00 USD/GB)。
料金 - Amazon ECR | AWS

AWS App Runner について

AWS App Runner はフルマネージド型のコンテナアプリケーションサービスであり、インフラストラクチャやコンテナの経験がなくても、ウェブアプリケーションや API サービスを構築、デプロイ、実行できます。
マネージド型のコンテナアプリケーションサービス - AWS App Runner - Amazon Web Services

「AWS App Runner」の料金

ザックリ言いますと「コンテナインスタンス」が起動している時間と、割り当てられている「vCPU」「メモリ」分料金が発生します。

  • プロビジョニングされたコンテナインスタンス
    • 0.009 USD/GB 時
  • vCPU
    • 0.081 USD/vCPU 時
  • メモリ
    • 0.009 USD/GB 時
      (東京リージョンの場合)

また「デプロイ」にかかった時間単位の費用や、「自動デプロイ」オプションなどの費用が発生します。

詳細については以下の公式ページを確認ください。

AWS App Runner の料金 – フルマネージド型のコンテナアプリケーションサービス - Amazon Web Services

準備

  • リージョンは、ap-northeast-1(東京)を利用しています。
  • 「ECR」と「App Runner」の操作に焦点を置いてますので、コンテナイメージを作成する課程やサーバの用意に関しては触れていません。
  • DockerとAWS CLIが実行可能な環境を事前にご用意ください。

やってみる

!!注意!!
リソースの命名などで所々「WordPress」という単語が出てきますが、本記事ではWordPressの構築は行いません!
決して、WordPressの構築までするのが億劫になって心が折れたわけではありませんので、予めご了承ください。

(…また今度やります。)

「ECR」でリポジトリを作成する

ECRトップページの[使用方法]から作成画面にアクセスできます。

任意のリポジトリ名を付けて[リポジトリを作成]へ進みます。

プッシュ時のスキャンやKMSの変更とかもできますが、今回はデフォルトのまま進めます。

作成が完了すれば、対象リポジトリの[プッシュコマンドの表示]から、イメージプッシュ用のコマンドが確認できます。
全て必要なので、どこかにメモっておくといいかと思います。

コンテナイメージを「ECR」にプッシュする

今回は「EC2」で準備しており、OSは「Amazon Linux 2」を使用しています。

ソースファイルがS3にあったら取り込むとき便利やなーと思ったので、S3にあげてコピーしてくる方式を取っています。

# アプリケーションのディレクトリ作成
$ mkdir apprunner-example-app
$ cd apprunner-example-app/

# S3の特定フォルダからファイルをまとめてコピーしてくる
$ aws s3 cp s3://{バケット名}/{フォルダ名}/ ./ --recursive

# ECR へのDockerクライアントの認証
$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin {アカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com

# Dockerイメージにタグを付ける
$ docker tag test-wordpress-repository:latest {アカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com/test-wordpress-repository:latest

# イメージ一覧
$ docker images
REPOSITORY                                                                    TAG       IMAGE ID       CREATED          SIZE
{アカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com/test-wordpress-repository   latest    f9fd8105db59   13 seconds ago   917MB
test-wordpress-repository                                                     latest    f9fd8105db59   13 seconds ago   917MB

# ECRにプッシュ
$ docker push {アカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com/test-wordpress-repository:latest

問題なくプッシュできていれば、ECRのコンソール上から確認できます。

これにてコンテナイメージの準備は完了です。

「App Runner」でサービスを作成する

App Runnerのトップページから[App Runner サービスを作成]に進みます。

[ソース]

先ほど作成したECRのコンテナイメージを選択します。
[参照]から対象イメージを選択するのが簡単でイイですね。

「GitHub」とかも使用できるようです。

数が多くなってきたら選ぶの大変になってくるので、ECRの対象イメージページからURIをコピーして貼り付けることもできます。

[デプロイ設定]

デプロイトリガーは[自動]とします。
これで対象のイメージがプッシュされて更新されたら自動でデプロイしてくれます。
爆速CI/CDです。

アクセスロールは面倒なので[新しいサービスロールの作成]から作ってもらいます。

※先述した「自動デプロイオプションによる料金(1 USD/アプリケーション 月)」が発生するのでご留意ください。(安

[サービスを設定]

任意のサービス名を付けて、コンピューティングインスタンスに割り当てるvCPUとメモリを設定します。
今回はデフォルトのまま進めます。

[ポート]はコンテナイメージで使用するポートを指定してください。

[Auto Scaling]

最低何台稼働させておくか、
同時実行数に基づいて何台まで増やすか、とかを決められます。

[ヘルスチェック]

ヘルスチェック周りの細かい設定が可能です。
今回はデフォルトのまま進めます。

[セキュリティ]

ここでWAFの設定ができます!!
ちょっと前に盛り上がってたアップデートですね。

AWS App Runner がセキュリティ強化のためのウェブアプリケーションファイアウォール (WAF) サポートを導入

今回は用意してないので使用せずで。

その他インスタンスロールやKMSも特に変更せずに進めます。

[ネットワーキング]

App RunnerはVPCを意識しなくてもよいサービスですが、既存のVPCにアクセスさせることもできます!

今回は使用しません。

[可観測性]

急に漢字が並びましたけど、X-Rayによる分析有効化についてです。

特に必要ないのでそのまま進めます。

これでApp Runnerの基本的な設定は完了となります。

起動確認

数分程度時間がかかるので少し待ちます。

ステータスが「Running」となっていたらデプロイ完了です。
デフォルトドメインからアクセスしてみます。

問題なくページが表示されました。👏👏👏
(うわっ…App Runnerの構築早すぎ…?

しかもHTTPSでアクセス可能です。
地味にめちゃくちゃ嬉しいやつですね!

カスタムドメインの設定

デフォルトのランダムな文字列のURLだと見栄えが悪いので、せっかくなんで最近アップデート(改善)された、カスタムドメインを設定してみます。

[カスタムドメイン]タブから[ドメインをリンク]に進みます。

「Route53」を選択すれば、登録されているホストゾーンのドメイン一覧が選択可能です。

あとはレコードタイプをALIASにして[Link domain]をポチるだけです。

次の画面にいくと、[証明書検証]とか[DNSターゲット]の設定に関して出てきますが自動でやってくれてるっぽいので、ステータスが「アクティブ」になればOKです。

対象のURLからアクセスしてみると、無事指定ドメインでアクセスできました。👏

『CNAMEならどうなるんやろ』と興味本位でやってみたところ、ちゃんとエラーがでました。

Route 53 にレコードを自動的に登録しようとしたときに次のエラーが発生しました。Route 53 アカウントにレコードを手動で追加してください: [RRSet of type CNAME with DNS name private-test.link. ゾーン private-test.link の頂点では許可されません。]

このポチりの裏側で…

「Route53」への

  • A(エイリアス)レコード
  • 証明書検証用のCNAMEレコード
    の登録が行われているようでした。

ロールバックさせてみた

『起動できないコンテナイメージが誤ってプッシュされて、自動デプロイが走っちゃった…』

なんてときもApp Runnerなら大丈夫。💪

コードや依存関係等にエラーがあってコンテナが正常に起動しない場合「App Runner」さんは自動でロールバックしてくれます!!

更新はされずに以前のサービスのまま継続してくれるので、間違ってサービス止めちゃった…という事故を防げそうです。

感想

  • VPC
  • WAF
  • ロードバランサー(SSL)
  • Auto Scaling
  • CI/CD + ロールバック
    その他諸々…

色々まとめてやってくれるのめちゃくちゃ助かりますね。

ちょっとしたアプリケーションをコンテナでサクッと。という時にうってつけのサービスだと思いました。

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

返信を残す

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

CAPTCHA