Beispiel #1
0
def send_email_sns(config, sender, subject, message, topic_ARN, image_png):
    """
    Sends notification through AWS SNS. Takes Topic ARN from recipients.

    Does not handle access keys.  Use either
      1/ configuration file
      2/ EC2 instance profile

    See also http://boto3.readthedocs.org/en/latest/guide/configuration.html.
    """
    from boto3 import resource as boto3_resource

    sns = boto3_resource('sns')
    topic = sns.Topic(topic_ARN[0])

    # Subject is max 100 chars
    if len(subject) > 100:
        subject = subject[0:48] + '...' + subject[-49:]

    response = topic.publish(Subject=subject, Message=message)

    logger.debug(("Message sent to SNS.\nMessageId: {},\nRequestId: {},\n"
                 "HTTPSStatusCode: {}").format(response['MessageId'],
                                               response['ResponseMetadata']['RequestId'],
                                               response['ResponseMetadata']['HTTPStatusCode']))
Beispiel #2
0
def send_email_sns(sender, subject, message, topics_ARN, image_png):
    """
    Sends notification through AWS SNS. Takes Topic ARN from recipients.

    Does not handle access keys.  Use either
      1/ configuration file
      2/ EC2 instance profile

    See also https://boto3.readthedocs.io/en/latest/guide/configuration.html.
    """
    from boto3 import resource as boto3_resource

    sns = boto3_resource('sns')

    for topic_ARN in topics_ARN:

        topic = sns.Topic(topic_ARN)

        # Subject is max 100 chars
        if len(subject) > 100:
            subject = subject[0:48] + '...' + subject[-49:]

        response = topic.publish(Subject=subject, Message=message)

        logger.debug(("Message sent to SNS.\nMessageId: {},\nRequestId: {},\n"
                      "HTTPSStatusCode: {}").format(
                          response['MessageId'],
                          response['ResponseMetadata']['RequestId'],
                          response['ResponseMetadata']['HTTPStatusCode']))
    def resource(self, service_name, **kwargs):
        if service_name not in self._service_endpoint_mapping:
            raise Exception('%s is not supported by this mock session.' %
                            (service_name))

        return boto3_resource(
            service_name,
            endpoint_url=self._service_endpoint_mapping[service_name],
            aws_access_key_id=self.aws_access_key_id,
            aws_secret_access_key=self.aws_secret_access_key,
            region_name=self.region_name,
            verify=False)
Beispiel #4
0
    def resource(self, service_name, **kwargs):
        """
        Mock boto3 resource
        If **kwargs are provided they will passed through to boto3.client unless they are contained already
        within overwrite_kwargs which are set with priority
        Returns boto3.resources.factory.s3.ServiceResource object
        """
        if service_name not in self._service_endpoint_mapping:
            raise Exception('%s is not supported by this mock session.' %
                            (service_name))

        protected_kwargs = {
            **self.common_protected_kwargs, 'service_name': service_name,
            'endpoint_url': self._service_endpoint_mapping[service_name]
        }

        return boto3_resource(**{**kwargs, **protected_kwargs})
Beispiel #5
0
        # Client initialization
        self.boto3_client = boto3_client(
            "ecs",
            aws_access_key_id=aws_access_key_id,
            aws_secret_access_key=aws_secret_access_key,
            aws_session_token=aws_session_token,
            region_name=region_name,
            config=Config(**botocore_config),
        )
        # fetch external kwargs from s3 if needed
        if self.use_external_kwargs:
            self.logger.info("Use of external S3 kwargs enabled.")
            self.s3_resource = boto3_resource(
                "s3",
                aws_access_key_id=aws_access_key_id,
                aws_secret_access_key=aws_secret_access_key,
                aws_session_token=aws_session_token,
                region_name=region_name,
            )

        # get boto3 client for resource groups tagging api
        if self.enable_task_revisions:
            self.logger.info("Native ECS task revisions enabled.")
            self.boto3_client_tags = boto3_client(
                "resourcegroupstaggingapi",
                aws_access_key_id=aws_access_key_id,
                aws_secret_access_key=aws_secret_access_key,
                aws_session_token=aws_session_token,
                region_name=region_name,
                config=Config(**botocore_config),
            )
Beispiel #6
0
    def __init__(  # type: ignore
            self,
            name: str = None,
            labels: Iterable[str] = None,
            env_vars: dict = None,
            aws_access_key_id: str = None,
            aws_secret_access_key: str = None,
            aws_session_token: str = None,
            region_name: str = None,
            enable_task_revisions: bool = False,
            use_external_kwargs: bool = False,
            external_kwargs_s3_bucket: str = None,
            external_kwargs_s3_key: str = None,
            **kwargs) -> None:
        super().__init__(name=name, labels=labels, env_vars=env_vars)

        from boto3 import client as boto3_client
        from boto3 import resource as boto3_resource

        # Config used for boto3 client initialization
        aws_access_key_id = aws_access_key_id or os.getenv("AWS_ACCESS_KEY_ID")
        aws_secret_access_key = aws_secret_access_key or os.getenv(
            "AWS_SECRET_ACCESS_KEY")
        aws_session_token = aws_session_token or os.getenv("AWS_SESSION_TOKEN")
        region_name = region_name or os.getenv("REGION_NAME")

        # revisions and kwargs configurations
        self.enable_task_revisions = enable_task_revisions
        self.use_external_kwargs = use_external_kwargs
        self.external_kwargs_s3_bucket = external_kwargs_s3_bucket
        self.external_kwargs_s3_key = external_kwargs_s3_key

        # Parse accepted kwargs for definition and run
        self.task_definition_kwargs, self.task_run_kwargs = self._parse_kwargs(
            kwargs, True)

        # Client initialization
        self.boto3_client = boto3_client(
            "ecs",
            aws_access_key_id=aws_access_key_id,
            aws_secret_access_key=aws_secret_access_key,
            aws_session_token=aws_session_token,
            region_name=region_name,
        )
        # fetch external kwargs from s3 if needed
        if self.use_external_kwargs:
            self.logger.info("Use of external S3 kwargs enabled.")
            self.s3_resource = boto3_resource(
                "s3",
                aws_access_key_id=aws_access_key_id,
                aws_secret_access_key=aws_secret_access_key,
                aws_session_token=aws_session_token,
                region_name=region_name,
            )

        # get boto3 client for resource groups tagging api
        if self.enable_task_revisions:
            self.logger.info("Native ECS task revisions enabled.")
            self.boto3_client_tags = boto3_client(
                "resourcegroupstaggingapi",
                aws_access_key_id=aws_access_key_id,
                aws_secret_access_key=aws_secret_access_key,
                aws_session_token=aws_session_token,
                region_name=region_name,
            )
Beispiel #7
0
    def __init__(  # type: ignore
        self,
        name: str = None,
        labels: Iterable[str] = None,
        env_vars: dict = None,
        max_polls: int = None,
        agent_address: str = None,
        no_cloud_logs: bool = False,
        launch_type: str = "FARGATE",
        aws_access_key_id: str = None,
        aws_secret_access_key: str = None,
        aws_session_token: str = None,
        region_name: str = None,
        botocore_config: dict = None,
        enable_task_revisions: bool = False,
        use_external_kwargs: bool = False,
        external_kwargs_s3_bucket: str = None,
        external_kwargs_s3_key: str = None,
        **kwargs,
    ) -> None:
        super().__init__(
            name=name,
            labels=labels,
            env_vars=env_vars,
            max_polls=max_polls,
            agent_address=agent_address,
            no_cloud_logs=no_cloud_logs,
        )

        from boto3 import client as boto3_client
        from boto3 import resource as boto3_resource
        from botocore.config import Config

        # Config used for boto3 client initialization
        aws_access_key_id = aws_access_key_id or os.getenv("AWS_ACCESS_KEY_ID")
        aws_secret_access_key = aws_secret_access_key or os.getenv(
            "AWS_SECRET_ACCESS_KEY")
        aws_session_token = aws_session_token or os.getenv("AWS_SESSION_TOKEN")
        region_name = region_name or os.getenv("REGION_NAME")
        botocore_config = botocore_config or {}

        # revisions and kwargs configurations
        self.enable_task_revisions = enable_task_revisions
        self.use_external_kwargs = use_external_kwargs
        self.external_kwargs_s3_bucket = external_kwargs_s3_bucket
        self.external_kwargs_s3_key = external_kwargs_s3_key
        self.launch_type = launch_type

        # Parse accepted kwargs for task definition, run, and container definitions key of task definition
        (
            self.task_definition_kwargs,
            self.task_run_kwargs,
            self.container_definitions_kwargs,
        ) = self._parse_kwargs(kwargs, True)

        # Client initialization
        self.boto3_client = boto3_client(
            "ecs",
            aws_access_key_id=aws_access_key_id,
            aws_secret_access_key=aws_secret_access_key,
            aws_session_token=aws_session_token,
            region_name=region_name,
            config=Config(**botocore_config),
        )
        # fetch external kwargs from s3 if needed
        if self.use_external_kwargs:
            self.logger.info("Use of external S3 kwargs enabled.")
            self.s3_resource = boto3_resource(
                "s3",
                aws_access_key_id=aws_access_key_id,
                aws_secret_access_key=aws_secret_access_key,
                aws_session_token=aws_session_token,
                region_name=region_name,
            )

        # get boto3 client for resource groups tagging api
        if self.enable_task_revisions:
            self.logger.info("Native ECS task revisions enabled.")
            self.boto3_client_tags = boto3_client(
                "resourcegroupstaggingapi",
                aws_access_key_id=aws_access_key_id,
                aws_secret_access_key=aws_secret_access_key,
                aws_session_token=aws_session_token,
                region_name=region_name,
                config=Config(**botocore_config),
            )

        self.logger.debug(f"Launch type: {self.launch_type}")
        self.logger.debug(
            f"Enable task revisions: {self.enable_task_revisions}")
        self.logger.debug(f"Use external kwargs: {self.use_external_kwargs}")
        self.logger.debug(
            f"External kwargs S3 bucket: {self.external_kwargs_s3_bucket}")
        self.logger.debug(
            f"External kwargs S3 key: {self.external_kwargs_s3_key}")