# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"). You # may not use this file except in compliance with the License. A copy of # the License is located at # # http://aws.amazon.com/apache2.0/ # # or in the "license" file accompanying this file. This file is # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF # ANY KIND, either express or implied. See the License for the specific # language governing permissions and limitations under the License. from __future__ import absolute_import import json import logging import re import requests def _validate_instance_id(instance_id): """ Validate instance ID """ compiled_regex = re.compile(r"^(i-\S{17})") match = compiled_regex.match(instance_id) if not match: return None return match.group(1) def _retrieve_instance_id(): """ Retrieve instance ID from instance metadata service """ instance_id = None url = "http://169.254.169.254/latest/meta-data/instance-id" response = requests_helper(url, timeout=0.1) if response is not None: instance_id = _validate_instance_id(response.text) return instance_id def _retrieve_instance_region(): """ Retrieve instance region from instance metadata service """ region = None valid_regions = [ "ap-northeast-1", "ap-northeast-2", "ap-southeast-1", "ap-southeast-2", "ap-south-1", "ca-central-1", "eu-central-1", "eu-north-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "us-east-1", "us-east-2", "us-west-1", "us-west-2", ] url = "http://169.254.169.254/latest/dynamic/instance-identity/document" response = requests_helper(url, timeout=0.1) if response is not None: response_json = json.loads(response.text) if response_json["region"] in valid_regions: region = response_json["region"] return region def query_bucket(): """ GET request on an empty object from an Amazon S3 bucket """ response = None instance_id = _retrieve_instance_id() region = _retrieve_instance_region() if instance_id is not None and region is not None: url = "https://aws-deep-learning-containers-{0}.s3.{0}.amazonaws.com/dlc-containers.txt?x-instance-id={1}".format( # noqa: E501 region, instance_id ) response = requests_helper(url, timeout=0.2) logging.debug("Query bucket finished: {}".format(response)) return response def requests_helper(url, timeout): response = None try: response = requests.get(url, timeout=timeout) except requests.exceptions.RequestException as e: logging.error("Request exception: {}".format(e)) return response def main(): """ Invoke bucket query """ # Logs are not necessary for normal run. Remove this line while debugging. logging.getLogger().disabled = True logging.basicConfig(level=logging.ERROR) query_bucket() if __name__ == "__main__": main()