Consul#

download and install consul https://www.consul.io/downloads

Macos/Linux#

vagrant@ubuntu-focal:~$ curl -OL https://releases.hashicorp.com/consul/1.13.1/consul_1.13.1_linux_amd64.zip
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                Dload  Upload   Total   Spent    Left  Speed
100 43.5M  100 43.5M    0     0  18.9M      0  0:00:02  0:00:02 --:--:-- 18.9M
vagrant@ubuntu-focal:~$ unzip consul_1.13.1_linux_amd64.zip
Archive:  consul_1.13.1_linux_amd64.zip
inflating: consul
vagrant@ubuntu-focal:~$ sudo mv consul /usr/local/bin/
vagrant@ubuntu-focal:~$ consul version
Consul v1.13.1
Revision c6d0f9ec
Build Date 2022-08-11T19:07:00Z
Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)

vagrant@ubuntu-focal:~$
vagrant@ubuntu-focal:~$ rm -rf consul_1.13.1_linux_amd64.zip

Prepare config#

$ mkdir data
vagrant@ubuntu-focal:~/github/learn-terraform-from-scratch/code/manage-state/consul$ ls
config  data
vagrant@ubuntu-focal:~/github/learn-terraform-from-scratch/code/manage-state/consul$ more config/consul-config.hcl
## server.hcl

ui = true
server = true
bootstrap_expect = 1
datacenter = "dc1"
data_dir = "./data"

acl = {
    enabled = true
    default_policy = "deny"
    enable_token_persistence = true

}

Start consul instance locally#

vagrant@ubuntu-focal:~/github/learn-terraform-from-scratch/code/manage-state/consul$ ls
config  data
vagrant@ubuntu-focal:~/github/learn-terraform-from-scratch/code/manage-state/consul$
vagrant@ubuntu-focal:~/github/learn-terraform-from-scratch/code/manage-state/consul$ consul agent -bootstrap -config-file="config/consul-config.hcl" -bind="127.0.0.1"
==> Starting Consul agent...
        Version: '1.13.1'
        Build Date: '2022-08-11 19:07:00 +0000 UTC'
        Node ID: '7305b65b-098d-2998-e887-4652a4d016b9'
        Node name: 'ubuntu-focal'
        Datacenter: 'dc1' (Segment: '<all>')
            Server: true (Bootstrap: true)
    Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: -1, DNS: 8600)
    Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)
        Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false, Auto-Encrypt-TLS: false

==> Log data will now stream in as it occurs:
......

consul将会在前台运行

Get Token#

$ consul acl bootstrap
AccessorID:       0e9b5506-6855-d9a9-2c49-5b764b343b0b
SecretID:         26efa357-2768-c72a-a120-0a38fefdf466
Description:      Bootstrap Token (Global Management)
Local:            false
Create Time:      2022-08-31 14:29:50.179459862 +0000 UTC
Policies:
00000000-0000-0000-0000-000000000001 - global-management

设置环境变量

Linux and Mac

$ export CONSUL_HTTP_TOKEN=26efa357-2768-c72a-a120-0a38fefdf466

Windows

$env:CONSUL_HTTP_TOKEN="26efa357-2768-c72a-a120-0a38fefdf466"

Terraform backend#

terraform {
backend "consul" {
    address = "127.0.0.1:8500"
    scheme  = "http"
    path    = "test/terraform.tfstate"
}
}

查看state

$ consul kv get test/terraform.tfstate