docker/build_artifacts/deep_learning_container.py (55 lines of code) (raw):
# Copyright 2018-2020 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
"""
instance_id_regex = r'^(i-\S{17})'
compiled_regex = re.compile(instance_id_regex)
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(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()