dockerdocker-composeubuntu-22.04botocoredjango-3.2

botocore.utils DEBUG Metadata service returned non-200 response with status code of 404 for url


I'm running my Django v3.2 rest-api on ubuntu 22.04 LTS as a docker container. Although the api-webserver docker container does spin up & I'm able to access the database backend by specifying the api url, I do get the following error in my console :

botocore.utils DEBUG Metadata service returned non-200 response with status code of 404 for url: http://169.254.169.254/latest/meta-data/iam/security-credentials/, content body: b'
<!DOCTYPE html>\n
<html lang=en>\n
<meta charset=utf-8>\n
<meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">\n
<title>Error 404 (Not Found)!!1</title>\n
<style>
  \n * {
    margin: 0;
    padding: 0
  }
  
  html,
  code {
    font: 15px/22px arial, sans-serif
  }
  
  html {
    background: #fff;
    color: #222;
    padding: 15px
  }
  
  body {
    margin: 7% auto 0;
    max-width: 390px;
    min-height: 180px;
    padding: 30px 0 15px
  }
  
  *>body {
    background: url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;
    padding-right: 205px
  }
  
  p {
    margin: 11px 0 22px;
    overflow: hidden
  }
  
  ins {
    color: #777;
    text-decoration: none
  }
  
  a img {
    border: 0
  }
  
  @media screen and (max-width:772px) {
    body {
      background: none;
      margin-top: 0;
      max-width: none;
      padding-right: 0
    }
  }
  
  #logo {
    background: url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;
    margin-left: -5px
  }
  
  @media only screen and (min-resolution:192dpi) {
    #logo {
      background: url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;
      -moz-border-image: url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0
    }
  }
  
  @media only screen and (-webkit-min-device-pixel-ratio:2) {
    #logo {
      background: url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;
      -webkit-background-size: 100% 100%
    }
  }
  
  #logo {
    display: inline-block;
    height: 54px;
    width: 150px
  }
  
  \n
</style>\n <a href=//www.google.com/><span id=logo aria-label=Google></span></a>\n
<p><b>404.</b> <ins>That\xe2\x80\x99s an error.</ins>\n
  <p>The requested URL <code>/latest/meta-data/iam/security-credentials/</code> was not found on this server. <ins>That\xe2\x80\x99s all we know.</ins>\n'

My requirements.txt botocore version shows:

botocore==1.29.94

I can't seem to understand how to solve the problem since I do not know where to begin addressing it from.


Solution

  • This is probably because the app is trying to use an AWS service but is not properly configured with credentials.

    It is therefore falling back to check for an IAM role from the AWS metadata service (http://169.254.169.254/latest/meta-data/iam/security-credentials/), and that request is failing.

    Because the response content is the same as Google’s 404 page, and 169.254.169.254 is a link-local address, I would wager the app is running in GCP and not AWS.

    I stumbled upon this scenario in a different context. I don’t use Django, so I can’t provide direct advice on how best to supply the app with valid AWS credentials.

    But once you do (if you haven’t figured it out already), Boto should stop making its HTTP request to 169.254.169.254.