code: func (resourceInfo *customResourceInfo) logicalName() string {
  	hash := sha1.New()
  	// The name has to be stable so that the ServiceToken value which is
  	// part the CustomResource invocation doesn't change during stack updates. CF
  	// will throw an error if the ServiceToken changes across updates.
  	source := fmt.Sprintf("%#v", resourceInfo.userFunctionName)
  	_, writeErr := hash.Write([]byte(source))
  	if writeErr != nil {
  		fmt.Printf("TODO: failed to update hash. Error: %s", writeErr)
  	}
  	return CloudFormationResourceName(resourceInfo.userFunctionName,
  		hex.EncodeToString(hash.Sum(nil)))
  }
docs: // Returns the stable CloudFormation resource logical name for this resource.  For
  // a CustomResource, this name corresponds to the AWS::CloudFormation::CustomResource
  // invocation of the Lambda function, not the lambda function itself