🍣

waypointを触ってみた雑感

2021/05/15に公開

サマリ

  • waypoint触ってみました。ドキュメントを読んでもどういうものかよくわからんかったので。
  • 触ってみておもったことがあったので雑ですがまとめてみました。
  • 今の自分ではまだ使いこなせない感じはありますが、思想はよいツールだと思ったので今後も期待しています。

環境

  • PC: MacBook Pro (Retina, 13-inch, Early 2015)
  • OS: macOS Big Sur 11.3
  • waypoint CLI v0.3.2
  • waypoint Server v0.3.2

waypointやろうとした動機

waypointを作っているHashiCorpが作っているVagrant好きなんです。Vagrantfile作ったら、利用者はvagrant up, vagrant reload,vagrant haltとシンプルなコマンドで、必要な環境を構築できるし、おかしくなったらvagrant destroyで作り直せる。

waypointも似た感じでなんかよさそうなんで使ってみたい。
とりあえずどんなものか触ってみよう。(正直ドキュメント見てもようわからんかったので)

まずはdockerにデプロイするところから。

参照したページ

Get Started - Docker

触った感想

ひととおりGetting Started with Waypointを読んで手を動かしてみて、改めてintroを読んで以下のことを思いました。

気になったところはintroで書かれていた、waypointの課題。

Another challenge we saw is that depending on where you want to deploy your application, the tool you use is often different. Docker and kubectl for Kubernetes, Packer and Terraform for VMs, custom CLIs for each serverless platform, etc.

こういう問題を解決したいと。
なるほどだからwaypointは抽象化に注力して、コマンドも設定も簡潔にしているのかな。

ただ、コマンドと出力でなんとなくやっていることはわかる。waypoint upでデプロイして、destoryでとめる。しかし抽象化しすぎてドキュメントを読むだけではなんとなくしかわからなかったのが正直なところ。

手を動かしてあらためてドキュメントを読み、思想がとにかくいいと思いました。

開発環境はステージング・本番環境よりは低スペックでいいし、ある程度コストは抑えたい。そうすると、ステージングや本番環境とは異なる構成にはなることはまあある。
でも開発・ステージング・本番どの環境へデプロイするにしても同じ手順でやりたいし、構成もできるだけ共通化したい。そうしておかないと、デプロイ方法や手順を変えたときのテストもしづらい。そういう面でコマンドがwaypoint initwaypoint upwaypoint destroyと簡潔なコマンドでワークフローが構成されているのはいい。

自分はまだTerraformやKubernetesについてちょっと触った程度。クラウドサービスもコンソールでポチポチやっている程度。もうちょい習熟してデプロイで困ったときに再挑戦したい。

やったこと

以下はひととおり手を動かしたときのメモ。気になった方は読んでみてみてください。

インストール

vaivailx@MacBook-Pro-2 source-han-code-jp-2.012 % brew tap hashicorp/tap
Updating Homebrew...
==> Auto-updated Homebrew!
...

vaivailx@MacBook-Pro-2 source-han-code-jp-2.012 % brew install hashicorp/tap/waypoint
==> Installing waypoint from hashicorp/tap
==> Downloading https://releases.hashicorp.com/waypoint/0.3.2/waypoint_0.3.2_darwin_amd64.zip
######################################################################## 100.0%
🍺  /usr/local/Cellar/waypoint/0.3.2: 3 files, 109.4MB, built in 15 seconds
vaivailx@MacBook-Pro-2 source-han-code-jp-2.012 %

サンプルアプリでお試し

ドキュメントにあるとおり、サンプルアプリをクローン。

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

rubyのサンプルアプリがあるディレクトリに移動する

cd waypoint-examples/docker/ruby

アプリをインストールする

vaivailx@MacBook-Pro-2 ruby % waypoint install -platform=docker -accept-tos
✓ Pulling image: hashicorp/waypoint:latest
 │ dd1e7ba5a461: Pull complete
 │ 4c96b157c042: Pull complete
 │ 191d7ee433ff: Pull complete
 │ 992e80b4fa3b: Pull complete
 │ 5b44046a55e7: Pull complete
 │ 1f71ac6218f6: Pull complete
 │ 8978fdeee9e7: Pull complete
 │ df9574549498: Pull complete
 │ Digest: sha256:bea8c080f398ba948524d2769228684587b685ff9742e2f2ad99285472b2902d
 │ Status: Downloaded newer image for hashicorp/waypoint:latest
✓ Installing Waypoint server to docker
✓ Server container started!
✓ Server installed and configured!
✓ Installing runner...
✓ Waypoint runner installed and started!
Waypoint server successfully installed and configured!

The CLI has been configured to connect to the server automatically. This
connection information is saved in the CLI context named "install-1621045841".
Use the "waypoint context" CLI to manage CLI contexts.

The server has been configured to advertise the following address for
entrypoint communications. This must be a reachable address for all your
deployments. If this is incorrect, manually set it using the CLI command
"waypoint server config-set".

To launch and authenticate into the Web UI, run:
waypoint ui -authenticate

Advertise Address: waypoint-server:9701
Web UI Address: https://localhost:9702
vaivailx@MacBook-Pro-2 ruby %

│ Status: Downloaded newer image for hashicorp/waypoint:latest
✓ Installing Waypoint server to docker
✓ Server container started!
✓ Server installed and configured!

dockerにwaypointサーバーがインストールされて、動かしていると出力されている。

docker psで確認。

vaivailx@MacBook-Pro-2 ruby % docker ps
CONTAINER ID   IMAGE                       COMMAND                  CREATED       STATUS       PORTS                                                           NAMES
cc8eda6fc61b   hashicorp/waypoint:latest   "/usr/bin/waypoint r…"   5 hours ago   Up 5 hours                                                                   waypoint-runner
8786342eff11   hashicorp/waypoint:latest   "/usr/bin/waypoint s…"   5 hours ago   Up 5 hours   0.0.0.0:9701-9702->9701-9702/tcp, :::9701-9702->9701-9702/tcp   waypoint-server
vaivailx@MacBook-Pro-2 ruby %

たしかにwaypointという名のコンテナが2つ動いている。

ドキュメントに以下のようにあったので、片方がクライアントでもう一方がサーバーかな。

Waypoint runs as a server and a client, even if only run locally. For this tutorial, you'll run the server in Docker Desktop.

waypoint用の初期化

waypoint init
vaivailx@MacBook-Pro-2 ruby % waypoint init
✓ Configuration file appears valid
✓ Connection to Waypoint server was successful
✓ Project "example-ruby" and all apps are registered
with the server.
✓ Plugins loaded and configured successfully

Project initialized!

You may now call 'waypoint up' to deploy your project
or
commands such as 'waypoint build' to perform steps
individually.
vaivailx@MacBook-Pro-2 ruby %

ビルド・デプロイ

Build and Deployに沿ってやっていく。

vaivailx@MacBook-Pro-2 ruby % waypoint up

...

Creating new buildpack-based image using builder:heroku/buildpacks:18✓ Creating pack client✓ Building image │ [exporter] Adding layer 'config' │ [exporter] Adding layer 'process-types' │ [exporter] Adding label'io.buildpacks.lifecycle.metadata'
 │ [exporter] Adding label
'io.buildpacks.build.metadata'
 │ [exporter] Adding label
'io.buildpacks.project.metadata'
 │ [exporter] Setting default process type 'web'
 │ [exporter] Saving example-ruby...
 │ [exporter] *** Images (d3d0d00a3735):
 │ [exporter]       example-ruby
 │ [exporter] Adding cache layer 'heroku/ruby:gems'
✓ Injecting entrypoint binary to image

Generated new Docker image: example-ruby:latest

» Deploying...
✓ Setting up waypoint network
✓ Starting container

» Releasing...

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."

           URL:
https://thoroughly-funky-krill.waypoint.run
Deployment URL:
https://thoroughly-funky-krill--v1.waypoint.run
vaivailx@MacBook-Pro-2 ruby %

Creating new buildpack-based image using builder:heroku/buildpacks:18

heroku関係のなにかを使っている?

URL:
https://thoroughly-funky-krill.waypoint.run

表示されたURLにアクセスすると以下のページが表示された。

表示されたページ

Waypoint creates the preview URL on a HashiCorp service. Because this preview URL is connected to your application and where it has been deployed, the URL will only show your application when it is running. In this walkthrough, this means that Docker Desktop and the container for the deployed example Ruby application must both be running for the URL to render your application.

HashiCorpのサービス上でURLが作られる?

いまいち書いていることがわからん。

ちなみに、もう一方のURL https://thoroughly-funky-krill--v1.waypoint.run/ にアクセスすると、見た目は同じページが表示される。

修正して再デプロイ

Update and Redeploy the App

vaivailx@MacBook-Pro-2 ruby % vi app/views/welcome/index.erb
vaivailx@MacBook-Pro-2 ruby % waypoint up

» Building...
Creating new buildpack-based image using builder:

...

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."

           URL:
https://thoroughly-funky-krill.waypoint.run
Deployment URL:
https://thoroughly-funky-krill--v2.waypoint.run
vaivailx@MacBook-Pro-2 ruby %

v2とついかURLが出力されて、アクセスしたらたしかに変更内容が反映されていた。

が、どこにデプロイされているんだ?
それはどこに書いている?

waypoint upしたあとのディレクトリをみると変化があったのは以下のディレクトリができたこと。
でも中身はファイルなし。

vaivailx@MacBook-Pro-2 ruby % tree .waypoint
.waypoint
├── cache
│   └── app
│       └── example-ruby
└── data
    └── app
        └── example-ruby

6 directories, 0 files
vaivailx@MacBook-Pro-2 ruby %
vaivailx@MacBook-Pro-2 ruby %

デバッグのやり方

Debugging and UI(https://learn.hashicorp.com/tutorials/waypoint/get-started-ui?in=waypoint/get-started-docker)

waypoint exec /bin/bash

dockerのようにwaypoint execで実行中のアプリに入れるらしい。

vaivailx@MacBook-Pro-2 ruby % waypoint exec /bin/bash
Connected to deployment v2
heroku@b99d24ec568f:/$

herokuユーザー!herokuにおいているのか、このアプリ。
設定ファイルを見ても、build-packというのを使っていること以外はわからなかった。

Term of UseにかかれていたURLサービスのページを再度読んでようやくわかってきたこと。

  • このURLはあくまで開発用
  • HTTPSで繋げられるけど、これはLet's Encryptを使って証明書を発行している

想像:動作確認したいときに同じようにHTTPSで繋げられる環境をローカルに建てるとか、
わざわざLet's Encryptの設定するのは手間だからそれを簡略化しているできるようにしている?

The URL service is enabled by default and points to the public Waypoint URL service.

デフォルトでは公開URLを使うことが有効になっているのか。

heroku@b99d24ec568f:/$ cd / &&  ls
app   etc     lib64  root  tmp
bin   home    media  run   usr
boot  input   mnt    sbin  var
cnb   layers  opt    srv   waypoint-entrypoint
dev   lib     proc   sys   workspace
heroku@b99d24ec568f:/$
vaivailx@MacBook-Pro-2 ruby % waypoint logs
2021-05-15T07:36:19.833Z XYN0QE: [INFO]
entrypoint: entrypoint starting:
deployment_id=01F5QF8ME0HBYDQT7NVH006CR6
instance_id=01F5QF8R13001VQQZPJBXYN0QE
args=[/cnb/process/web]
2021-05-15T07:36:19.833Z XYN0QE: [INFO]
entrypoint: entrypoint version: full_string=v0.3.2
version=v0.3.2 prerelease= metadata= revision=
2021-05-15T07:36:19.833Z XYN0QE: [INFO]
entrypoint: server version info: version=v0.3.2
api_min=1 api_current=1 entrypoint_min=1
entrypoint_current=1

...

ログの確認も抽象化しているのか。
コマンド一発で表示してくれる。

ブラウザでなんか見れるらしい。そのために認証をする。

vaivailx@MacBook-Pro-2 ruby % waypoint ui -authenticate

» Creating invite token
This invite token will be exchanged for an
authentication
token that your browser stores.

» Opening browser
vaivailx@MacBook-Pro-2 ruby %

アプリログやビルドログ、リリースログがみれる。

auth_ui

ぶっこわす。

vaivailx@MacBook-Pro-2 ruby % waypoint destroy -auto-approve

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

» Destroying deployments for application
'example-ruby'...
Destroy successful!
vaivailx@MacBook-Pro-2 ruby %

さきほどアクセスできていたURLにアクセスすると、もうない。ただし、404にはならない。

after_destroy

Discussion