概要
開発をしていると「外部からアクセスできるWebサーバをサクッと立ち上げたい!けどデプロイとか面倒!」って思いますよね?そんな時にAWS App Runnerが便利ですよって話です。
ローカルのWebサーバを外部公開したい!ってときにはngrokが便利ですよね。ここでは話しません。
AWS App Runnerとは
AWS App Runnerは、AWSが提供するフルマネージドサービスで、開発者が高速にコンテナ化アプリケーションをデプロイ、スケールすることを可能にします。ソースコードかコンテナイメージからアプリケーションを自動的に作成・運用・管理できます。デプロイメント、スケーリング、ヘルスチェック、監視等の難しかったタスクを容易に、またコスト効率よく行えます。これにより開発者は事業の本質に集中できるようになります。
AWS App Runnerの似たようなサービス
AWSやGoogle Cloudで他にも似たような価値を提供するサービスがたくさんあります。
AWS
- AWS Elastic Beanstalk: デプロイとスケーリングを自動化するフルマネージドサービスで、Webアプリケーションとサービスの実行に最適化されています。
- AWS Fargate: サーバーレスのコンテナエンジンで、EC2インスタンスのプロビジョニングや管理を気にすることなく、コンテナを実行できます。
- AWS Lambda: サーバレスコンピューティングサービスで、コードを実行して応答するために必要なすべてのインフラストラクチャと管理を自動化します。
- Amazon ECS: 高度にスケーラブルで高速なコンテナ管理サービスで、Dockerコンテナを簡単に実行できます。
Google Cloud
- Google App Engine: 完全に管理された、ゼロからスケールするサーバレスプラットフォームで、アプリケーション開発、ホスティング、スケーリングを自動化します。
- Google Cloud Run: 容易にコンテナをサーバレスで実行できるフルマネージド環境を提供します。あらゆる種類のアプリケーションやミドルウェアスタックもサポートしています。
- Google Kubernetes Engine(GKE): コンテナ化されたアプリケーションのデプロイ、スケーリング、管理を簡単にするための安全で効率的な環境を提供するKubernetesサービス。
これらの各サービスは、開発者がインフラストラクチャ管理から解放され、コードの実装に専念できるように設計されています。
個人的にイケてると思う点
AWS App RunnerとGitHubを組み合わせることで、開発者のライフがぐっと楽になります。コードを書き終えてGitHubにプッシュすると、あとはAWS App Runnerがすべて面倒を見てくれます。ビルド、テスト、デプロイまですべて自動でやってくれるんですから、これ以上ないくらいストレスフリーです。
何時間もかけて手動でデプロイする日々はもう終わり。更新を素早くユーザーに提供でき、開発者はもっと創造的なコーディングに集中できます。まさに開発者の親友とも言える機能です!
AWS App RunnerでサクッとWebサーバを立ち上げてみる
前提
MacOSを利用する手順となります。
手順
- 必要なツールをインストールします。
- Git: 既にインストールされていない場合は、Terminalで
xcode-select --install
を実行してください。 - AWS CLI: AWS公式ガイドを参照し、Homebrewなどでインストールしてください。
- GitHub CLI: Terminalで
brew install gh
を実行しましょう。 - GitHubへの接続を設定します。
- SSH鍵を生成:
ssh-keygen -t ed25519 -C "your_email@example.com"
- 公開キー(id_ed25519.pub)をコピーして、GitHubの設定からSSH Keysに追加します。
- SSH鍵を生成:
- ローカルで新しいリポジトリを作成します。
1 2 3 |
mkdir myproject cd myproject git init |
- リポジトリ内にWebページのコードを含んだ
index.html
ファイルを作成します。 -
123456789101112echo """<html><head><title>Welcome to AWS App Runner</title></head><body><h1>Hello! AWS App Runner!</h1><img src="https://images.unsplash.com/photo-1454991727061-be514eae86f7?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1470&q=80" alt="A picture of a whale" width="100%"><p>Photo by Thomas Kelley on <a href='https://unsplash.com'>Unsplash</a></p></body></html>""" > index.html
- GitHub CLIを利用して新しいリポジトリを作成します。
1 2 |
gh repo create --source $(git rev-parse --show-toplevel) --public git branch -M main |
- ローカルの変更をコミットし、GitHubにプッシュします。
1 2 3 |
git add . git commit -m "Initial commit." git push --set-upstream origin main |
- AWSにログインし、AWS CLIを用いてApp Runnerの設定を進めます。
1 2 3 4 |
aws apprunner create-connection \ --connection-name my-github-connection \ --provider-type GITHUB |
コマンド実行の後で、AWSマネジメントコンソールでの操作(ハンドシェイク)が必要となります。
AWS CLIでサービスを作成するコマンドは以下となります。
AuthenticationConfiguration
には aws apprunner create-connection
コマンドで作成されたリソースの Arn
を指定します。
※現時点(2023/10/14)ではうまくいきませんでした。おそらくは先日リリースされたWAF対応がCLIに反映されてない気がします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
aws apprunner create-service \ --service-name aws-apprunner-html-server \ --source-configuration ' { "CodeRepository": { "RepositoryUrl": "<https://github.com/your_username/your_repository>", "SourceCodeVersion": { "Type": "BRANCH", "Value": "main" }, "CodeConfiguration": { "ConfigurationSource": "REPOSITORY", "CodeConfigurationValues": { "Runtime": "PYTHON_3", "BuildCommand": "echo done", "StartCommand": "python -m http.server 8080", "RuntimeEnvironmentVariables": { "AWS_DEFAULT_REGION": "ap-northeast-1" } } } }, "AuthenticationConfiguration": { "ConnectionArn": "arn:aws:apprunner:ap-northeast-1:xxxxxxxxxxxxx:connection/my-github-connection/fd93cbf4671342fa89cc8e9f7d9f1acd" } } ' |
AWSマネジメントコンソールで確認するとデプロイが走っていることが確認できます。
AWS CLIコマンドでも確認できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
aws apprunner list-services { "ServiceSummaryList": [ { "ServiceName": "aws-apprunner-html-server", "ServiceId": "e86f7da163bc4289ab928742dd800df6", "ServiceArn": "arn:aws:apprunner:ap-northeast-1:xxxxxxxxxxxx:service/aws-apprunner-html-server/e86f7da163bc4289ab928742dd800df6", "ServiceUrl": "xxxxxxxxxxx.ap-northeast-1.awsapprunner.com", "CreatedAt": "2023-10-14T14:00:51+09:00", "UpdatedAt": "2023-10-14T14:00:51+09:00", "Status": "CREATE_FAILED" } } aws apprunner describe-service \ --service-arn arn:aws:apprunner:ap-northeast-1:xxxxxxxxxxxx:service/aws-apprunner-html-server/e86f7da163bc4289ab928742dd800df6 { "Service": { "ServiceName": "aws-apprunner-html-server", "ServiceId": "e86f7da163bc4289ab928742dd800df6", "ServiceArn": "arn:aws:apprunner:ap-northeast-1:xxxxxxxxxxxx:service/aws-apprunner-html-server/e86f7da163bc4289ab928742dd800df6", "ServiceUrl": "xxxxxxxxxx.ap-northeast-1.awsapprunner.com", "CreatedAt": "2023-10-14T14:00:51+09:00", "UpdatedAt": "2023-10-14T14:35:08+09:00", "DeletedAt": "2023-10-14T14:35:08+09:00", "Status": "DELETED", "SourceConfiguration": { "CodeRepository": { "RepositoryUrl": "<https://github.com/kai-kou/aws-apprunner-html-server>", "SourceCodeVersion": { "Type": "BRANCH", ... |
が、、、下記のエラーメッセージが表示されてデプロイに失敗するので、今回は諦めてマネジメントコンソールで作業します。
1 2 |
Web ACL not available for selected resource arn:aws:apprunner:ap-northeast-1:xxxxxxxxxxxx:service/aws-apprunner-html-server/f7926b47bba2466c9e18fd98adf20b44 |
しばらく待ってるとデプロイが完了します。
デフォルトドメイン
にアクセスするとページが表示されます。やったぜ
終わりに
今回BLOG記事を執筆するのにchatGPTさんに色々と助けてもらいました。
構築手順も提案してくれましたが、うまく動作しないケースがあり必ず検証は必要ですが、だいぶと効率化を図ることができました。
ぶっちゃけもう説明系の記事は書く必然性を感じなくなってしまいましたw
自己紹介
最後の最後に自己紹介です。
2023年2月に入社してプロダクトカンパニーにてLetroの開発にPjMとして関わっている甲斐です。
前職でQiita上でいっぱいBlog記事を書いてましたが最近はさっぱり。よかったら見てね。