Каким способом выполняется сценарий sh в экземпляре ec2, когда terraform создает ресурсы? Я создал ami с некоторыми файлами в каталоге для выполнения, если я войду через ssh, я могу выполнить файл следующим образом:
sh /home/resources/wso/bin/wso.sh
У меня есть файл start.tpl со следующим содержанием:
#!/bin/bash
# update ubuntu
sudo apt-get update
# install nginx
sudo apt-get install nginx -y
sudo service nginx start
#start wso2
sh /home/resources/wso/bin/wso.sh
В моем main.tf у меня есть это:
data "template_file" "start" {
template = "${file("start.tpl")}"
}
resource "aws_instance" "wnginx" {
ami = "${var.instance_ami}"
instance_type = "${var.instance_type}"
user_data = "${data.template_file.start.rendered}"
}
Nginx запускается хорошо, но мой стартовый скрипт wso.sh не запускается.
Есть ли какая-то конфигурация terraform для отладки моего start.tpl?
Вы неправильно используете пользовательские данные. Посмотри пожалуйста документация cloud-init.
Ваш шаблон должен содержать что-то вроде этого (формат YAML):
#cloud-config
write_files:
- path: /home/resources/wso/bin/wso.sh
content: |
#!/bin/bash
# update ubuntu
sudo apt-get update
# install nginx
sudo apt-get install nginx -y
sudo service nginx start
runcmd:
- ["sh", "/home/resources/wso/bin/wso.sh"]
Поскольку это можно улучшить без особых усилий, я предлагаю использовать это как шаблон:
#cloud-config
packages:
- nginx
package_update: true
runcmd:
- [systemctl, daemon-reload]
- [systemctl, enable, nginx]
- [systemctl, start, nginx]
Он достигнет того же уровня, что и ваш сценарий, но использует предоставленную Систему для подготовки машины, а также устранит необходимость, например. для поддержки собственного AMI, так как тогда вы можете просто применить конфигурацию cloud-init через пользовательские данные и полагаться на образы Debian / Ubuntu.
Если это не помогло, вы можете проверить /var/log/cloud-init.log
. Поскольку формат файла - YAML, помните, что он может быть нарушен из-за неправильного отступа.
Кажется, это не совсем связано с терраформом. Механизм пользовательских данных - это функция EC2. Для отладки пользовательских данных вы можете проверить /var/log/
и найдите файлы с именем cloud-init
. По крайней мере, в образах на основе CentOS / AWS есть файл с именемcloud-init-output
который содержит stdout / stderr сценария пользовательских данных.
Другой способ - использовать terraforms remote-exec provisioner, который позволяет выполнять команды из terraform на удаленной машине.
Чтобы проверить содержимое визуализированного сценария, у вас есть несколько возможностей: