AWS App Mesh を触ってみる
AWS App MeshというAWS上のマイクロサービスのアプリケーション間の通信を監視、制御できるサービスメッシュがパブリックプレビューとしてリリースされていましたので簡単に触ってみました。
App Meshでは、アプリケーションの可視化や通信制御などにはオープンソースで開発されていて、最近CNCFから卒業したEnvoyを利用しているようです。
App Mesh を触ってみる
今回は
github.com
に則ってApp Meshを触ってみます。
準備
最新版のAWS CLIをインストールしてきます。この記事を執筆した際は、後に利用する aws appmesh
というサブコマンドがHomebrewで入る最新版の 1.16.60 には入っていなかったため、pip
でその時の最新版 1.16.68 をインストールしました。
You must use at least version 1.16.65 of the AWS CLI with App Mesh. To install the latest version of the AWS CLI, see Installing the AWS Command Line Interface in the AWS Command Line Interface User Guide. (とあるのでAWS CLIが1.16.65 以上であれば入っているそうです)
つづいて、App Meshを触るためにAWSの情報を設定します。
export AWS_PROFILE=<aws-profile for aws-cli> export AWS_REGION=<aws-region for aws-cli> export AWS_DEFAULT_REGION="$AWS_REGION"
App Meshは
- us-west-2
- us-east-1
- us-east-2
- eu-west-1
でのみサポートされているようなのでそのうちの一つのリージョンを選びましょう。私はオレゴンリージョンを選びました。
次に、以下の環境変数を設定します。
export ENVIRONMENT_NAME=appmesh-example export MESH_NAME=default export KEY_PAIR_NAME=default export ENVOY_IMAGE="111345817488.dkr.ecr.us-west-2.amazonaws.com/aws-appmesh-envoy:v1.8.0.2-beta" export CLUSTER_SIZE=5 export SERVICES_DOMAIN=default.svc.cluster.local
こんな感じ。特にキーペアの部分だけはきちんと存在するやつを登録すればokかと思います。
ここまでできたら次はVPCを作成します。今回はありがたい事にCloudformationによるテンプレートがすべて用意されていたためコマンド1発で完了します。
$ ./infrastructure/vpc.sh create-stack
つづいてApp Meshをセットアップします。
$ ./infrastructure/mesh.sh create-mesh
最後にECSクラスターを作成してみます。(EKSでも良かったのですがちょっと面倒臭そうだったので一旦ECSで)
デプロイするアプリケーションの用意
example のリポジトリには、ColorAppというアプリケーションが用意されています。それぞれ、apps/colorapp/src/{colorteller,gateway}
と用意されているため、ECRのリポジトリを作成しておき、イメージを作成しECRにプッシュしておきます。
それぞれ環境変数
export COLOR_GATEWAY_IMAGE=<image location for colorapp's gateway> export COLOR_TELLER_IMAGE=<image location for colorapp's teller>
を設定して ./deploy.sh
を実行するとプッシュまでしてくれます。
アプリのデプロイ
ECSの準備まで終わったら、virtual nodeとvirtual routerとrouteをセットアップします。
$ ./servicemesh/deploy.sh
つづいて先程用意した2つのアプリケーションをECSにデプロイします。
$ ./ecs/ecs-colorapp.sh
アプリへアクセスしてみる
適当に1台踏み台インスタンスをECSクラスターのVPC上に作成しておきます。そこにSSHしてさらにノードのどれかにSSHしてみると
<ec2-bastion-host>$ curl -s http://colorgateway.${SERVICES_DOMAIN}:9080/color
で動いている様子がわかります。
で?
App Meshもとい、Envoy Proxy を用いるとマイクロサービス間の通信の制御等ができるのでマイクロサービス毎にカナリアリリースなどができるそうですが、私自身Envoyをほとんど触ったことがなくどうやったらそれができるのかよくわかりませんでしたorz
また、メトリクスやログ、追跡といったこともできるのですが、現状ではAWS CloudWatchやX-Rayのサポートはされておらずこれから始まるようだったので特に何もできませんでしたorz
ということで現状ではできた〜(完) という全く役に立たない記事になってしまいましたがもしAWS App Meshに触れてみようという方がいたらまず先にEnvoy とそれらの可視化を先に学んでくると良さそうですw
もし、X-RayやCloudWatchで可視化できるようになったら続きを書くかもです。