code: def _get_resource_id_from_stack(cfn_client, stack_name, logical_id):
          
  
          LOG.debug("Getting resource's PhysicalId from AWS CloudFormation stack. StackName=%s, LogicalId=%s",
                    stack_name, logical_id)
  
          try:
              response = cfn_client.describe_stack_resource(StackName=stack_name, LogicalResourceId=logical_id)
  
              LOG.debug("Response from AWS CloudFormation %s", response)
              return response["StackResourceDetail"]["PhysicalResourceId"]
  
          except botocore.exceptions.ClientError as ex:
              LOG.debug("Unable to fetch resource name from CloudFormation Stack: "
                        "StackName=%s, ResourceLogicalId=%s, Response=%s", stack_name, logical_id, ex.response)
  
              # The exception message already has a well formatted error message that we can surface to user
              raise UserException(str(ex))
docs: Given the LogicalID of a resource, call AWS CloudFormation to get physical ID of the resource within
          the specified stack.
  
          Parameters
          ----------
          cfn_client
              CloudFormation client provided by AWS SDK
  
          stack_name : str
              Name of the stack to query
  
          logical_id : str
              LogicalId of the resource
  
          Returns
          -------
          str
              Physical ID of the resource
  
          Raises
          ------
          samcli.commands.exceptions.UserException
              If the stack or resource does not exist