Waypoint を使ってみた(ECS編)

HashiCorp

概要

↑にて、Waypoint を使用して Docker へのアプリケーションのデプロイができたので、下記のサイトを参考にECSへのデプロイを試してみます。

Deploy an Application to AWS Elastic Container Service | Waypoint | HashiCorp Developer
Run a NodeJS application onto AWS Elastic Container Service (ECS) with Waypoint.

前提条件

前提条件としては下記の2つがあります。

  • waypoint がインストールされていること
    ※ Docker編でインストール済み
  • AWSクレデンシャルが設定されている
    ※ 特に権限は指定がなかったが、ECR、ECS,ALB、SG,IAM-ROLEを作成できるような権限が必要
      今回は admin 権限で作業を実施

事前準備

サンプルリポジトリを clone します。

❯ git clone https://github.com/hashicorp/waypoint-examples.git

Waypoint サーバーをインストールします。

❯ cd waypoint-examples/aws/aws-ecs/nodejs
❯ waypoint install --platform=docker -accept-tos

waypoint.hcl ファイルの作成

サンプル用の waypoint.hcl ファイルがサンプルリポジトリに含まれているので、それを修正して使用する。

❯ cat waypoint.hcl
project = "example-nodejs"

app "example-nodejs" {
  labels = {
    "service" = "example-nodejs",
    "env"     = "dev"
  }

  build {
    use "pack" {}
    registry {
      use "aws-ecr" {
        region     = "ap-northeast-1"
        repository = "waypoint-example"
        tag        = "latest"
      }
    }
  }

  deploy {
    use "aws-ecs" {
      region = "ap-northeast-1"
      memory = "512"
    }
  }
}

他にも指定可能なパラメータはたくさんあるので、詳細は↓のドキュメントを参照してください。

AWS ECS | Integrations | Waypoint | HashiCorp Developer
The AWS ECS plugin deploys an application image to an AWS ECS cluster. It also launches on-demand runners to do operations remotely.

Waypoint の初期化

waypoint init コマンドでプロジェクトの初期化を行います。

❯ waypoint init
✓ Configuration file appears valid
✓ Local mode initialized successfully
✓ Project "example-nodejs" and all apps are registered with the server.

Project initialized!

You may now call 'waypoint up' to deploy your project or
commands such as 'waypoint build' to perform steps individually.

アプリケーションのビルド、デプロイ

waypoint up コマンドを実行すると、アプリケーションのビルドとデプロイが行われます。

❯ waypoint up

デプロイが完了すると、デプロイしたアプリケーションにアクセスするためのURLが表示されます。

The deploy was successful! A Waypoint deployment URL is shown below. This
can be used internally to check your deployment and is not meant for external
traffic. You can manage this hostname using "waypoint hostname."

   Release URL: http://waypoint-ecs-example-nodejs-1299410930.ap-northeast-1.elb.amazonaws.com

URLにアクセスするとデプロイされたアプリケーションにアクセスすることができます。

AWSコンソールから作成されたリソースを確認すると、ECS、ECR、ALBやそれらリソースを使用するのに必要なIAM-RoleやSGなどのリソースが作成されていた。

ECR

ECRクラスター

その他

Docker でデバッグを行う際に使用可能であった waypoint logs コマンドやwaypoing exec コマンドは ECS では使用できないようでした。
※ もしかしたら設定等で使用可能であるかもしれないが現時点では確認できなかった。

ログは、CloudWatchLogs には出力されていたので、確認が必要な場合にはコンソールから確認することで確認は可能です。

WebUIの表示については、waypoint ui コマンドで確認することができました。

削除

waypoint destroy コマンドを使用することで、作成した環境の削除ができます。

このコマンドで削除されるのは、ECSのデプロイメント等やELBなどのリソースだけで、ECRに保存されたイメージやECSクラスタ、その他 IAM−Role や SG などは削除されません。
完全に削除するためにはAWSコンソールにログインし、手動で削除する必要があります。

❯ waypoint destroy -auto-approve

» Destroying releases for application 'example-nodejs'...

» Destroying deployments for application 'example-nodejs'...
✓ Finished destroying ECS deployment
✓ Deleted service example-nodejs-01FQ8YPC4Q3F9H4XQ
✓ Deregistered this deployment's target group from ALB listener
✓ Deleting target group example-nodejs-01FQ8YPC4Q3F9H4XQ
✓ Finished destroying ECS deployment
✓ Deleted service example-nodejs-01FQ8YAKQ4GDMJ6WG
✓ Deleted ALB Listener
✓ Deleting target group example-nodejs-01FQ8YAKQ4GDMJ6WG
Destroy successful!

感想

ECS にアプリケーションをデプロイするのも、数コマンドで実施ができて手軽でよいとおもった。今回は殆ど設定を変更せずにデフォルトの設定でデプロイを実施したが、ドキュメントを確認すると、色々細かな設定も可能だったので、そちらも少しずつ確認していきたいです。

waypoint init を実行すると、実行ディレクトリの配下に data.db というファイルが作成されます。
このファイルは terraform の state ファイルのように複数の人で作業を実施する必要がある場合には S3 等で共有する必要があるかなど、どのように扱えばよいのかがわからないので本格的に使用する場合にはその辺も調査する必要があります。

waypointは、CI/CDの最後に waypoint up を実行して、ECS上にアプリケーションをデプロイして動作確認をして、問題がなければ、本番にそのイメージをデプロイするといったちでCI/CDのフロー内で使ってもよいのではと思いました。

次回はサンプルアプリではなく、自分で作成したアプリケーションをデプロしてみたいと思います。

コメント

タイトルとURLをコピーしました