I use an open-source server application running on Docker Compose. It has a few services, including PostgreSQL DB and Redis.
How can I best deploy this application to AWS in full IaC with Terraform?
ecs-cliecs-cli now supports sending docker compose configs in Amazon ECS.
However, I do not think it could be integrated with the Terraform workflow (which is maybe not a big fuss). What I know for sure is that ecs-cli is not supported in CloudFormation, as per this issue, still open at this time. So I assume it cannot easily be added to Terraform either.
docker-compose.yml file, translate it to kubectl YAML.But that is not fully IaC yet. And you have to retranslate your config each time the docker-compose changes in the source repository. And it sounds like a lot of work.
helm provider to install the application with Helm on the cluster.I read Kompose can automagically translate a Docker Compose configuration to a k8s configuration, but they don't appear to be ported on AWS, not to talk about Terraform.
docker-compose.yml. And the Docker images.systemctl service.That would kind of hurt: long builds, difficult monitoring, no scaling.
master tells you what is deployed.Who knows, ecs-cli-v2 might be better integrated with CloudFormation and/or Terraform.
As mentioned in the question. Probably the best solution, albeit requiring a (little) effort to parametrize Helm.
See also: Getting started with Helm.
Docker Swarm now accepts inputs from a docker-compose.yml file. The template can be found and configured here. Once configured, it may be integrated to a Terraform infrastructure.
This (3-year old) tutorial explains how to use Docker Swarm mode on AWS.
To launch the container, if necessary (not fully investigated, feedback is welcome), you could use Terraform's local-exec. This way you can SSH into the master node and run docker stack deploy and other similar commands, while still having all written down in IaC style.