App Runnerをcdk deploy一発でデプロイする(ECR版)
概要
App Runnerがどんな感じかを知るために、
cdk deploy
コマンドを1度実行するだけでデプロイできるようにしてみました。
App Runnnerには、マネージドランタイムというDocker(ECR)を使わなくてもデプロイできる方法と、ECRからデプロイする方法があるのですが(多分)、今回はECSとの比較するという観点も少しあるのでECRからデプロイする方法を採用しています。
※今回の記事ではECSとの比較はしません
CDKのコード
L2コンストラクタ
L2コンストラクタで実装しようとドキュメント(https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apprunner-readme.html)を見るとこんな感じに書いてありました。
→アルファ版を使ってみようと思います。
install aws-apprunner-alpha
npm i @aws-cdk/aws-apprunner-alpha
実装
ソースコードはこちらに置いてあります。
ECRへのPUSH
/**
* ECR関連
*/
// リポジトリの作成
const repository = new ecr.Repository(this, "cdk-app-runner-sample-repo", {
repositoryName: 'cdk-app-runner-sample-repo',
removalPolicy: RemovalPolicy.DESTROY
});
// tag
const tag = generateRandomString();
// ビルド to CDKデフォルトリポジトリ
const image = new DockerImageAsset(this, 'CDKAppRunnerSampleImage', {
directory: '../app',
platform: Platform.LINUX_AMD64, // App RunnerがARMが対応していないっぽい
});
// ビルドしたイメージをコピー
new ecrdeploy.ECRDeployment(this, 'DeploySampleECRImage', {
src: new ecrdeploy.DockerImageName(image.imageUri),
dest: new ecrdeploy.DockerImageName(repository.repositoryUri + ':' + tag),
});
ecrdeployを使うことで指定のリポジトリへのコピーをすることができます。CI/CDパイプラインを作る際はタグをGitのコミットIDにしたりするのでCodeBuildやGitHubAcitionsでECRへのビルド/プッシュをすることが多いかと思いますが、簡易的にECRを使う場合はシェルなしでECRのPUSHまで行えるので気に入っています。
App Runner本体
最小限の実装です。
new apprunner.Service(this, 'AppRunnerSampleService', {
source: apprunner.Source.fromEcr({
imageConfiguration: {
port: 80, // Webサーバーのポート
},
repository,
tag: tag,
}),
})
デプロイ
credencialsとREGION等をセットして、デプロイの実行をします。
cdk deploy
経過
イメージのpullに時間がかかる
App Runnerのマネージメントコンソールの画面で様子を見ていたら、300MBくらいのイメージのpullに6分くらい時間がかかっていました(pull開始のログからアプリケーションログが出るまでの時間の差が6分くらいだった)。これはECSとかのケースと比べると随分遅い感覚ですが、初回のService構築時だけはネットワーク関連のリソース作成とかで時間がかかるのかもしれません。2回目以降のデプロイではどうかは別途試してみたいですね。
→CreateServiceとUpdateServiceが遅いIssueも上がっているみたいです。
ARMのイメージはデプロイできなかった
ARMでECRへpushしていたらアプリケーションのエラーが発生しました。半年前くらいの記事ではARM対応していないとあったのでまだ未対応なのかもしれません。
→未対応でIssueが上がっている状態のようです。
デプロイ成功
マネージメントコンソール:
画面:
参考
最後に
cdk deploy
するだけでApp Runnerをデプロイすることができました。
負荷をかけてスケーリングを調査したり色々App Runnerについて調べたくなってきたので、良い足掛かりになった気がします。
誰かの参考になれば幸いです。
Discussion