# Init boto config BOTO_CONFIG = json.loads(os.environ['botoConfig']) CONFIG = Config(**BOTO_CONFIG) logger = logging.getLogger(__name__) # Initialise the helper, all inputs are optional, this example shows the defaults helper = CfnResource(json_logging=False, log_level='INFO', boto_level='CRITICAL') try: ## Init code pass except Exception as e: helper.init_failure(e) @helper.create def create(event, context): logger.info("Got Create") logger.info(event) # Optionally return an ID that will be used for the resource PhysicalResourceId, # if None is returned an ID will be generated. If a poll_create function is defined # return value is placed into the poll event as event['CrHelperData']['PhysicalResourceId'] # # To add response data update the helper.Data dict # If poll is enabled data is placed into poll event as event['CrHelperData'] """ Get FSx DNS Name """
from crhelper import CfnResource # Setup Default Logger logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) logger.setLevel(os.environ.get("LOG_LEVEL", logging.ERROR)) # Initialize the helper helper = CfnResource(json_logging=False, log_level="DEBUG", boto_level="CRITICAL") try: ds_client = boto3.client("ds") except Exception as error: helper.init_failure(error) if TYPE_CHECKING: from typing import List, Tuple, Union def get_directory_alias_and_sso_enabled_status( directory_id: str) -> Union[Tuple[str, bool], None]: """Get the existing directory alias, if configured, and get the current directory SSO state. Args: directory_id: Directory ID Returns: existing directory alias and current directory SSO state """
import requests from ruamel import yaml from datetime import date, datetime from crhelper import CfnResource from time import sleep logger = logging.getLogger(__name__) helper = CfnResource(json_logging=True, log_level='DEBUG') try: s3_client = boto3.client('s3') kms_client = boto3.client('kms') ec2_client = boto3.client('ec2') s3_scheme = re.compile(r'^s3://.+/.+') except Exception as init_exception: helper.init_failure(init_exception) def s3_get(url): try: return str( s3_client.get_object(Bucket=url.split('/')[2], Key="/".join( url.split('/')[3:]))['Body'].read()) except Exception as e: raise RuntimeError( f"Failed to fetch CustomValueYaml {url} from S3. {e}") def http_get(url): try:
) return new_component def update_component(ib, platform, component_config): existing_component = get_existing_component(ib, platform, component_config) return create_component(ib, platform, component_config) def create_components(ib, compent_list): for component in component_def: create_component(ib, platform, component_config) def create_ib_client(): return boto3.client('imagebuilder') except Exception as e: custom_resource_helper.init_failure(e) @custom_resource_helper.create def create(event, context): logger.info("Got Create") if not event.get('ResourceProperties').get('Platform') and not event.get('ResourceProperties').get('Version'): raise ValueError("Component must include the properties Platform and Version") ib = create_ib_client() platform = event.get('ResourceProperties').get('Platform') version = event.get('ResourceProperties').get('Version') component_yaml = event.get('ResourceProperties').get('ComponentTemplate') if version: component_yaml.update({"version": version}) component = create_component(ib, platform, component_yaml) custom_resource_helper.Data.update({"component": component}) return component.get('componentBuildVersionArn')