On October 15, 2020, HashiCorp announced a new product called Waypoint.
Simply put, it's a great tool that allows you to build and deploy to cloud environments such as Amazon EC2, ECS, Google Cloud Run, and Azure Container Instances with a single liner by writing just one deployment configuration file.
waypointup up
command can be used to execute the entire process from application build to deployment / release.Cloud-native applications often run on container infrastructure such as ECS and Kubernetes, but deployment configurations and commands often become complicated depending on the service configuration. Waypoint allows you to manage configuration files in one word, allowing applications to run the release cycle with a simpler workflow. great.
I tried it in a Mac environment. The Manual (https://learn.hashicorp.com/waypoint) also describes how to set up manually or in a Linux environment.
Let's run the sample application published on Waypoint with Docker. First, install Waypoint with brew.
$ brew tap hashicorp/tap
$ brew install hashicorp/tap/waypoint
Take a look at the help.
% waypoint --help
Welcome to Waypoint
Docs: https://waypointproject.io
Version: v0.1.2
Usage: waypoint [-version] [-help] [-autocomplete-(un)install] <command> [args]
Common commands
build Build a new versioned artifact from source
deploy Deploy a pushed artifact
release Release a deployment
up Perform the build, deploy, and release steps for the app
Other commands
artifact Artifact and build management
config Application configuration management
context Server access configurations
deployment Deployment creation and management
destroy Delete all the resources created for an app
docs Show documentation for components
exec Execute a command in the context of a running application instance
hostname Application URLs
init Initialize and validate a project
install Install the Waypoint server to Kubernetes, Nomad, or Docker
logs Show log output from the current application deployment
runner Runner management
server Server management
token Authenticate and invite collaborators
ui Open the web UI
version Prints the version of this Waypoint CLI
You can see that the waypoint up
command introduced earlier is a command that collectively executes waypoint build
, waypoint deploy
, and waypoint relase
.
Then download the sample application. In addition to Docker, the sample contains code to deploy to Amazon ECS and Google Cloud Run.
$ git clone https://github.com/hashicorp/waypoint-examples.git
$ cd waypoint-examples
$ ls
README.md azure-container-instance google-cloud-run waypoint.hcl
aws-ecs data.db kubernetes
aws-eks docker nomad
#This time Node on Docker.I will move js
$ cd docker/nodejs
Install the Waypoint server. The Waypoint server is the console that manages the workflow of your application.
$ docker pull hashicorp/waypoint:latest
$ waypoint install -platform=docker -accept-tos
A deployment configuration file is required to deploy the application. This can be created with the command waypoint init
, but the sample application has created the file.
waypoint.hcl
project = "example-nodejs"
app "example-nodejs" {
labels = {
"service" = "example-nodejs",
"env" = "dev"
}
build {
use "pack" {}
}
deploy {
use "docker" {}
}
}
Initialize the application.
$ waypoint init
✓ Configuration file appears valid
✓ Connection to Waypoint server was successful
✓ Project "example-nodejs" and all apps are registered with the server.
✓ Plugins loaded and configured successfully
✓ Authentication requirements appear satisfied.
Project initialized!
You may now call 'waypoint up' to deploy your project or
commands such as 'waypoint build' to perform steps individually.
And deploy. As you can see by looking at the directory structure of the application, you will notice that the Dockerfile is missing. The way to build it is that Waypoint automatically detects the application type from the file structure and automatically generates the Dockerfile itself using the optimal build pack. smart.
$ waypoint up
It takes time to build, so let's launch Waypoint's UI during this time.
$ waypoint ui
Your browser launches the Waypoint console.
You will be asked for an authentication token first, so let's issue the token from the CLI. You can be authenticated by pasting the generated value into the form.
$ waypoint token new
ʻThe screen of example-nodejs` opens. From this screen, you can execute the build status, deployment log, and even commands to the container.
Let's go back to the CLI and check the build status.
$ waypoint up
» Building...
Creating new buildpack-based image using builder: heroku/buildpacks:18
✓ Creating pack client
✓ Building image
│ [exporter] Adding 1/1 app layer(s)
│ [exporter] Reusing layer 'launcher'
│ [exporter] Adding layer 'config'
│ [exporter] Adding label 'io.buildpacks.lifecycle.metadata'
│ [exporter] Adding label 'io.buildpacks.build.metadata'
│ [exporter] Adding label 'io.buildpacks.project.metadata'
│ [exporter] *** Images (e2a2e3a85138):
│ [exporter] index.docker.io/library/example-nodejs:latest
│ [exporter] Reusing cache layer 'heroku/nodejs-engine:nodejs'
│ [exporter] Reusing cache layer 'heroku/nodejs-engine:toolbox'
✓ Injecting entrypoint binary to image
Generated new Docker image: example-nodejs: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://***.waypoint.run
Deployment URL: https://***--v1.waypoint.run
Open the URL written in Deployment URL
to start the application. ([^ 3])
Since the deployment was successful, let's rewrite the contents of the displayed template.
views/pages/index.js
<h1>This Node.js app was deployed with Waypoint.</h1>
<h2>Hello world!</h2>
I tried adding <h2>
under <h1>
.
Run the deploy again.
URL: https://***.waypoint.run
Deployment URL: https://***--v2.waypoint.run
The subdomain contained in the Deployment URL
has changed to v2
.
The Hello World
is displayed correctly! ([^ 4])
When I touched it lightly, I got the impression that it was software that abstracts deployment like AWS Elastic Beanstalk. By introducing Waypoint, the deployment flow can be separated from the application configuration, and it seems that the release status of various services can be centrally managed.
[^ 1]: It seems to be used at build time if Dockerfile
is detected in the application directory
[^ 2]: You need to build a Waypoint server for team development
[^ 3]: waypoint.run
is a public host provided by HashiCorp. Since it is a verification environment, it is necessary to prepare a host for production operation. See Waypoint URL Service for more information.
[^ 4]: You can also open the previous application by accessing the URL of v1