code: func (roleDefinition *IAMRoleDefinition) logicalName(serviceName string, targetLambdaFnName string) string {
  	if roleDefinition.cachedLogicalName == "" {
  		roleDefinition.cachedLogicalName = CloudFormationResourceName("IAMRole", serviceName, targetLambdaFnName)
  	}
  	return roleDefinition.cachedLogicalName
  }
docs: // Returns the stable logical name for this IAMRoleDefinition, which depends on the serviceName
  // and owning targetLambdaFnName.  This potentially creates semantically equivalent IAM::Role entries
  // from the same struct pointer, so:
  // TODO: Create a canonical IAMRoleDefinition serialization that can be used as the digest source