217 lines
5.7 KiB
YAML
217 lines
5.7 KiB
YAML
|
AWSTemplateFormatVersion: "2010-09-09"
|
||
|
|
||
|
Resources:
|
||
|
VPC:
|
||
|
Type: AWS::EC2::VPC # or AWS::RDS::DBSubnetGroup
|
||
|
Properties: # or Properties
|
||
|
CidrBlock: 10.0.0.0/16 # this is the VPC CIDR block (CIDR = Classless Inter-Domain Routing, it means you can use 0.0.0.0/0 for all IPs)
|
||
|
EnableDnsSupport: true # Enable DNS hostnames (EnableDnsSupport is true by default)
|
||
|
EnableDnsHostnames: true # Enable DNS hostnames (EnableDnsHostnames is true by default)
|
||
|
|
||
|
SubnetA:
|
||
|
Type: AWS::EC2::Subnet # this subnet is for the ECS instances (webserver)
|
||
|
Properties:
|
||
|
VpcId: !Ref VPC
|
||
|
CidrBlock: 10.0.0.0/24 # this is the subnet CIDR block it means that you can use 10.0.0.0/24
|
||
|
AvailabilityZone: eu-central-1a
|
||
|
|
||
|
SubnetB:
|
||
|
Type: AWS::EC2::Subnet # this subnet is for the RDS
|
||
|
Properties:
|
||
|
VpcId: !Ref VPC
|
||
|
CidrBlock: 10.0.1.0/24
|
||
|
AvailabilityZone: eu-central-1b
|
||
|
|
||
|
Nacl:
|
||
|
Type: AWS::EC2::NetworkAcl
|
||
|
Properties:
|
||
|
VpcId: !Ref VPC
|
||
|
|
||
|
InboundRuleHttps:
|
||
|
Type: AWS::EC2::NetworkAclEntry
|
||
|
Properties:
|
||
|
NetworkAclId: !Ref Nacl
|
||
|
RuleNumber: "1"
|
||
|
Protocol: 6
|
||
|
RuleAction: allow
|
||
|
PortRange:
|
||
|
From: 443
|
||
|
To: 443
|
||
|
Egress: false # Egress means outbound
|
||
|
CidrBlock: 0.0.0.0/0
|
||
|
|
||
|
InboundRuleHttp:
|
||
|
Type: AWS::EC2::NetworkAclEntry
|
||
|
Properties:
|
||
|
NetworkAclId: !Ref Nacl
|
||
|
RuleNumber: "2"
|
||
|
Protocol: 6
|
||
|
RuleAction: allow
|
||
|
PortRange:
|
||
|
From: 80
|
||
|
To: 80
|
||
|
Egress: false # Egress means outbound
|
||
|
CidrBlock: 0.0.0.0/0
|
||
|
|
||
|
OutboundRuleHttps:
|
||
|
Type: AWS::EC2::NetworkAclEntry
|
||
|
Properties:
|
||
|
NetworkAclId: !Ref Nacl
|
||
|
RuleNumber: "3"
|
||
|
Protocol: 6
|
||
|
PortRange:
|
||
|
From: 443
|
||
|
To: 443
|
||
|
RuleAction: allow
|
||
|
Egress: true
|
||
|
CidrBlock: 0.0.0.0/0
|
||
|
|
||
|
OutboundRuleHttp:
|
||
|
Type: AWS::EC2::NetworkAclEntry
|
||
|
Properties:
|
||
|
NetworkAclId: !Ref Nacl
|
||
|
RuleNumber: "4"
|
||
|
Protocol: 6
|
||
|
PortRange:
|
||
|
From: 80
|
||
|
To: 80
|
||
|
RuleAction: allow
|
||
|
Egress: true
|
||
|
CidrBlock: 0.0.0.0/0
|
||
|
|
||
|
RDSInstance:
|
||
|
Type: AWS::RDS::DBInstance
|
||
|
Properties:
|
||
|
AllocatedStorage: 20
|
||
|
DBInstanceClass: db.t2.micro
|
||
|
Engine: mysql # or postgres
|
||
|
MasterUsername: root_user
|
||
|
MasterUserPassword: root_password
|
||
|
DBName: root_db
|
||
|
MultiAZ: false
|
||
|
|
||
|
ECSCluster:
|
||
|
Type: AWS::ECS::Cluster # this ECSCluster is to run the ECS tasks
|
||
|
|
||
|
ECSTaskDefinition:
|
||
|
Type: AWS::ECS::TaskDefinition
|
||
|
Properties:
|
||
|
NetworkMode: awsvpc
|
||
|
RequiresCompatibilities:
|
||
|
- FARGATE
|
||
|
ExecutionRoleArn: !Ref ExecutionRole
|
||
|
TaskRoleArn: !Ref TaskRole
|
||
|
Cpu: 256
|
||
|
Memory: 0.5GB
|
||
|
Family: !Ref ECSCluster
|
||
|
ContainerDefinitions:
|
||
|
- Name: commit-nginx
|
||
|
Image: 539634357948.dkr.ecr.eu-central-1.amazonaws.com/commit-nginx:latest
|
||
|
Memory: 512 # Specify memory here (in MiB)
|
||
|
PortMappings:
|
||
|
- ContainerPort: 80
|
||
|
- ContainerPort: 443
|
||
|
|
||
|
ECSService:
|
||
|
Type: AWS::ECS::Service
|
||
|
Properties:
|
||
|
Cluster: !Ref ECSCluster
|
||
|
LoadBalancers:
|
||
|
- ContainerName: commit-nginx
|
||
|
ContainerPort: 80
|
||
|
LoadBalancerName: !GetAtt LoadBalancer.Name
|
||
|
TaskDefinition: !Ref ECSTaskDefinition
|
||
|
DesiredCount: 1
|
||
|
LaunchType: EC2
|
||
|
NetworkConfiguration:
|
||
|
AwsvpcConfiguration:
|
||
|
Subnets:
|
||
|
- !Ref SubnetA
|
||
|
- !Ref SubnetB
|
||
|
DependsOn:
|
||
|
- "LoadBalancer"
|
||
|
|
||
|
|
||
|
LoadBalancer:
|
||
|
Type: AWS::ElasticLoadBalancingV2::LoadBalancer
|
||
|
Properties:
|
||
|
Name: "Commit-elb"
|
||
|
LoadBalancerAttributes:
|
||
|
# this is the default, but is specified here in case it needs to be changed
|
||
|
- Key: idle_timeout.timeout_seconds
|
||
|
Value: 60
|
||
|
# "internal" is also an option
|
||
|
Scheme: internet-facing
|
||
|
Subnets:
|
||
|
- !Ref SubnetA
|
||
|
- !Ref SubnetB
|
||
|
|
||
|
ExecutionRole:
|
||
|
Type: AWS::IAM::Role
|
||
|
Properties:
|
||
|
RoleName: "Commit-ECSRole"
|
||
|
AssumeRolePolicyDocument:
|
||
|
Statement:
|
||
|
- Effect: Allow
|
||
|
Principal:
|
||
|
Service: ecs-tasks.amazonaws.com
|
||
|
Action: "sts:AssumeRole"
|
||
|
ManagedPolicyArns:
|
||
|
- "arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy"
|
||
|
|
||
|
TaskRole:
|
||
|
Type: AWS::IAM::Role
|
||
|
Properties:
|
||
|
RoleName: "Commit-TaskRole"
|
||
|
AssumeRolePolicyDocument:
|
||
|
Statement:
|
||
|
- Effect: Allow
|
||
|
Principal:
|
||
|
Service: ecs-tasks.amazonaws.com
|
||
|
Action: "sts:AssumeRole"
|
||
|
|
||
|
MyInternetGateway:
|
||
|
Type: AWS::EC2::InternetGateway
|
||
|
Properties:
|
||
|
Tags:
|
||
|
- Key: stack
|
||
|
Value: production
|
||
|
|
||
|
MyVPCGatewayAttachment:
|
||
|
Type: AWS::EC2::VPCGatewayAttachment
|
||
|
Properties:
|
||
|
InternetGatewayId: !Ref MyInternetGateway
|
||
|
VpcId: !Ref VPC
|
||
|
|
||
|
|
||
|
|
||
|
ListenerHTTPS:
|
||
|
Type: AWS::ElasticLoadBalancingV2::Listener
|
||
|
Properties:
|
||
|
DefaultActions:
|
||
|
- TargetGroupArn: !Ref TargetGroup
|
||
|
Type: forward
|
||
|
LoadBalancerArn: !Ref LoadBalancer
|
||
|
Port: 80
|
||
|
Protocol: HTTP
|
||
|
# Certificates:
|
||
|
# - CertificateArn: "arn:aws:acm:eu-central-1:539634357948:certificate/584cfb24-bc7a-431b-9150-16d47bdb8ea9"
|
||
|
|
||
|
TargetGroup:
|
||
|
Type: AWS::ElasticLoadBalancingV2::TargetGroup
|
||
|
Properties:
|
||
|
HealthCheckIntervalSeconds: 10
|
||
|
# will look for a 200 status code by default unless specified otherwise
|
||
|
HealthCheckPath: "/"
|
||
|
HealthCheckTimeoutSeconds: 5
|
||
|
UnhealthyThresholdCount: 2
|
||
|
HealthyThresholdCount: 2
|
||
|
Name: MyTargetGroup
|
||
|
Port: 80
|
||
|
Protocol: HTTP
|
||
|
TargetGroupAttributes:
|
||
|
- Key: deregistration_delay.timeout_seconds
|
||
|
Value: 60 # default is 300
|
||
|
TargetType: ip
|
||
|
VpcId: !Ref VPC
|