code: func NewCustomResourceProvisioner(empire *empire.Empire, config client.ConfigProvider) *CustomResourceProvisioner {
  	db := empire.DB.DB.DB()
  	p := &CustomResourceProvisioner{
  		SQSDispatcher: newSQSDispatcher(config),
  		Provisioners:  make(map[string]customresources.Provisioner),
  		sendResponse:  customresources.SendResponse,
  	}
  
  	p.add("Custom::InstancePort", newInstancePortsProvisioner(&InstancePortsResource{
  		ports: newDBPortAllocator(db),
  	}))
  
  	ecs := newECSClient(config)
  	p.add("Custom::ECSService", newECSServiceProvisioner(&ECSServiceResource{
  		ecs: ecs,
  	}))
  
  	store := &dbEnvironmentStore{db}
  	p.add("Custom::ECSEnvironment", newECSEnvironmentProvisioner(&ECSEnvironmentResource{
  		environmentStore: store,
  	}))
  	p.add("Custom::ECSTaskDefinition", newECSTaskDefinitionProvisioner(&ECSTaskDefinitionResource{
  		ecs:              ecs,
  		environmentStore: store,
  	}))
  
  	p.add("Custom::EmpireApp", &EmpireAppResource{
  		empire: empire,
  	})
  	p.add("Custom::EmpireAppEnvironment", &EmpireAppEnvironmentResource{
  		empire: empire,
  	})
  
  	return p
  }
docs: // NewCustomResourceProvisioner returns a new CustomResourceProvisioner with an
  // sqs client configured from config.