Sorry about that, not sure what happened. It also wont let me edit the post.
Heres the link: https://www.freecodecamp.org/news/hashicorp-terraform-associate-certification-study-course-pass-the-exam-with-this-free-12-hour-course/
GitLab have great learning materials on this kind of stuff. Google "GitOps with GitLab and Terraform" and you'll come across loads of material. Packer and Vault examples are rarer so you'll have to do more digging there.
I know GitLab have a 3-part series of blog posts on GitOps as well; that's pretty instructive. You can abstract the ideas you see there to fit your CI/CD tool of choice.
So because you are running in "sync", consul is NOT doing any health checks on services, it's instead deferring to Kubernetes to determine if the service is up or down, hence why the checks are empty in Consul. Look to the liveliness probe setting in the k8s definition. https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/
For Consul, the checks are defined and used when you use the consul agent within a container or on a server. They are defined in the config file, and are pretty straight forward/similar to the k8s model. https://www.consul.io/docs/agent/checks.html
Basically, COnsul shines as a "meta" or over-arching Service Discovery Tool. It will defer to K8S as it has it's own orchestration/checks, but also is fully capable of doing checks on it's own for services that don't fit into K8S (or if you want to cram consul agents into our containers). Good example would be that field of legacy windows servers or SQL farm that doesn't make sense to containerize.