jtwp470’s blog

日記とかプヨグヤミングとか

AWS App Mesh を触ってみる

AWS App MeshというAWS上のマイクロサービスのアプリケーション間の通信を監視、制御できるサービスメッシュがパブリックプレビューとしてリリースされていましたので簡単に触ってみました。

App Meshでは、アプリケーションの可視化や通信制御などにはオープンソースで開発されていて、最近CNCFから卒業したEnvoyを利用しているようです。

www.cncf.io

blog.envoyproxy.io

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で可視化できるようになったら続きを書くかもです。