😎

AWS Copilot × App Runner で確認環境をゼロから15分で構築

2022/07/31に公開

はじめに

対象読者(実施時2022年2月頃の私の状況)

下記のような方の参考になれば幸いです。

  • サクッと短時間でWebアプリケーションのデザインや動作の確認環境をスポットで立ち上げる必要がある人
  • 検証用のステージング環境はおろか、ちゃんとしたデプロイ手順書もインフラ構成資料もなく、本番と同一構成の環境をゼロから構築するのが絶望的な人
  • サーバレス&Docker初心者

背景(私の場合)

これまで開発が低頻度のコーポレートサイトを新卒採用に合わせてリニューアルすることになりました。今回は受け入れ確認のための関係者が複数おり、非同期な確認が必要です。しかも、開発環境(開発者のローカルPC環境)と本番環境(AWS)しかなく、関係者の確認のためのステージング環境はありません。幸い、対象のコーポレートサイトはHTMLファイルをnginxで静的ホスティングしているだけの単純な構成になります。

ゴール設定

  • ステージング環境のないコーポレートサイトの確認環境を短時間で一時的に構築する
  • 利用(確認)が終了したら関連リソースを根こそぎ一発で削除する

技術選定

AWS Copilot(App Runner)以外の手段として下記が上げられましたが、

  1. ngrok
  2. 静的Webサイトホスティング
    • S3
    • AWS Amplify (+ GitHub)

設定したゴールを満たしやすいかどうか以外にも、
・ 環境を分離し、開発者と確認者の作業タイミングを合わせることなく双方の作業を実施できるか
・ 単純な構成とは言え、nginxの設定も考慮した環境構築ができるか
・ 将来的に運用しやすいか(CI/CDと親和性があるか)

を勘案し、今回は選択しませんでした。

初回準備(全て導入&設定済みであればステップ1へ)

1. 各種CLIのインストール

※詳細なインストール手順は割愛します

  • aws cli
  • copilot-cli

2. Docker Desktopのインストール

※詳細なインストール手順は割愛します
dockerコマンド(Docker Engine)が入っていて、imageのbuildができればOKです。

3. AWS認証情報の設定

IAMユーザーの作成

name: sandbox-copilot
role: AdministratorAccess
認証情報タイプ:アクセスキー

認証情報(profile)の設定

aws configure --profile sandbox-copilot
# IAMユーザーの作成でDLしたCSVの情報を登録します

cat ~/.aws/credentials
# 設定内容の表示確認します

ステップ1: Dockerfileの作成

適当なwork directoryで下記の構成にします。

├── Dockerfile
├── copilot                       # ステップ2のコマンド実行で自動で作成されます
│   └── nginx
│       └── manifest.yml
└── public                         # コーポレートサイトを構成する静的なコンテンツ一式を置くと仮定します
    ├── about
    ├── company
    ├── css
    ├── docs
    ├── form
    ├── img
    ├── inc
    ├── index.html
    ├── js
    ├── logo
    ├── news
    ├── recruit
    └── service

Dockerfileの中身は下記のように記載します。
今回は単純な構成のため、この数行でOKでした。

FROM public.ecr.aws/nginx/nginx:1.19
EXPOSE 80
COPY public /usr/share/nginx/html
  • 利用するベースのnginx imageにAmazon ECR Public Galleryを採用
  • デフォルト設定で、publicをルートディレクトリに設定

たったこれだけで全ての準備が完了な環境構築体験に正直感動しました。

ステップ2: manifestの作成からテスト環境のデプロイまで

下記コマンドを実行するだけです。

export AWS_PROFILE=sandbox-copilot 
copilot init

copilot init で実施されることは以下の通りです。

  1. CloudFormationで設定済み関連リソースの自動作成
  2. ローカル環境でDocker Build
  3. ECRにPush

また、途中の入力と選択肢は次の通り(Request-Driven Web Service = App Runnerを選択)です。

Application name: demo-corp-site
Workload type: Request-Driven Web Service
Service name: nginx

最後にテスト環境にデプロイするか聞かれるので、

Would you like to deploy a test environment? [? for help] (y/N)

ここまで来たら、迷わずy。後は信じて待ちましょう。
完了(約15分)すると、最後にアクセス先URL(https化済み!)が出力されます。
とても簡単です。

修正して再デプロイする場合のコマンドは次の通りです。

copilot deploy --name nginx --env test

ステップ3: AWSに作成した関連リソース一括削除

これも、下記コマンドを実行するだけです。最後までとても簡単でした。

copilot app delete

最後に

かかったインフラ費用

合計$0.12 とてもリーズナブルでした(笑)

AWSサービス コスト($)
App Runner 0.1124119335
Key Management Service 0.0089285712
CloudWatch 0.0006189639
S3 0.0002750180
EC2 Container Registry (ECR) 0.0000776346
合計 0.1223121212

今後の展望

CI/CDパイプラインと組み合わせて、なるべく開発者や関係者間のタイミング調整といった手間を介さない開発フローとして、正式導入を検討したいです。

Discussion