Skip to content

nicholasjackson/waypoint-ecs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

50 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ECS Waypoint Example

To run this example you need an AWS account with a existing VPC and ECR repository, or alternately you can use the terraform code in the ./terraform/infra folder to create a VPC and ECR repository.

Installing Waypoint

To install Waypoint you can run the waypoint server install command. This will create the following resources in your AWS account:

  • ECS Fargate cluster
  • ECS Task for Waypoint server and runner
  • EFS file system
  • IAM Roles for Waypoint server and runner
  • Security groups
  • ALB pointing to the Waypoint server

Normally you can leave the default values for the parameters and run the command, the only parameters that you need to supply are :

  • -ecs-region=
  • -ecs-subnets=""

The following is an example command for installing the Waypoint server showing some of the optional parameters that can be used:

waypoint server install -accept-tos \
-platform=ecs \
-ecs-server-image=hashicorp/waypoint:0.7.2 \
-ecs-odr-image=hashicorp/waypoint-odr:0.7.2 \
-ecs-cluster=waypoint-server \
-ecs-cpu=512 \
-ecs-mem=1024 \
-ecs-execution-role-name=waypoint-server-execution-role \
-ecs-region=eu-west-1 \
-ecs-subnets="<subnet id 1>,<subnet id 2>,<subnet id 3>"

It will take about 5 minutes for the server to be deployed and for the ALB to be created, once the server is running, you will see a message like the following:

✓ Networking setup
✓ Created new ECS cluster: waypoint-server

# ...

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-nlb-af28348ad7c72322.elb.eu-west-1.amazonaws.com:9701
Web UI Address: https://waypoint-server-nlb-af28348ad7c72322.elb.eu-west-1.amazonaws.com:9702

Now the server is installed you can configure a project to build.

Configuring the project

First open the Waypoint UI and authenticate. You can use the following command to do this:

➜ waypoint ui -authenticate

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

» Opening browser

A browser window will open and you may be presented with a message like the following.

By default Waypoint assigns a self signed certificate to the AWS load balancer, you can press the "Advanced" button and then "proceed to this url".

You will now see the waypoint UI

To create a new project click the "Create Project" button.

First give the project a name, let's call it "hello-world"

Now let's connect the project to a GitHub repository, you can use this example repository:

https://github.com/nicholasjackson/waypoint-ecs

Leave the Git ref and Git source as default

And finally toggle the Automated sync button to on, enabling this feature will automatically build and deploy your code every time you push to the repository.

Creating a VPC and ECR repository with terraform

If you do not already have a VPC that you would like to use for your Waypoint deployment, you can use the bundled Terraform configuration to create a VPC and ECR repository.

In the folder ./terraform/infra run the following command to initialize the Terraform repository.

terraform init
Initializing modules...
Downloading cloudposse/ecr/aws 0.32.3 for ecr...
- ecr in .terraform/modules/ecr
Downloading cloudposse/label/null 0.25.0 for ecr.this...
- ecr.this in .terraform/modules/ecr.this
Downloading terraform-aws-modules/vpc/aws 3.11.0 for vpc...
- vpc in .terraform/modules/vpc

Initializing the backend...

Initializing provider plugins...
- Finding hashicorp/aws versions matching "~> 3.0, >= 3.1.0, >= 3.63.0"...
- Installing hashicorp/aws v3.68.0...
- Installed hashicorp/aws v3.68.0 (signed by HashiCorp)

Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

Then run the apply command, Terraform will show you the resources it is about to create and ask you for confirmation.

terraform apply

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # module.ecr.aws_ecr_lifecycle_policy.name["hashicorp-dev-hello-world"] will be created
  + resource "aws_ecr_lifecycle_policy" "name" {
      + id          = (known after apply)
      + policy      = jsonencode(
            {
              + rules = [
                  + {
                      + action       = {
                          + type = "expire"
                        }

# ...

Plan: 21 to add, 0 to change, 0 to destroy.

Changes to Outputs:
  + ecr_repository = (known after apply)
  + ecs_subnet_1   = (known after apply)
  + ecs_subnet_2   = (known after apply)
  + ecs_subnet_3   = (known after apply)
  + vpc_id         = (known after apply)

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value:

Enter yes when prompted, Terraform will then create the resources and you will see the following message when it is complete. The output variables listed by Terraform can be used for the Waypoint server install at the beginning of this README.

Apply complete! Resources: 21 added, 0 changed, 0 destroyed.

Outputs:

ecr_repository = "938765688536.dkr.ecr.eu-west-1.amazonaws.com/hashicorp-dev-hello-world"
ecs_subnet_1 = "subnet-077d094531e3d76d1"
ecs_subnet_2 = "subnet-047aa9f56d505fc5e"
ecs_subnet_3 = "subnet-021649c487f7b2091"
vpc_id = "vpc-0b925e97abfcece7a"

Cleanup resources

waypoint destroy --project hello-world --local=false --auto-approve
» Operation is queued. Waiting for runner assignment...
  If you interrupt this command, the job will still run in the background.

» Cloning data from Git
  URL: https://github.com/nicholasjackson/waypoint-ecs
  Ref: HEAD

» Destroying releases for application 'web'...

» Destroying deployments for application 'web'...
✓ Finished destroying ECS deployment
✓ Deleted service web-01FNY088Y0FRA3B3SEN7V3Y6MB
✓ Deregistered this deployment's target group from ALB listener
✓ Deleting target group web-01FNY088Y0FRA3B3SEN7V3Y6MB
✓ Finished destroying ECS deployment
✓ Deleted service web-01FNXZJGT5GCYA2Q59773MBCNZ
✓ Deleted ALB Listener
✓ Deleting target group web-01FNXZJGT5GCYA2Q59773MBCNZ
Destroy successful!
waypoint server uninstall \
-ecs-region=eu-west-1 \
-auto-approve \
-platform=ecs
Uninstalling Waypoint server on platform "ecs" with context "install-1638459211"
✓ Snapshot "waypoint-server-snapshot-1638463915" generated

✓ Runner resources deleted
⠸ Server resources deleted

Waypoint server successfully uninstalled for ecs platform
terraform destroy
Plan: 0 to add, 0 to change, 21 to destroy.

Changes to Outputs:
  - ecr_repository = "938765688536.dkr.ecr.eu-west-1.amazonaws.com/hashicorp-dev-hello-world" -> null
  - ecs_subnet_1   = "subnet-077d094531e3d76d1" -> null
  - ecs_subnet_2   = "subnet-047aa9f56d505fc5e" -> null
  - ecs_subnet_3   = "subnet-021649c487f7b2091" -> null
  - vpc_id         = "vpc-0b925e97abfcece7a" -> null

Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value: yes

module.vpc.aws_route_table_association.public[0]: Destroying... [id=rtbassoc-02b99a0195e2bc79f]
module.vpc.aws_route_table_association.private[0]: Destroying... [id=rtbassoc-025750655cb3cfd62]
module.ecr.aws_ecr_lifecycle_policy.name["hashicorp-dev-hello-world"]: Destroying... [id=hashicorp-dev-hello-world]
module.vpc.aws_route.public_internet_gateway[0]: Destroying... [id=r-rtb-07c08dba811ff88a51080289494]
module.vpc.aws_route_table_association.public[2]: Destroying... [id=rtbassoc-06bde146484c2cf17]
module.vpc.aws_route_table_association.private[2]: Destroying... [id=rtbassoc-0f583e2374ca3040d]
module.vpc.aws_route_table_association.public[1]: Destroying... [id=rtbassoc-04ad1ddc4315617ba]
module.vpc.aws_route_table_association.private[1]: Destroying... [id=rtbassoc-0bd4c67aedd4417c1]
module.ecr.aws_ecr_lifecycle_policy.name["hashicorp-dev-hello-world"]: Destruction complete after 0s
module.vpc.aws_route_table_association.private[1]: Destruction complete after 0s
module.ecr.aws_ecr_repository.name["hashicorp-dev-hello-world"]: Destroying... [id=hashicorp-dev-hello-world]
module.vpc.aws_route_table_association.public[0]: Destruction complete after 0s
module.vpc.aws_route_table_association.private[2]: Destruction complete after 0s
module.vpc.aws_route.public_internet_gateway[0]: Destruction complete after 0s
module.vpc.aws_internet_gateway.this[0]: Destroying... [id=igw-0da1cb6e94d6c2551]
module.vpc.aws_route_table_association.public[1]: Destruction complete after 0s
module.vpc.aws_route_table_association.public[2]: Destruction complete after 0s
module.vpc.aws_subnet.public[0]: Destroying... [id=subnet-077d094531e3d76d1]
module.vpc.aws_subnet.public[2]: Destroying... [id=subnet-021649c487f7b2091]
module.vpc.aws_subnet.public[1]: Destroying... [id=subnet-047aa9f56d505fc5e]
module.vpc.aws_route_table.public[0]: Destroying... [id=rtb-07c08dba811ff88a5]
module.vpc.aws_route_table_association.private[0]: Destruction complete after 0s
module.vpc.aws_route_table.private[2]: Destroying... [id=rtb-039933c7c15ba2a50]
module.vpc.aws_subnet.private[0]: Destroying... [id=subnet-04974abbfab354a3d]
module.vpc.aws_subnet.private[1]: Destroying... [id=subnet-01a9ea058c4157e39]
module.vpc.aws_route_table.private[1]: Destroying... [id=rtb-0378a57902af4f7d6]
module.ecr.aws_ecr_repository.name["hashicorp-dev-hello-world"]: Destruction complete after 0s
module.vpc.aws_subnet.private[2]: Destroying... [id=subnet-089baf34b744f7776]
module.vpc.aws_subnet.public[1]: Destruction complete after 1s
module.vpc.aws_route_table.private[0]: Destroying... [id=rtb-06a67778afb0de355]
module.vpc.aws_route_table.public[0]: Destruction complete after 1s
module.vpc.aws_internet_gateway.this[0]: Destruction complete after 1s
module.vpc.aws_subnet.public[2]: Destruction complete after 1s
module.vpc.aws_route_table.private[1]: Destruction complete after 1s
module.vpc.aws_subnet.public[0]: Destruction complete after 1s
module.vpc.aws_subnet.private[2]: Destruction complete after 1s
module.vpc.aws_subnet.private[1]: Destruction complete after 1s
module.vpc.aws_subnet.private[0]: Destruction complete after 1s
module.vpc.aws_route_table.private[2]: Destruction complete after 1s
module.vpc.aws_route_table.private[0]: Destruction complete after 0s
module.vpc.aws_vpc.this[0]: Destroying... [id=vpc-0b925e97abfcece7a]
module.vpc.aws_vpc.this[0]: Destruction complete after 1s

Destroy complete! Resources: 21 destroyed.

About

Example repository for running HashiCorp Waypoint on ECS

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published