EC2 instance loads my user-data script but doesn't run it
Solution 1
This is probably not relevant anymore, but yet. I've just used boto with ubuntu and user data, although the documenation says that the user data has to be base64 encoded, it only worked for me if I pass the 64 bit paramter as regular string.
I read the content of user data from file (using fh.read()) and then just pass this as the user_data paramter to run_instances.
Solution 2
I think it's not working for you because user data can't use any shebang like you used "#!/usr/bin/env python" On the help page http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html there are two examples one is the standard "#!/bin/bash", and another one looks artificial "#cloud-config". Probably it's only 2 available shebangs. The bash one works for me.
Parzival
Updated on August 21, 2022Comments
-
Parzival over 1 year
Code:
#!/usr/bin/env python import boto.ec2 conn_ec2 = boto.ec2.connect_to_region('us-east-1') # access keys are environment vars my_code = """#!/usr/bin/env python import sys sys.stdout = open('file', 'w') print 'test' """ reservation = conn_ec2.run_instances(image_id = 'ami-a73264ce', key_name = 'backendkey', instance_type = 't1.micro', security_groups = ['backend'], instance_initiated_shutdown_behavior = 'terminate', user_data = my_code)
The instance is initiated with the proper settings (it's the public Ubuntu 12.04, 64-bit, image) and I can SSH into it normally. The user-data script seems to be loaded correctly: I can see it in
/var/lib/cloud/instance/user-data.txt
(and also in/var/lib/cloud/instance/scripts/part-001
) and on the EC2 console.But that's it, the script doesn't seem to be executed. Following this answer I checked the
/var/log/cloud-init.log
file but it doesn't seem to contain any error messages related to my script (well, maybe I'm missing something - here is a gist with the contents of cloud-init.log).What am I missing?
-
kishore over 9 yearsyou are right. Same thing happened to me also. When I tried with base64 string it didn't worked for me. But when I passed plain string it worked fine. thanks at last I know how to do it.