1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ECS + ECR + ALB構成からApp Runnerに移行したら、月額コストが約70%減

1
Last updated at Posted at 2026-04-05

【AWS】App Runner移行でコストが85%減

経緯

project surnivers overview_20260301.png
今まで上記の構成で個人用の技術検証サイトsurnivers.comを運用していたのですが、月間約3万円強かかってしまっていたため、App Runnerに移行してコストを抑えることにしました。

project surnivers overview_20260403.png
こちらが新しい構成図になります。

🎯 成果サマリー

移行前:ECR+ECS+ALB+他モジュール・月約35,000円
移行後:App Runner+他モジュール・月約11,500円
→ 55%モジュール削減・85%コスト削減・運用ゼロ
20260403_4.png

🏗️ Terragrunt + Terraform構成の変化(前提:Terragrunt + Terraform使用)

本記事ではTerragruntとTerraformの詳細な解説は省きますが、構成管理の前提として以下のディレクトリ構成の変化を記載します。
また、下記はGitHub上でfeatureをmasterにmergeした際に、変更があるとApplyされるようになっていますが、そこの説明も省きます。

❌削除:ecr(ECR)/, ecs(ECS)/, route(ALB)/, deploy(CodeDeploy)/, network(VPC)/最適化
✅継続:lambda(Lambda)/, log(Cloud Watch)/, statics(Cloud Front)/, storage(S3)/
✅新規:app_runner(App Runner)/

移行前(envs/prod配下)
deploy(CodeDeploy)
dynamodb(DynamoDB)
ecr(ECR)
ecs(ECS)
lambda(Lambda)
log(CloudWatch)
network(VPC関連)
routing(ALB関連)
security(Security Rules関連)
statics(CloudFront)
storage(S3)

移行前(modules/prod配下)
deploy
ecr
ecs
lambda
log
network
routing
security
statics
storage

移行後(envs/prod配下)
app_runner(App Runner)
lambda(Lambda)
log(CloudWatch)
statics(CloudFront)
storage(S3)

移行後(modules/prod配下)
app_runner
lambda
log
statics
storage

🔥 envs/app_runner/terragrunt.hcl

dependency "storage" { config_path = "../storage" }
dependency "statics" { config_path = "../statics" }

locals {
  manage_login_path  = get_env("MANAGE_LOGIN_PATH")  # ランダム英数字
  manage_logout_path = get_env("MANAGE_LOGOUT_PATH") # /manager/login→404
}

inputs = {
  service_name = "surnivers-prod-api"
  github_repository_url = "https://github.com/surnivers/surnivers"
  runtime_environment_secrets = {
    SECRET_KEY = get_env("DJANGO_SECRET_KEY_SECRET_ARN")
  }
}

🎛️ modules/prod/app_runner/main.tf

resource "aws_apprunner_service" "backend" {
  service_name = var.service_name

  source_configuration {
    authentication_configuration {
      connection_arn = local.connection_arn  # GitHub OAuth
    }
    code_repository {
      repository_url = var.github_repository_url
      runtime = "PYTHON_311"
      build_command = "python3 scripts/apprunner_build.py"
      start_command = "python3 scripts/apprunner_start.py"
      port = "8001"  # Gunicorn
    }
  }

  instance_configuration {
    cpu = "1024"    # 1 vCPU
    memory = "2048" # 2 GB
  }
}

🛡️ Djangoセキュリティ実装

✅ 管理画面:pathにはランダムパス(x7f9a2b...)を含め、かつ環境変数で設定するようにしています
✅ SECRET_KEY:Secrets Manager(環境変数)
✅ IAM最小権限:S3/DynamoDB/Cognitoスコープ限定

🌐 CloudFront手動→Terraform現実運用

  1. App Runner作成 → service_url取得
  2. CloudFront Origin: albdns → xxxxx.ap-northeast-1.awsapprunner.com
  3. statics/モジュール修正 → terragrunt apply
    この手順は一度App Runnerを作成しないと2で設定する値が不明だったため、手動の手順である2が必須になります。

⚠️ App Runner今後(重要)

2026/4/30:新規利用停止(既存継続可)
次ステップ:ECS Express Mode移行予定
本記事:移行前最適化事例

🚀 再現手順(5分)

  1. GitHub Publicリポジトリ準備
  2. terragrunt apply(app_runner/)
  3. AWS ConsoleでGitHub接続承認
  4. CloudFront Origin修正
  5. Git push → 自動デプロイ完了

💰 コスト内訳

項目 移行前 移行後 備考欄
VPC 153.68$ 3.72$
Tax 21.87$ 1.03$
ELB 18.08$ 0$
KMS 14.00$ 1.65$
WAF 12.00$ 1.43$
WorkMail 8.00$ 8.00$
S3 4.79$ 4.68$
EC2 0.15$ 12.59$ GitHub Runnerで使用
Others 7.99$ 2.59$ App Runnerはここに含まれる
合計 240.56$ 35.69$

注意点

App Runnerの今後(2026年4月時点)AWSから発表があり、2026年4月30日以降は新規のお客様は利用できなくなります(既存利用者は継続可能)。
新機能追加は止まりますが、セキュリティ更新は続くそうです。
将来的にはECS Express Modeへの移行を検討する予定です。

Terragrunt + Terraformで管理していたECS + ALB構成からApp Runnerに移行した結果、月額コストを大幅に抑えることができました。
特に「運用をシンプルにしたい」「AWS料金をなんとかしたい」と感じている方にとって、少しでも参考になれば幸いです。
同じような悩みを持つエンジニアの方、コメントいただけると励みになります。

1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?