この記事の目的
筆者のつとめる会社では本番環境でApp Runnerを使っている。2022年5月現在App Runnerを実践で使っている例はほとんどないため、直面したエラーなどはこれからのApp Runnerユーザにきっと役立つはずだ。今回の記事では特にネットワーク周りのエラーについてまとめる。何かあればコメントで教えてほしい。
そもそもApp Runnerとは
App Runnerとは、2021年5月にリリースされた、AWSのherokuライクなマネージド・サービスである。
アプリケーションを超かんたんに公開できるものだ。機能としては
App Runner = ECS on Fargate(コンピューティング) + ALB(ロードバランサー) + Code Pipeline(CI/CD) + Cloud Watch(Log/監視) + ACM(証明書)
といったところだろうか。
まず、App Runnerのネットワークに関しては、VPCコネクタを使うかどうかの2通りがある。
VPCコネクタを使っていない時のトラブルシューティング
エラー1. RDSやElastiCacheなどのVPC内のリリースにアクセスできない。
「ヘルスチェックは通るが。RDSやElastiCacheに接続できない。」といったケース。
原因
App RunnerはAWSマネージドなVPCで走るため、特に設定をしないと、あなたのVPC内のリリースにはアクセスできない。これでRDSやElastiCacheに接続できなかったり、タイムアウトになったりする。
解決策: VPCコネクタを使う。
VPCコネクタを使っている時のトラブルシューティング
エラー2. App Runnerのアプリがインターネットと通信できない
原因
「VPCコネクタを使ってRDSやElastiCacheにはアクセスできるようになったが、今度はインターネットとつながらず、S3やDynamoDB、SQSといったAWSサービス、StripeやSendgridのような外部APIとうまく接続できなくなった。」というケースだ。
解決策A: NATゲートウェイを使う
(高い、いろいろ解決)
VPCコネクタを使ってApp Runnerを走らせている時、App RunnerはあなたのVPCのプライベートサブネットで走っている状況と似ている。そのためNAT Gatewayを使ってインターネットと通信できるようにする必要がある。その設定の仕方についてはこちらを参考にされたいが、ざっくりNATゲートウェイを作成
→ルートテーブルにNATゲートウェイへのルーティング追加する
でよい。
解決策B: VPCエンドポイントを使う
(安い、ユースケース限定的)
これは「AWSリソースのみに通信できればよく、インターネットと通信はしなくてもよい」時に使える。ご存知のようにNATゲートウェイはとても高いので、これで済むならこれで済ませたい。しかしインターネットと通信はできないことに留意されたい。
エラー3. App RunnerのアプリがRDSやElastiCacheに弾かれる。
「VPCコネクタを設定したのに、RDSやElastiCacheとうまく接続できない。なぜかタイムアウトになる。」というケース。(実際に筆者が困って時間を使った部分だ。)
原因
様々原因はあると思うが、今回筆者の原因を述べる。原因はセキュリティグループだった。既存のサービスで、App Runnerに変えた途端にElastiCache上のRedisにうまくつながらなくなった。
解決策: セキュリティグループを設定、許可する
VPCコネクタにはSecurityGroups
が設定できる。このセキュリティグループをRDSやElastiCacheのインバウンドで許可してあげると動いた。
まとめ
個人的に、マネージドサービス大好きなので、App Runnerの今後にはとても期待している。
GitHubのIssueでロードマップが公開されているので見てみると面白い。