Amazon EC2
aws ec2 run-instances
--image-id ami-12345678
--instance-type t3.micro
--user-data file://script.yamlSets up HashiCorp Consul for service discovery and configuration
#cloud-config
package_update: true
package_upgrade: true
packages:
- wget
- unzip
- curl
users:
- name: consul
system: true
shell: /bin/false
home: /opt/consul
write_files:
- path: /etc/consul.d/consul.json
content: |
{
"datacenter": "dc1",
"data_dir": "/opt/consul/data",
"log_level": "INFO",
"server": true,
"bind_addr": "0.0.0.0",
"client_addr": "0.0.0.0",
"retry_join": ["127.0.0.1"],
"ui_config": {
"enabled": true
},
"connect": {
"enabled": true
},
"ports": {
"grpc": 8502
},
"bootstrap_expect": 1
}
permissions: '0640'
owner: consul:consul
- path: /etc/systemd/system/consul.service
content: |
[Unit]
Description=Consul
Documentation=https://www.consul.io/
Requires=network-online.target
After=network-online.target
ConditionFileNotEmpty=/etc/consul.d/consul.json
[Service]
Type=notify
User=consul
Group=consul
ExecStart=/usr/local/bin/consul agent -config-dir=/etc/consul.d/
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
runcmd:
# Download and install Consul
- cd /tmp
- wget https://releases.hashicorp.com/consul/1.16.0/consul_1.16.0_linux_amd64.zip
- unzip consul_1.16.0_linux_amd64.zip
- mv consul /usr/local/bin/
- chmod +x /usr/local/bin/consul
# Create directories
- mkdir -p /opt/consul/data
- mkdir -p /etc/consul.d
- chown -R consul:consul /opt/consul /etc/consul.d
# Enable and start Consul
- systemctl enable consul
- systemctl start consul
# Configure firewall
- ufw allow 8300:8302/tcp
- ufw allow 8500/tcp
- ufw allow 8600/tcp
- ufw allow 8600/udpaws ec2 run-instances
--image-id ami-12345678
--instance-type t3.micro
--user-data file://script.yamldoctl compute droplet create
--image ubuntu-22-04-x64
--size s-1vcpu-1gb
--user-data-file script.yaml
my-dropletgcloud compute instances create
my-instance
--metadata-from-file
user-data=script.yaml