C# Enemy shoot on timer

I’ve been struggling with this for days. I have finally got an enemy to spawn bullet prefabs towards a player but no matter what I try the bullets are spawning rapidly when I need them to shoot every two seconds or so. Any help would be amazing as I’m pulling my hair out here.

class EnemyAI : MonoBehaviour {
	
	public GameObject Player;
	
	private float ViewRange = 40;
	private float RayRange = 20;
	private int vel = 8;
	
	public RaycastHit LastPos;
	public Vector3 RayDirection = Vector3.zero;
	
	public GameObject target;


	public Rigidbody Bullet;
	public Transform Muzzle;



	
	public void Update()
	{
		RayDirection = Player.transform.position - transform.position;

		
		if (Vector3.Angle(RayDirection, transform.forward) < ViewRange)
		{
			if (Physics.Raycast(transform.position, RayDirection, out LastPos, RayRange))
			{
				if (LastPos.collider.tag == "Player")
				{
					Attack();
				}
			}
		}
	}


	public void Attack()
	{
		transform.LookAt(LastPos.transform.position);
		if (RayDirection.magnitude > 10)
		{
			transform.position = Vector3.MoveTowards(transform.position, LastPos.transform.position, Time.deltaTime * vel);
		}
		
		else
		{
		
			Rigidbody b = GameObject.Instantiate(Bullet, Muzzle.position, Muzzle.rotation) as Rigidbody;
			b.AddForce(250 * b.transform.forward);

		}
	}
	

	private void OnCollisionEnter(Collision Hit)
	{

	}
}

You could create a Timer, for example a float that is reduced by Time.deltaTime, here an example (Obviously this void Attack will be called in Update, else it won’t work):

private float timer = 5f;
private void Attack()
{
    timer -= Time.deltaTime;
    if (timer <= 0)
    {
        // Spawn Bullet or whatever else
    }
}

Or you could use IEnumerator and StartCourotine(there are few examples in the link).