@everymundo/aws-instance-identity

Returns information about the AWS Instance that calls it

Usage no npm install needed!

<script type="module">
  import everymundoAwsInstanceIdentity from 'https://cdn.skypack.dev/@everymundo/aws-instance-identity';
</script>

README

@everymundo/aws-instance-identity

Returns information about the AWS Instance that calls it

Installation

npm install @everymundo/aws-instance-identity

Usage

With promise

const { getIdentityDocument } = require('@everymundo/aws-instance-identity');
getIdentityDocument()
  .then((result) => {
    console.log(result);
  })
  .catch((err) => {
    console.error(err);
  });

With async/await

const { getIdentityDocument } = require('@everymundo/aws-instance-identity');

const init = async() => {
  try {
    const result = getIdentityDocument();
    console.log(result);
  } catch (e) {
    console.error(err);
  }
}

Running outside AWS servers

When running locally it will fail the request since that request is done to an endpoint that only works inside the aws infrastructure.

With Socks Proxy

If you really want to get a document you can do so by running a socks proxy with an AWS instance via ssh. The connection can be stablished by running the following command:

# You should replace your-instance-address by your instance address
ssh -ND 8157 your-instance-address &> /dev/null & PID=$! && echo $PID

After that you can just set the environment variable SOCKS_PROXY=socks://127.0.0.1:8157 and run your aplication.

You can try that out in a node console

SOCKS_PROXY=socks://127.0.0.1:8157 node -e "require('@everymundo/aws-instance-identity').getIdentityDocument().then(console.log)"

The output would be similar to this:

{
  privateIp: '192.168.0.12',
  devpayProductCodes: null,
  availabilityZone: 'us-west-1a',
  version: '2010-08-31',
  instanceId: 'i-2093840273489',
  billingProducts: null,
  instanceType: 'm4.xlarge',
  accountId: '98237498273984',
  architecture: 'x86_64',
  kernelId: null,
  ramdiskId: null,
  imageId: 'ami-34cb443',
  pendingTime: '2017-10-20T20:41:03Z',
  region: 'us-west-1'
}

Without Socks Proxy

This should bring you an error

node -e "require('@everymundo/aws-instance-identity').getIdentityDocument().catch(console.error)"

The error message would be something similar to this:

{ code: 599,
  start: 2018-03-21T04:35:54.692Z,
  end: 1521606957775,
  err:
   { Error: connect EHOSTUNREACH 169.254.169.254:80
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1170:14)
     errno: 'EHOSTUNREACH',
     code: 'EHOSTUNREACH',
     syscall: 'connect',
     address: '169.254.169.254',
     port: 80 },
  attempt: 1,
  endpoint: 'http://169.254.169.254/latest/dynamic/instance-identity/document' }