ozawaです。めっきり寒くなりました。子供の保育園の送迎時はネックウォーマーにマスク、帽子と完全防備です。不審者感が増しました。
最近re:Inventのおこぼれ的なアップデートがよく出てきていますが、今回はECS関連で気になるアップデートがあったのでまとめてみます。
VPC LatticeとECSがネイティブ統合されました!
すごい!、、、とはならず感想としては「そういえばLatticeって何ができるんやろう?」でした。
よくわからないけどECSとネイティブ統合されて気になったのでこの際試してみました。
VPC Latticeとは
以下、引用
Amazon VPC Lattice とは - Amazon VPC Lattice
Amazon VPC Lattice は、アプリケーションのサービスの接続、保護、モニタリングに使用する、フルマネージド型アプリケーションネットワーキングサービスです。VPC Lattice は、単一の仮想プライベートクラウド (VPC)、または 1 つ以上のアカウントの複数の VPC で使用できます。
なるほどわからん
とりあえず色々触ってみて理解したことをまとめます。
VPC Latticeの概念
ざっくりいうと、L7でVPC跨いでもインターネット介さずにアクセスできるネットワーク空間を作れるよ! です。
例えば、とあるVPC内のリソースを他VPC内のリソースからアクセスできる構成を考えます。
この場合、VPC PeeringやTransitGatewayを用いたハブスポーク構成で、プライベートなIPネットワーク空間でアクセスできるようにする、といった方式をとることができます。
VPC Latticeの場合は、L7(HTTP/HTTPS)のネットワーク空間を定義し、関連づけたVPC同士はその空間内でプライベート(Amazonネットワーク内)にアクセスすることができます。
なので、APIだけプライベートに公開したいんやで、という際にVPC PeeringやVPCをハブスポークな構成にしなくとも済みます。
VPC Latticeは3つの概念が基本になりますので、次章でざっくり説明します。
サービスネットワーク
L7でアクセスできるネットワーク空間を定義したものをサービスネットワークと呼ぶようです。サービスネットワークはこの空間内に関連づけられたVPCをまとめたものです。
サービスネットワークに関連付けできるVPCは500個で、クロスアカウント/リージョンな構成も取れます。この辺はTransitGateway味がありますね。
サービス
VPC Latticeを用いて実際にアクセスすることができるエンドポイントを定義します。
具体的には対応するDNS名が払い出され、どのサービスネットワークに関連づけるかを設定できます。
サービスとして利用できるAWSサービスはEC2, ECS, EKS, Lambdaがあるようです。今回だとECSになります。
ターゲットグループ
AWSサービスをサービスとして利用できる、と言いましたが、実態はサービス内でルーティングするTargetGroupが必要になります。 TargetGroupでサービスをListenさせて、VPC Latticeのサービスとして登録し、これをサービスネットワークに関連づけると、このネットワーク内でプライベートにアクセスできる、といった仕組みです。
ECSとのネイティブ統合
今回のアップデートでは、ECSをサービスとして使う場合に必要だったInternal ALBが不要になり、ECSサービスの設定でVPC Latticeサービスに紐付けが可能になった、という内容です。
利用するに際してステップが省略できるのは良いですね。実際にどんな具合か試してみます。
実際にやってみた
今回は下記のような構成を作って検証しました。図は上述の図と全く同じです。
- VPC を2つ用意
- VPC-AにECSサービスを配置
- VPC-BにEC2を配置して、VPC Latticeサービスに対してcurlを叩く
ちなみにやってみたブログは実はAWSからもう出てます。ので本記事ではポイントをかいつまんで説明します。
ECSの設定
まずはECSサービスを作ります。順番としてはVPC Lattice側から設定するでもよさそうです。
VPC Lattice統合を有効化
コンソールから見ると早速項目が出来上がってますのでこちらから設定します。
ポイントとしては、この設定に対してインフラストラクチャロールというものを割り当てる必要があります。
中身としてはECSからVPC Latticeを使えるように知るためのポリシーを割り当てる必要があるようですが、こちらは AmazonECSInfrastructureRolePolicyForVpcLattice
管理ポリシーがありましたのでそちらを使います。
またVPC Latticeサービスに紐づけるためのTargetGroupを作成します。
VPC Latticeの設定
ECSサービスを作成したら、VPC Lattice側を設定します。
サービスネットワークとこれに紐づくサービスを作成し、↑で作成したECSサービスを関連づけます。
サービスネットワークの作成
ここではアクセスできるようにしたいVPCを関連づけます。やること自体はそこまで難しくないです。
作成すると snva- から始まるリソースが生成されます。おそらくServiceNetworkVPCAssociation の略です。
サービスの作成
実際にアクセスさせたいサービスを作成します。
設定内容としてはALBに近いです。リスナールールを追加して転送させたいTargetGroupを追加します。
作成すると、サービスに対応する.awsドメインなDNS名が払い出されます。
サービスネットワークにサービスを関連づける
サービスは作成しただけではただのエンドポイントです。これを所定のネットワーク空間からアクセスできるようにするためにサービスネットワークに関連づけます。
EC2からcurl叩く
もう片方のVPCで起動させたEC2から↓の感じでcurlでアクセスしてみます。
できました!ちなみに今回はAWSが提供しているsample-ecsコンテナを使いました。
ちなみにListner設定で HTTP:443
設定したら勝手にAmazonの証明書差し込んでSSLにしてくれてました。
まとめ
名前は知っているもののあまり分かっていないサービスは沢山あるので、こういうタイミングで触ってみて学ぶことも大切ですね。
ECS使いとしてはこういった機能があるというのを押さえておくのも重要だと思いました。
APIだけサクッと共有したい&プライベートで!となった場合は良い選択肢になりそうです。