6
votes

I have a simple cloud-init user data that I am passing in to ec2. I set this data on my ec2 instance by right clicking the instance and setting the user data in there.

Following is my cloud-init user data

#cloud-config

runcmd:
 - [ ls, -l, / ]
 - [ sh, -xc, "echo $(date) ': hello world!'" ]
 - [ sh, -c, echo "=========hello world'=========" ]
 - [ touch, /home/ec2-user/hello.txt ]

final_message: "The system is finally up, after 10 seconds"

I got this example from here and I added the touch command

My expectation was to see the data on the /var/log/cloud-init.log. But I don't see it there. Also I don't see any errors nor see the hello.txt file created

Is there something that I am missing?

I am running an amazon linux instance and not an ubuntu instance

1
AFAIK, user-data will work only at the time of instance launch (and not every instance boot-up). So I am not sure how the "View/Change User Data" option works. Anyway, I just tired what you said and I could replicate the issue. However, I could see my new/modified user data when I ran curl -L http://169.254.169.254/latest/user-data/ from the instance. But, The user-data did not do what I expected it to do. May be, because it will work only on instance launch. I am definitely interested to see an answer to this question. +1.slayedbylucifer
My solution was to give up on using Amazon Linux in conjunction with cloud-init.jjanes

1 Answers

7
votes

It's an syntax error in your 3rd command:

- [ sh, -c, echo "=========hello world'=========" ]

This is a working user-data:

#cloud-config

runcmd:
 - [ ls, -l, / ]
 - [ sh, -xc, 'echo $(date) ": hello world!"' ]
 - [ sh, -c, 'echo "=========hello world========="' ]
 - [ touch, /home/ec2-user/hello.txt ]

final_message: "The system is finally up"

output : { all : '| tee -a /var/log/cloud-init-output.log' }

Notice that it shows cloud-init execution log only in /var/log/cloud-init.log. you should see output in /var/log/cloud-init-output.log after specifying the output directive.