筆者のつとめる会社では本番環境でApp Runnerを使っている。2022年5月現在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通りがある。
「ヘルスチェックは通るが。RDSやElastiCacheに接続できない。」といったケース。
App RunnerはAWSマネージドなVPCで走るため、特に設定をしないと、あなたのVPC内のリリースにはアクセスできない。これでRDSやElastiCacheに接続できなかったり、タイムアウトになったりする。
2022年2月のアプデでリリースされたVPCコネクタを使う。これだけ。VPCコネクタとはだが、これに関してはClassmethodさんの記事でよく解説されている。(「[アップデート] AWS App RunnerからVPCリソースへのアクセスが可能になりました!」)
しかしVPCコネクタを使うとApp Runnerはインターネットに通信できなくなる。これはエラー2
で述べる。
「VPCコネクタを使ってRDSやElastiCacheにはアクセスできるようになったが、今度はインターネットとつながらず、S3やDynamoDB、SQSといったAWSサービス、StripeやSendgridのような外部APIとうまく接続できなくなった。」というケースだ。
(高い、いろいろ解決)
VPCコネクタを使ってApp Runnerを走らせている時、App RunnerはあなたのVPCのプライベートサブネットで走っている状況と似ている。そのためNAT Gatewayを使ってインターネットと通信できるようにする必要がある。その設定の仕方についてはこちらを参考にされたいが、ざっくりNATゲートウェイを作成
→ルートテーブルにNATゲートウェイへのルーティング追加する
でよい。
(安い、ユースケース限定的) これは「AWSリソースのみに通信できればよく、インターネットと通信はしなくてもよい」時に使える。ご存知のようにNATゲートウェイはとても高いので、これで済むならこれで済ませたい。しかしインターネットと通信はできないことに留意されたい。
「VPCコネクタを設定したのに、RDSやElastiCacheとうまく接続できない。なぜかタイムアウトになる。」というケース。(実際に筆者が困って時間を使った部分だ。)
様々原因はあると思うが、今回筆者の原因を述べる。原因はセキュリティグループだった。既存のサービスで、App Runnerに変えた途端にElastiCache上のRedisにうまくつながらなくなった。
VPCコネクタにはSecurityGroups
が設定できる。このセキュリティグループをRDSやElastiCacheのインバウンドで許可してあげると動いた。
個人的に、マネージドサービス大好きなので、App Runnerの今後にはとても期待している。 GitHubのIssueでロードマップが公開されているので見てみると面白い。