Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
3115295
Added mongo server
Nov 2, 2023
5edf471
Removed autoscaling
Nov 2, 2023
26dc46b
Changed service name
Nov 2, 2023
f744227
Added persistent storage
Nov 2, 2023
cab63df
Renamed Mongo service
Nov 2, 2023
d583221
Added autoscaling
Nov 3, 2023
18f36de
Added vpc ingress rule
Nov 3, 2023
c9edc5c
Removed unused arguments
Nov 6, 2023
d79a9b8
Fixed tcp range
Nov 6, 2023
608952e
Added mongo to private subnet
Nov 6, 2023
2bbba8c
Removed autoscaling
Nov 6, 2023
c01bef9
Added service discovery
Nov 6, 2023
08fd849
Removed unused variable
Nov 7, 2023
6dd4ecb
Removed public IP
Nov 8, 2023
c701e48
Removed unused args
Nov 8, 2023
1521662
Renamed variable
Nov 8, 2023
014e2bf
Fixes
Nov 8, 2023
9df6ee5
Renamed variable
Nov 8, 2023
d32105b
Added missing cluster error
Nov 8, 2023
06270d7
Fixed system access
Nov 8, 2023
2269eac
Added correct ports to inbound rules
Nov 8, 2023
662a210
Renamed service discovery and improved inbound rules
Nov 9, 2023
5fc0367
Extracted common arguments
Nov 9, 2023
3e09d72
Updated documentation
Nov 9, 2023
e361a0b
Added lifecycle policy to efs
Nov 9, 2023
a7eae29
Added encryption to efs
Nov 9, 2023
214659c
Fixes
Nov 9, 2023
dc6444a
Fixed mongo port mapping
Nov 9, 2023
0c6eaea
Moved ecs service
Nov 9, 2023
e5b1f92
Added ecs service class
Nov 9, 2023
c2d6702
Extracted defaults
Nov 9, 2023
d6338ba
Renamed property
Nov 9, 2023
e0bf42d
Added common elements to mongo and webserver
Nov 13, 2023
bde3491
Extract common ecs logic to ecs service
ikovac Nov 13, 2023
b2a76c9
Fixes
Nov 14, 2023
ed33d42
Fixed mount targets
Nov 14, 2023
a0056e9
Extracted web server common logic
Nov 14, 2023
0c134fb
Updated property descriptions
Nov 14, 2023
97f8e2e
Updated service health check
Nov 14, 2023
73cfe27
Updated healthcheck path
Nov 14, 2023
bbf078b
Updated mongo readme
Nov 14, 2023
3523a94
Fixes
Nov 14, 2023
0b2e31a
Added remaining propterties
Nov 14, 2023
b42afde
Fixes
Nov 15, 2023
921112e
Added ecs service
Nov 15, 2023
34ea6a1
Mongo port is optional
Nov 15, 2023
d1277c9
Removed not needed args
Nov 15, 2023
ad04b75
Simplified args
Nov 15, 2023
66c633d
Formatting
Nov 15, 2023
b4681fe
Added mongo version
Nov 15, 2023
ddc40f8
Updated mongo args
Nov 15, 2023
84c2852
Updated readme
Nov 15, 2023
5ef8dbc
Extracted common args
Nov 15, 2023
9d7fbe8
Fixes
Nov 16, 2023
fb57089
Added db username and password secrets
Nov 16, 2023
febe757
Renamed secrets
Nov 16, 2023
e624226
Refactor services
ikovac Nov 16, 2023
d6e9613
Remove mongo service from todos
ikovac Nov 16, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
167 changes: 158 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ $ pulumi up
3. [Redis](#redis)
4. [StaticSite](#static-site)
5. [WebServer](#web-server)
6. [Mongo](#mongo)
7. [EcsService](#ecs-service)

### Project

Expand All @@ -86,6 +88,8 @@ type ProjectArgs = {
| RedisService
| StaticSiteService
| WebServerService
| MongoService
| EcsService
)[];
hostedZoneId?: pulumi.Input<string>;
enableSSMConnect?: pulumi.Input<boolean>;
Expand Down Expand Up @@ -140,18 +144,69 @@ export type StaticSiteService = {
export type WebServerService = {
type: 'WEB_SERVER';
serviceName: string;
image: pulumi.Input<string>;
port: pulumi.Input<number>;
domain: pulumi.Input<string>;
environment?:
| aws.ecs.KeyValuePair[]
| ((services: Services) => aws.ecs.KeyValuePair[]);
secrets?: aws.ecs.Secret[] | ((services: Services) => aws.ecs.Secret[]);
desiredCount?: pulumi.Input<number>;
autoscaling?: pulumi.Input<{
enabled: pulumi.Input<boolean>;
minCount?: pulumi.Input<number>;
maxCount?: pulumi.Input<number>;
}>;
size?: pulumi.Input<Size>;
healthCheckPath?: pulumi.Input<string>;
taskExecutionRoleInlinePolicies?: pulumi.Input<
pulumi.Input<RoleInlinePolicy>[]
>;
taskRoleInlinePolicies?: pulumi.Input<pulumi.Input<RoleInlinePolicy>[]>;
tags?: pulumi.Input<{
[key: string]: pulumi.Input<string>;
}>;
};
```

```ts
type MongoService = {
type: 'MONGO';
serviceName: string;
username: pulumi.Input<string>;
password: pulumi.Input<string>;
port?: pulumi.Input<number>;
size?: pulumi.Input<Size>;
tags?: pulumi.Input<{
[key: string]: pulumi.Input<string>;
}>;
};
```

```ts
type EcsService = {
type: 'ECS';
serviceName: string;
image: pulumi.Input<string>;
port: pulumi.Input<number>;
domain: pulumi.Input<string>;
enableServiceAutoDiscovery: pulumi.Input<boolean>;
lbTargetGroupArn?: aws.lb.TargetGroup['arn'];
persistentStorageVolumePath?: pulumi.Input<string>;
securityGroup?: aws.ec2.SecurityGroup;
assignPublicIp?: pulumi.Input<boolean>;
dockerCommand?: pulumi.Input<string[]>;
environment?:
| aws.ecs.KeyValuePair[]
| ((services: Services) => aws.ecs.KeyValuePair[]);
secrets?: aws.ecs.Secret[] | ((services: Services) => aws.ecs.Secret[]);
desiredCount?: pulumi.Input<number>;
minCount?: pulumi.Input<number>;
maxCount?: pulumi.Input<number>;
autoscaling?: pulumi.Input<{
enabled: pulumi.Input<boolean>;
minCount?: pulumi.Input<number>;
maxCount?: pulumi.Input<number>;
}>;
size?: pulumi.Input<Size>;
healtCheckPath?: pulumi.Input<string>;
healthCheckPath?: pulumi.Input<string>;
taskExecutionRoleInlinePolicies?: pulumi.Input<
pulumi.Input<RoleInlinePolicy>[]
>;
Expand Down Expand Up @@ -367,7 +422,7 @@ AWS ECS Fargate web server.

Features:

- Memory and CPU autoscaling enabled
- memory and CPU autoscaling enabled
- creates TLS certificate for the specified domain
- redirects HTTP traffic to HTTPS
- creates CloudWatch log group
Expand All @@ -394,12 +449,107 @@ export type WebServerArgs = {
hostedZoneId: pulumi.Input<string>;
vpc: awsx.ec2.Vpc;
desiredCount?: pulumi.Input<number>;
minCount?: pulumi.Input<number>;
maxCount?: pulumi.Input<number>;
autoscaling?: pulumi.Input<{
enabled: pulumi.Input<boolean>;
minCount?: pulumi.Input<number>;
maxCount?: pulumi.Input<number>;
}>;
size?: pulumi.Input<Size>;
environment?: aws.ecs.KeyValuePair[];
secrets?: aws.ecs.Secret[];
healthCheckPath?: pulumi.Input<string>;
taskExecutionRoleInlinePolicies?: pulumi.Input<
pulumi.Input<RoleInlinePolicy>[]
>;
taskRoleInlinePolicies?: pulumi.Input<pulumi.Input<RoleInlinePolicy>[]>;
tags?: pulumi.Input<{
[key: string]: pulumi.Input<string>;
}>;
};
```

### Mongo

AWS ECS Fargate mongo service.

Features:

- persistent storage
- service auto-discovery
- creates CloudWatch log group
- comes with predefined cpu and memory options: `small`, `medium`, `large`, `xlarge`

<br>

```ts
new Mongo(name: string, args: MongoArgs, opts?: pulumi.ComponentResourceOptions );
```

| Argument | Description |
| :------- | :--------------------------------------------: |
| name \* | The unique name of the resource. |
| args \* | The arguments to resource properties. |
| opts | Bag of options to control resource's behavior. |

```ts
export type MongoArgs = {
cluster: aws.ecs.Cluster;
vpc: awsx.ec2.Vpc;
username: pulumi.Input<string>;
password: pulumi.Input<string>;
port?: pulumi.Input<number>;
size?: pulumi.Input<Size>;
tags?: pulumi.Input<{
[key: string]: pulumi.Input<string>;
}>;
};
```

### Ecs Service

AWS ECS Fargate service.

Features:

- memory and CPU autoscaling
- service auto discovery
- persistent storage
- CloudWatch logs
- comes with predefined cpu and memory options: `small`, `medium`, `large`, `xlarge`

<br>

```ts
new EcsService(name: string, args: EcsServiceArgs, opts?: pulumi.ComponentResourceOptions );
```

| Argument | Description |
| :------- | :--------------------------------------------: |
| name \* | The unique name of the resource. |
| args \* | The arguments to resource properties. |
| opts | Bag of options to control resource's behavior. |

```ts
export type EcsServiceArgs = {
image: pulumi.Input<string>;
port: pulumi.Input<number>;
cluster: aws.ecs.Cluster;
vpc: awsx.ec2.Vpc;
desiredCount?: pulumi.Input<number>;
autoscaling?: pulumi.Input<{
enabled: pulumi.Input<boolean>;
minCount?: pulumi.Input<number>;
maxCount?: pulumi.Input<number>;
}>;
size?: pulumi.Input<Size>;
environment?: aws.ecs.KeyValuePair[];
secrets?: aws.ecs.Secret[];
healtCheckPath?: pulumi.Input<string>;
enableServiceAutoDiscovery: pulumi.Input<boolean>;
persistentStorageVolumePath?: pulumi.Input<string>;
dockerCommand?: pulumi.Input<string[]>;
lbTargetGroupArn?: aws.lb.TargetGroup['arn'];
securityGroup?: aws.ec2.SecurityGroup;
assignPublicIp?: pulumi.Input<boolean>;
taskExecutionRoleInlinePolicies?: pulumi.Input<
pulumi.Input<RoleInlinePolicy>[]
>;
Expand Down Expand Up @@ -511,5 +661,4 @@ const project = new studion.Project('demo-project', {
## 🚧 TODO

- [ ] Add worker service for executing tasks
- [ ] Add MongoDB service
- [ ] Enable RDS password rotation
Loading