setup/lambda-custom-resource/prepare_dev_package_cr.py [46:143]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    LOGGER.info('Deleting role alias if exists')
    try:
        iot_client.delete_role_alias(roleAlias=role_alias)
    except:
        LOGGER.info('Role alias deletion failed, continuing anyways')
    
    LOGGER.info('Deregistering device from edge fleet if exists')
    try:
        sm_client.deregister_devices(
            DeviceFleetName=sm_em_fleet_name,
            DeviceNames=[sm_edge_device_name]
        )
    except:
        LOGGER.info('Device deregistration failed, continuing anyways')

    LOGGER.info('Detaching certificates')
    try:
        cert_arn = iot_client.list_thing_principals(thingName=iot_thing_name)['principals'][0]
        cert_id = cert_arn.split('/')[-1]
        iot_client.detach_policy(policyName=iot_policy_name, target=cert_arn)
        iot_client.detach_thing_principal(thingName=iot_thing_name, principal=cert_arn)
        iot_client.update_certificate(certificateId=cert_id, newStatus='INACTIVE')
        iot_client.delete_certificate(certificateId=cert_id, forceDelete=True)
        iot_client.delete_thing_group(thingGroupName=iot_thing_group_name)
    except:
        LOGGER.info('Detaching certificates failed, continuing anyways')




def lambda_handler(event, context):
    '''Handle Lambda event from AWS'''

    try:
        LOGGER.info('REQUEST RECEIVED:\n %s', event)
        LOGGER.info('REQUEST RECEIVED:\n %s', context)
        if event['RequestType'] == 'Create':
            LOGGER.info('CREATE!')

            LOGGER.info('Starting device packaging...')
            try:
                prepare_device_package(event, context)
                send_response(event, context, "SUCCESS",
                          {"Message": "Resource creation successful!"})
            except Exception as e:
                send_response(event, context, "FAILED", {"Message": "Resource creation failed during device packaging!", "Error": str(e)})
        elif event['RequestType'] == 'Update':
            LOGGER.info('UPDATE!')
            send_response(event, context, "SUCCESS",
                          {"Message": "Resource update successful!"})
        elif event['RequestType'] == 'Delete':
            LOGGER.info('DELETE!')
            # Start cleanup method
            cfn_cleanup()
            send_response(event, context, "SUCCESS",
                          {"Message": "Resource deletion successful!"})
        else:
            LOGGER.info('FAILED!')
            send_response(event, context, "FAILED",
                          {"Message": "Unexpected event received from CloudFormation"})
    except: #pylint: disable=W0702
        LOGGER.info('FAILED!')
        send_response(event, context, "FAILED", {
            "Message": "Exception during processing"})


def send_response(event, context, response_status, response_data):
    '''Send a resource manipulation status response to CloudFormation'''
    response_body = json.dumps({
        "Status": response_status,
        "Reason": "See the details in CloudWatch Log Stream: " + context.log_stream_name,
        "PhysicalResourceId": context.log_stream_name,
        "StackId": event['StackId'],
        "RequestId": event['RequestId'],
        "LogicalResourceId": event['LogicalResourceId'],
        "Data": response_data
    })

    print("Response body:")
    print(response_body)

    response_url = event['ResponseURL']

    headers = {
        'content-type' : '',
        'content-length' : str(len(response_body))
    }

    try:
        response = http.request('PUT', response_url, headers=headers, body=response_body)
        print("Status code:", response.status)

    except Exception as e:

        print("send(..) failed executing http.request(..):", e)


def setup_agent(thing_group_name, thing_group_arn):
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



setup/template.yaml [243:340]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
              LOGGER.info('Deleting role alias if exists')
              try:
                  iot_client.delete_role_alias(roleAlias=role_alias)
              except:
                  LOGGER.info('Role alias deletion failed, continuing anyways')
              
              LOGGER.info('Deregistering device from edge fleet if exists')
              try:
                  sm_client.deregister_devices(
                      DeviceFleetName=sm_em_fleet_name,
                      DeviceNames=[sm_edge_device_name]
                  )
              except:
                  LOGGER.info('Device deregistration failed, continuing anyways')

              LOGGER.info('Detaching certificates')
              try:
                  cert_arn = iot_client.list_thing_principals(thingName=iot_thing_name)['principals'][0]
                  cert_id = cert_arn.split('/')[-1]
                  iot_client.detach_policy(policyName=iot_policy_name, target=cert_arn)
                  iot_client.detach_thing_principal(thingName=iot_thing_name, principal=cert_arn)
                  iot_client.update_certificate(certificateId=cert_id, newStatus='INACTIVE')
                  iot_client.delete_certificate(certificateId=cert_id, forceDelete=True)
                  iot_client.delete_thing_group(thingGroupName=iot_thing_group_name)
              except:
                  LOGGER.info('Detaching certificates failed, continuing anyways')




          def lambda_handler(event, context):
              '''Handle Lambda event from AWS'''

              try:
                  LOGGER.info('REQUEST RECEIVED:\n %s', event)
                  LOGGER.info('REQUEST RECEIVED:\n %s', context)
                  if event['RequestType'] == 'Create':
                      LOGGER.info('CREATE!')

                      LOGGER.info('Starting device packaging...')
                      try:
                          prepare_device_package(event, context)
                          send_response(event, context, "SUCCESS",
                                    {"Message": "Resource creation successful!"})
                      except Exception as e:
                          send_response(event, context, "FAILED", {"Message": "Resource creation failed during device packaging!", "Error": str(e)})
                  elif event['RequestType'] == 'Update':
                      LOGGER.info('UPDATE!')
                      send_response(event, context, "SUCCESS",
                                    {"Message": "Resource update successful!"})
                  elif event['RequestType'] == 'Delete':
                      LOGGER.info('DELETE!')
                      # Start cleanup method
                      cfn_cleanup()
                      send_response(event, context, "SUCCESS",
                                    {"Message": "Resource deletion successful!"})
                  else:
                      LOGGER.info('FAILED!')
                      send_response(event, context, "FAILED",
                                    {"Message": "Unexpected event received from CloudFormation"})
              except: #pylint: disable=W0702
                  LOGGER.info('FAILED!')
                  send_response(event, context, "FAILED", {
                      "Message": "Exception during processing"})


          def send_response(event, context, response_status, response_data):
              '''Send a resource manipulation status response to CloudFormation'''
              response_body = json.dumps({
                  "Status": response_status,
                  "Reason": "See the details in CloudWatch Log Stream: " + context.log_stream_name,
                  "PhysicalResourceId": context.log_stream_name,
                  "StackId": event['StackId'],
                  "RequestId": event['RequestId'],
                  "LogicalResourceId": event['LogicalResourceId'],
                  "Data": response_data
              })

              print("Response body:")
              print(response_body)

              response_url = event['ResponseURL']

              headers = {
                  'content-type' : '',
                  'content-length' : str(len(response_body))
              }

              try:
                  response = http.request('PUT', response_url, headers=headers, body=response_body)
                  print("Status code:", response.status)

              except Exception as e:

                  print("send(..) failed executing http.request(..):", e)


          def setup_agent(thing_group_name, thing_group_arn):
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



