Basic infrastructure stack
Infrastructure parameter fixes Implement working infrastructure stack in ECS
This commit is contained in:
parent
8ae3f0f3a7
commit
1ceff14887
26
.github/workflows/push_dev_infrastructure.yml
vendored
Normal file
26
.github/workflows/push_dev_infrastructure.yml
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
name: Push Dev Infrastructure
|
||||
|
||||
on:
|
||||
push:
|
||||
branches-ignore:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v2.1.0
|
||||
with:
|
||||
submodules: 'true'
|
||||
- name: Ship to S3
|
||||
uses: jakejarvis/s3-sync-action@master
|
||||
with:
|
||||
args: --follow-symlinks --delete
|
||||
env:
|
||||
SOURCE_DIR: infrastructure/cloudformation
|
||||
AWS_REGION: "us-east-1"
|
||||
DEST_DIR: dt/develop/cloudformation
|
||||
AWS_S3_BUCKET: sumu-stacks
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
33
.github/workflows/release_server.yml
vendored
33
.github/workflows/release_server.yml
vendored
@ -68,4 +68,35 @@ jobs:
|
||||
DOCKERFILE: "server/Dockerfile"
|
||||
IMAGE_NAME: "defend-together"
|
||||
TAG_NAME: ${{ steps.get_tag.outputs.TAG }}
|
||||
LATEST: "true"
|
||||
LATEST: "true"
|
||||
cloudformation:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v2.1.0
|
||||
with:
|
||||
submodules: 'true'
|
||||
- name: Ship to S3
|
||||
uses: jakejarvis/s3-sync-action@master
|
||||
with:
|
||||
args: --follow-symlinks --delete
|
||||
env:
|
||||
SOURCE_DIR: infrastructure/cloudformation
|
||||
AWS_REGION: "us-east-1"
|
||||
DEST_DIR: dt/production/cloudformation
|
||||
AWS_S3_BUCKET: sumu-stacks
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
- name: Configure AWS Credentials
|
||||
uses: aws-actions/configure-aws-credentials@v1
|
||||
with:
|
||||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
aws-region: us-east-1
|
||||
- name: Deploy to AWS CloudFormation
|
||||
uses: aws-actions/aws-cloudformation-github-deploy@v1
|
||||
with:
|
||||
name: ecs-nakama-stack
|
||||
template: cloudformation/nakama/top.yaml
|
||||
capabilities: "CAPABILITY_NAMED_IAM,CAPABILITY_IAM"
|
||||
parameter-overrides: VpcId=${{ secrets.VPC_ID }},Domain=${{ secrets.DOMAIN }},PublicSubnets=${{ secrets.SUBNET_IDS }}
|
44
infrastructure/cloudformation/dt/dns.yaml
Normal file
44
infrastructure/cloudformation/dt/dns.yaml
Normal file
@ -0,0 +1,44 @@
|
||||
AWSTemplateFormatVersion: "2010-09-09"
|
||||
Description: DT DNS stack
|
||||
Parameters:
|
||||
#------------------------
|
||||
# Deployment Information
|
||||
#------------------------
|
||||
environment:
|
||||
Type: String
|
||||
Description: Name of the environment
|
||||
Default: production
|
||||
|
||||
#-----------------------
|
||||
# Route53 Configuration
|
||||
#-----------------------
|
||||
Domain:
|
||||
Type: String
|
||||
Description: The HostedZoneName to create the endpoint on
|
||||
SubDomain:
|
||||
Type: String
|
||||
Description: The subdomain to be used by dt
|
||||
|
||||
#-----------
|
||||
# Resources
|
||||
#-----------
|
||||
DtDNS:
|
||||
Type: String
|
||||
Description: Load balancer dns name for dt endpoint
|
||||
|
||||
Resources:
|
||||
DtEndpoint:
|
||||
Type: AWS::Route53::RecordSet
|
||||
Properties:
|
||||
HostedZoneName: !Sub "${Domain}."
|
||||
Comment: 'DNS name for dt'
|
||||
Name: !Sub "${SubDomain}.${Domain}."
|
||||
Type: CNAME
|
||||
TTL: '300'
|
||||
ResourceRecords:
|
||||
- !Ref DtDNS
|
||||
|
||||
Outputs:
|
||||
Endpoint:
|
||||
Description: 'DNS name for Defend Together'
|
||||
Value: !Sub "${SubDomain}.${Domain}."
|
67
infrastructure/cloudformation/dt/load_balancing.yaml
Normal file
67
infrastructure/cloudformation/dt/load_balancing.yaml
Normal file
@ -0,0 +1,67 @@
|
||||
AWSTemplateFormatVersion: "2010-09-09"
|
||||
Description: DT load balancing stack
|
||||
Parameters:
|
||||
environment:
|
||||
Type: String
|
||||
Description: Name of the environment
|
||||
Default: production
|
||||
release:
|
||||
Type: String
|
||||
Description: Name of the release name of the stack version to use.
|
||||
Default: production
|
||||
PublicSubnets:
|
||||
Description: The public subnets for the ALB to run in.
|
||||
Type: String
|
||||
VpcId:
|
||||
Description: ID of the VPC
|
||||
Type: AWS::EC2::VPC::Id
|
||||
|
||||
Resources:
|
||||
|
||||
#-- Network Load Balancer --#
|
||||
PublicNLB:
|
||||
Type: AWS::ElasticLoadBalancingV2::LoadBalancer
|
||||
Properties:
|
||||
Type: network
|
||||
LoadBalancerAttributes:
|
||||
- Key: deletion_protection.enabled
|
||||
Value: false
|
||||
Scheme: internet-facing
|
||||
Subnets: !Split [",", !Ref PublicSubnets]
|
||||
Tags:
|
||||
- Key: Name
|
||||
Value: !Sub "DT-${environment}-NLB"
|
||||
- Key: environment
|
||||
Value: !Ref environment
|
||||
|
||||
NlbTargetGroup:
|
||||
Type: AWS::ElasticLoadBalancingV2::TargetGroup
|
||||
Properties:
|
||||
Port: 7777
|
||||
Protocol: TCP_UDP
|
||||
TargetGroupAttributes:
|
||||
- Key: deregistration_delay.timeout_seconds
|
||||
Value: '20'
|
||||
VpcId: !Ref 'VpcId'
|
||||
Tags:
|
||||
- Key: Name
|
||||
Value: !Sub 'DT-${release}'
|
||||
|
||||
NlbListener:
|
||||
Type: AWS::ElasticLoadBalancingV2::Listener
|
||||
Properties:
|
||||
DefaultActions:
|
||||
- Type: forward
|
||||
TargetGroupArn: !Ref NlbTargetGroup
|
||||
LoadBalancerArn: !Ref PublicNLB
|
||||
Port: 7777
|
||||
Protocol: TCP_UDP
|
||||
|
||||
|
||||
Outputs:
|
||||
TargetGroup:
|
||||
Description: ""
|
||||
Value: !Ref NlbTargetGroup
|
||||
NlbDnsName:
|
||||
Description: ""
|
||||
Value: !GetAtt PublicNLB.DNSName
|
38
infrastructure/cloudformation/dt/task.yaml
Normal file
38
infrastructure/cloudformation/dt/task.yaml
Normal file
@ -0,0 +1,38 @@
|
||||
AWSTemplateFormatVersion: '2010-09-09'
|
||||
Description: Defend Togeher ECS Task
|
||||
Parameters:
|
||||
LogGroupName:
|
||||
Type: String
|
||||
Description: The AWS CloudWatch log group to output logs to.
|
||||
Default: "/ecs/dt"
|
||||
|
||||
Resources:
|
||||
|
||||
LogGroup:
|
||||
Type: AWS::Logs::LogGroup
|
||||
Properties:
|
||||
RetentionInDays: 7
|
||||
LogGroupName: !Ref LogGroupName
|
||||
|
||||
TaskDefinition:
|
||||
Type: AWS::ECS::TaskDefinition
|
||||
Properties:
|
||||
ContainerDefinitions:
|
||||
- Name: defend-together
|
||||
Essential: 'true'
|
||||
Image: "josephbmanley/defend-together:latest"
|
||||
MemoryReservation: 800
|
||||
PortMappings:
|
||||
- HostPort: 0
|
||||
ContainerPort: 7777
|
||||
LogConfiguration:
|
||||
LogDriver: awslogs
|
||||
Options:
|
||||
awslogs-region:
|
||||
Ref: AWS::Region
|
||||
awslogs-group:
|
||||
Ref: LogGroup
|
||||
Outputs:
|
||||
TaskArn:
|
||||
Description: ARN of the TaskDefinition
|
||||
Value: !Ref TaskDefinition
|
111
infrastructure/cloudformation/dt/top.yaml
Normal file
111
infrastructure/cloudformation/dt/top.yaml
Normal file
@ -0,0 +1,111 @@
|
||||
AWSTemplateFormatVersion: '2010-09-09'
|
||||
Description: Defend Together ECS Infrastructure
|
||||
Parameters:
|
||||
#------------------------
|
||||
# Deployment Information
|
||||
#------------------------
|
||||
environment:
|
||||
Type: String
|
||||
Description: Name of the environment to use in naming.
|
||||
Default: production
|
||||
release:
|
||||
Type: String
|
||||
Description: Name of the release name of the stack version to use.
|
||||
Default: production
|
||||
AllowedValues: ['develop', 'production']
|
||||
ConstraintDescription: "Must be a possible release version."
|
||||
VpcId:
|
||||
Description: ID of the VPC
|
||||
Type: AWS::EC2::VPC::Id
|
||||
|
||||
#-----------------
|
||||
# Load Balancing
|
||||
#-----------------
|
||||
PublicSubnets:
|
||||
Description: The public subnets for the ALB to run in. (Space seperated)
|
||||
Type: String
|
||||
|
||||
#-----
|
||||
# DNS
|
||||
#-----
|
||||
Domain:
|
||||
Type: String
|
||||
Description: The domain to create the endpoint on (Must have an existing hosted zone ex. `example.com`) Leave blank to skip DNS.
|
||||
Default: ""
|
||||
SubDomain:
|
||||
Type: String
|
||||
Description: The subdomain to be used by dt. (ex. `dt.example.com`)
|
||||
Default: dt
|
||||
|
||||
#------------
|
||||
# CloudWatch
|
||||
#------------
|
||||
LogGroup:
|
||||
Type: String
|
||||
Description: The AWS CloudWatch log group to output logs to.
|
||||
Default: "/ecs/dt"
|
||||
|
||||
Conditions:
|
||||
CreateDns: !Not [!Equals [!Ref Domain, ""]]
|
||||
|
||||
Resources:
|
||||
|
||||
#-----
|
||||
# DNS
|
||||
#-----
|
||||
DnsRecords:
|
||||
Condition: CreateDns
|
||||
Type: AWS::CloudFormation::Stack
|
||||
Properties:
|
||||
TemplateURL: !Sub 'https://s3.${AWS::Region}.amazonaws.com/sumu-stacks/dt/${release}/cloudformation/dt/dns.yaml'
|
||||
Parameters:
|
||||
environment: !Ref environment
|
||||
Domain: !Ref Domain
|
||||
SubDomain: !Ref SubDomain
|
||||
DtDNS: !GetAtt LoadBalancing.Outputs.NlbDnsName
|
||||
|
||||
#-----------------
|
||||
# Load Balancing
|
||||
#-----------------
|
||||
LoadBalancing:
|
||||
Type: AWS::CloudFormation::Stack
|
||||
Properties:
|
||||
TemplateURL: !Sub 'https://s3.${AWS::Region}.amazonaws.com/sumu-stacks/dt/${release}/cloudformation/dt/load_balancing.yaml'
|
||||
Parameters:
|
||||
environment: !Ref environment
|
||||
release: !Ref release
|
||||
VpcId: !Ref VpcId
|
||||
PublicSubnets: !Join [",", !Split [" ", !Ref PublicSubnets]]
|
||||
|
||||
EcsCluster:
|
||||
Type: AWS::CloudFormation::Stack
|
||||
Properties:
|
||||
TemplateURL: !Sub 'https://s3.${AWS::Region}.amazonaws.com/sumu-stacks/dt/${release}/cloudformation/cluster/top.yaml'
|
||||
Parameters:
|
||||
Environment: !Ref environment
|
||||
VpcId: !Ref VpcId
|
||||
SubnetIds: !Join [",", !Split [" ", !Ref PublicSubnets]]
|
||||
Project: "DT"
|
||||
|
||||
#-------------------
|
||||
# ECS Task & Service
|
||||
#-------------------
|
||||
TaskDefinition:
|
||||
Type: AWS::CloudFormation::Stack
|
||||
Properties:
|
||||
TemplateURL: !Sub 'https://s3.${AWS::Region}.amazonaws.com/sumu-stacks/dt/${release}/cloudformation/dt/task.yaml'
|
||||
Parameters:
|
||||
LogGroupName: !Ref LogGroup
|
||||
|
||||
|
||||
EcsService:
|
||||
DependsOn: LoadBalancing
|
||||
Type: AWS::ECS::Service
|
||||
Properties:
|
||||
Cluster: !GetAtt EcsCluster.Outputs.Cluster
|
||||
DesiredCount: 1
|
||||
TaskDefinition: !GetAtt TaskDefinition.Outputs.TaskArn
|
||||
LoadBalancers:
|
||||
- ContainerName: "defend-together"
|
||||
ContainerPort: 7777
|
||||
TargetGroupArn: !GetAtt LoadBalancing.Outputs.TargetGroup
|
Reference in New Issue
Block a user