AWS invalid literal for int() with base 8: ‘493’

Mark Berry June 13, 2014

Working on an AWS Elastic Beanstalk deployment, I’m using a .config file in my project’s .ebextensions folder to create and upload a file (see the Development Duide). The deployment fails with this message:

Error occurred during build: invalid literal for int() with base 8: ‘493’

 

I pulled a more complete error trace from /var/log/cfn-init.log:

[ERROR] Unhandled exception during build: invalid literal for int() with base 8: '493'
Traceback (most recent call last):
  File "/opt/aws/bin/cfn-init", line 122, in <module>
    worklog.build(detail.metadata, configSets)
  File "/usr/lib/python2.6/site-packages/cfnbootstrap/construction.py", line 117, in build
    Contractor(metadata).build(configSets, self)
  File "/usr/lib/python2.6/site-packages/cfnbootstrap/construction.py", line 502, in build
    self.run_config(config, worklog)
  File "/usr/lib/python2.6/site-packages/cfnbootstrap/construction.py", line 511, in run_config
    CloudFormationCarpenter(config, self._auth_config).build(worklog)
  File "/usr/lib/python2.6/site-packages/cfnbootstrap/construction.py", line 238, in build
    changes['files'] = FileTool().apply(self._config.files, self._auth_config)
  File "/usr/lib/python2.6/site-packages/cfnbootstrap/file_tool.py", line 102, in apply
    file_is_link = "mode" in attribs and stat.S_ISLNK(int(attribs["mode"], 8))
ValueError: invalid literal for int() with base 8: '493'

The clue I needed was in the second-to-last line:  it didn’t like the “mode” I specified for the file, apparently complaining that 493 is not a base-8 value (which is true:  base 8 has digits 0 through 7). Here’s my .config file:

files:
  "/etc/my-file" :
    mode: 000755
    owner: root
    group: root
    source: https://s3-us-west-2.amazonaws.com/mybucket/my-file

Resources:
  AWSEBAutoScalingGroup:
    Metadata:
      AWS::CloudFormation::Authentication:
        S3Access:
          type: S3
          roleName: aws-elasticbeanstalk-ec2-role
          buckets: mybucket

For some reason, it converted 000755 to 493 decimal (base 10), then it tried to interpret it as base 8.

Use Quotation Marks for Mode

The fix? Enclose the mode in quotation marks (which is in fact the way it is shown in the Development Guide examples):

files:
  "/etc/my-file" :
    mode: "000755"
    ...

With that change, the deployment worked and the file was successfully transferred from S3 to my EC2 instance.

P.S. Credit for the “Resources” section that allows downloading from secured S3 goes to the May 7, 2014 post by Joshua@AWS to this thread.


Leave a Reply





*