EC2 instance loads my user-data script but doesn't run it

11,508

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.

Share:
11,508
Parzival
Author by

Parzival

Updated on August 21, 2022

Comments

  • Parzival
    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
    kishore over 9 years
    you 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.