| ## |
| # Copyright 2017 xFlow Research Pvt. Ltd |
| # This file is part of MON module |
| # 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. You may obtain |
| # a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License 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. |
| # |
| # For those usages not covered by the Apache License, Version 2.0 please |
| # contact with: wajeeha.hamid@xflowresearch.com |
| ## |
| |
| """ |
| Connecting with AWS services --CloudWatch/EC2 using Required keys |
| """ |
| |
| __author__ = "Wajeeha Hamid" |
| __date__ = "18-September-2017" |
| |
| import os |
| |
| try: |
| import boto |
| import boto.ec2 |
| import boto.vpc |
| import boto.ec2.cloudwatch |
| import boto.ec2.connection |
| import logging |
| from boto.ec2.cloudwatch.alarm import MetricAlarm |
| from boto.ec2.cloudwatch.dimension import Dimension |
| from boto.sns import connect_to_region |
| from boto.utils import get_instance_metadata |
| |
| except: |
| exit("Boto not available. Try activating your virtualenv OR `pip install boto`") |
| |
| log = logging.getLogger(__name__) |
| |
| |
| class Connection: |
| """Connection Establishment with AWS -- VPC/EC2/CloudWatch""" |
| |
| def setEnvironment(self): |
| try: |
| """Credentials for connecting to AWS-CloudWatch""" |
| # Reads from the environment variables |
| self.AWS_KEY = os.environ.get("AWS_ACCESS_KEY_ID") |
| self.AWS_SECRET = os.environ.get("AWS_SECRET_ACCESS_KEY") |
| self.AWS_REGION = os.environ.get("AWS_EC2_REGION", "us-west-2") |
| |
| # TODO Read from the cloudwatch_credentials.txt file |
| |
| return self.connection_instance() |
| except Exception as e: |
| log.error("AWS Credentials not configured, Try setting the access credentials first %s: ", str(e)) |
| |
| def connection_instance(self): |
| try: |
| # VPC Connection |
| self.vpc_conn = boto.vpc.connect_to_region(self.AWS_REGION, |
| aws_access_key_id=self.AWS_KEY, |
| aws_secret_access_key=self.AWS_SECRET) |
| |
| # EC2 Connection |
| self.ec2_conn = boto.ec2.connect_to_region(self.AWS_REGION, |
| aws_access_key_id=self.AWS_KEY, |
| aws_secret_access_key=self.AWS_SECRET) |
| |
| """ TODO : Required to add actions against alarms when needed """ |
| # self.sns = connect_to_region(self.AWS_REGION) |
| # self.topics = self.sns.get_all_topics() |
| # self.topic = self.topics[u'ListTopicsResponse']['ListTopicsResult']['Topics'][0]['TopicArn'] |
| |
| # Cloudwatch Connection |
| self.cloudwatch_conn = boto.ec2.cloudwatch.connect_to_region( |
| self.AWS_REGION, |
| aws_access_key_id=self.AWS_KEY, |
| aws_secret_access_key=self.AWS_SECRET) |
| connection_dict = dict() |
| connection_dict['ec2_connection'] = self.ec2_conn |
| connection_dict['cloudwatch_connection'] = self.cloudwatch_conn |
| return connection_dict |
| |
| except Exception as e: |
| log.error("Failed to Connect with AWS %s: ", str(e)) |