The AWS Container Service template scaffolds a Pulumi project that deploys a containerized service to AWS. The architecture includes an [Amazon ECS cluster](/content/registry/packages/aws/api-docs/ecs/cluster/index.html) for orchestration, [AWS Fargate](/content/registry/packages/awsx/api-docs/ecs/fargateservice/index.html) for serverless compute, an [Application Load Balancer](/content/registry/packages/awsx/api-docs/lb/index.html) for internet ingress, and an [Amazon Elastic Container Registry (ECR)](/content/registry/packages/awsx/api-docs/ecr/repository/index.html) repository for the container image. The template ships with an Nginx Dockerfile so the project deploys end to end out of the box.

## Using this template

To use this template to deploy an ECS cluster running your container service, make sure you’ve [installed Pulumi](/content/docs/install/index.html) and [configured your AWS credentials](/content/registry/packages/aws/installation-configuration#credentials/index.html), then create a new [project](/content/docs/iac/concepts/projects/index.html) using the template in the language of your choice:

- TypeScript
- Python
- Go
- C#
- YAML

```bash
$ mkdir my-container-service && cd my-container-service
$ pulumi new container-aws-typescript
```

```bash
$ mkdir my-container-service && cd my-container-service
$ pulumi new container-aws-python
```

```bash
$ mkdir my-container-service && cd my-container-service
$ pulumi new container-aws-go
```

```bash
$ mkdir my-container-service && cd my-container-service
$ pulumi new container-aws-csharp
```

```bash
$ mkdir my-container-service && cd my-container-service
$ pulumi new container-aws-yaml
```

Follow the prompts to complete the new-project wizard. When it’s done, you’ll have a complete Pulumi project that’s ready to deploy and configured with the most common settings. Feel free to inspect the code in

- TypeScript
- JavaScript
- Python
- Go
- C#
- F#
- VB
- Java
- YAML

`index.js`

`index.ts`

`__main__.py`

`main.go`

`Program.cs`

`Program.fs`

`Program.vb`

`App.java`

`Pulumi.yaml`

## Deploying the project

The template requires no additional configuration. Once the new project is created, you can deploy it immediately with [`pulumi up`](/content/docs/iac/cli/commands/pulumi_up/index.html):

```bash
$ pulumi up
```

When the deployment completes, Pulumi exports the following [stack output](/content/docs/iac/concepts/stacks/#outputs/index.html) values:

- `url`: The HTTP URL for the container’s endpoint.

Output values like these are useful in many ways, most commonly as inputs for other stacks or related cloud resources. The computed `url`, for example, can be used from the command line to open the newly deployed container service in your favorite web browser:

```bash
$ open $(pulumi stack output url)
```

## Customizing the project

Projects created with the Container Service template expose the following [configuration](/content/docs/iac/concepts/config/index.html) settings:

- `container_port`: Specifies the port mapping for the container. Defaults to port 80.
- `cpu`: Specifies the amount of CPU to use with each task or each container within a task. Defaults to 512.
- `memory`: Specifies the amount of memory to use with each task or each container within a task. Defaults to 128.
- `image`: Specifies the location of the Dockerfile used to build the container image that is run. Defaults to the Dockerfile in the `app` folder.

All of these settings are optional and may be adjusted either by editing the stack configuration file directly (by default, `Pulumi.dev.yaml`) or by changing their values with [`pulumi config set`](/content/docs/iac/cli/commands/pulumi_config_set/index.html):

### Using your own container image

If you already have a container image you’d like to build your container service with, you can do so either by replacing the Dockerfile in the `app` folder or by configuring the stack to point to another folder on your computer with the `image` setting:

```bash
$ pulumi config set image ../my-existing-image
$ pulumi up
```

## Cleaning up

You can cleanly destroy the stack and all of its infrastructure with [`pulumi destroy`](/content/docs/iac/cli/commands/pulumi_destroy/index.html):

```bash
$ pulumi destroy
```

## Learn more

- Browse other architecture templates in the [Templates gallery](/content/templates/index.html).
- Explore the [AWS](/content/registry/packages/aws/index.html) and [AWSx](/content/registry/packages/awsx/index.html) provider API docs in the Pulumi Registry.
- Walk through Pulumi from the ground up in [Pulumi Tutorials](/content/tutorials/index.html).
- Read the latest [container posts on the Pulumi blog](/content/blog/tag/containers/index.html).
