323 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			YAML
		
	
	
			
		
		
	
	
			323 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			YAML
		
	
	
| AWSTemplateFormatVersion: 2010-09-09
 | |
| Description: >-
 | |
|   AWS Fargate cluster that can span public and private subnets. Supports public
 | |
|   facing load balancers, private internal load balancers, and both internal and
 | |
|   external service discovery namespaces.  
 | |
| Parameters:
 | |
|   EnvironmentName:
 | |
|     Type: String
 | |
|     Default: development
 | |
|     Description: 'Your deployment environment: DEV, QA , PROD'
 | |
|   ServiceName:
 | |
|     Type: String
 | |
|     Default: example
 | |
|     Description: A name for the service
 | |
|   ImageUrl:
 | |
|     Type: String
 | |
|     Default: nginx
 | |
|     Description: >-
 | |
|       The url of a docker image that contains the application process that will
 | |
|       handle the traffic for this service      
 | |
|   ContainerPort:
 | |
|     Type: Number
 | |
|     Default: 80
 | |
|     Description: What port number the application inside the docker container is binding to
 | |
|   ContainerCpu:
 | |
|     Type: Number
 | |
|     Default: 1024
 | |
|     Description: How much CPU to give the container. 1024 is 1 CPU
 | |
|   ContainerMemory:
 | |
|     Type: Number
 | |
|     Default: 2048
 | |
|     Description: How much memory in megabytes to give the container
 | |
|   BUILDID:
 | |
|     Type: String
 | |
|     Default: ''
 | |
|   Command:
 | |
|     Type: String
 | |
|     Default: 'ls'
 | |
|   EntryPoint:
 | |
|     Type: String
 | |
|     Default: '/bin/sh'
 | |
|   WorkingDirectory:
 | |
|     Type: String
 | |
|     Default: '/efsdata/'
 | |
|   Role:
 | |
|     Type: String
 | |
|     Default: ''
 | |
|     Description: >-
 | |
|       (Optional) An IAM role to give the service's containers if the code within
 | |
|       needs to access other AWS resources like S3 buckets, DynamoDB tables, etc      
 | |
|   EFSMountDirectory:
 | |
|     Type: String
 | |
|     Default: '/efsdata'
 | |
|   GithubToken:
 | |
|     Type: String
 | |
|     Default: '0'
 | |
|   UnityLicense:
 | |
|     Type: String
 | |
|     Default: '0'
 | |
|   UnityEmail:
 | |
|     Type: String
 | |
|     Default: '0'
 | |
|   UnityPassword:
 | |
|     Type: String
 | |
|     Default: '0'
 | |
|   UnitySerial:
 | |
|     Type: String
 | |
|     Default: '0'
 | |
|   AndroidKeystoreBase64:
 | |
|     Type: String
 | |
|     Default: '0'
 | |
|   AndroidKeystorePass:
 | |
|     Type: String
 | |
|     Default: '0'
 | |
|   AndroidKeyAliasPass:
 | |
|     Type: String
 | |
|     Default: '0'
 | |
|   AWSAccessKeyID:
 | |
|     Type: String
 | |
|     Default: '0'
 | |
|   AWSSecretAccessKey:
 | |
|     Type: String
 | |
|     Default: '0'
 | |
| Mappings:
 | |
|   SubnetConfig:
 | |
|     VPC:
 | |
|       CIDR: 10.0.0.0/16
 | |
|     PublicOne:
 | |
|       CIDR: 10.0.0.0/24
 | |
|     PublicTwo:
 | |
|       CIDR: 10.0.1.0/24
 | |
| Conditions:
 | |
|   HasCustomRole: !Not
 | |
|     - !Equals
 | |
|       - Ref: Role
 | |
|       - ''
 | |
| Resources:
 | |
|   LogGroup:
 | |
|     Type: 'AWS::Logs::LogGroup'
 | |
|     Properties:
 | |
|       LogGroupName: !Ref ServiceName
 | |
|     Metadata:
 | |
|       'AWS::CloudFormation::Designer':
 | |
|         id: aece53ae-b82d-4267-bc16-ed964b05db27
 | |
|   SubscriptionFilter:
 | |
|     Type: 'AWS::Logs::SubscriptionFilter'
 | |
|     Properties:
 | |
|       FilterPattern: ''
 | |
|       RoleArn:
 | |
|         'Fn::ImportValue': !Sub '${EnvironmentName}:CloudWatchIAMRole'
 | |
|       LogGroupName: !Ref ServiceName
 | |
|       DestinationArn:
 | |
|         'Fn::GetAtt':
 | |
|           - KinesisStream
 | |
|           - Arn
 | |
|     Metadata:
 | |
|       'AWS::CloudFormation::Designer':
 | |
|         id: 7f809e91-9e5d-4678-98c1-c5085956c480
 | |
|     DependsOn:
 | |
|       - LogGroup
 | |
|       - KinesisStream
 | |
|   KinesisStream:
 | |
|     Type: 'AWS::Kinesis::Stream'
 | |
|     Properties:
 | |
|       Name: !Ref ServiceName
 | |
|       ShardCount: 1
 | |
|     Metadata:
 | |
|       'AWS::CloudFormation::Designer':
 | |
|         id: c6f18447-b879-4696-8873-f981b2cedd2b
 | |
|   
 | |
|   GithubTokenSecret:
 | |
|     Type: AWS::SecretsManager::Secret
 | |
|     Properties: 
 | |
|       Name: !Join [ "", [ 'GithubToken', !Ref BUILDID ] ]
 | |
|       SecretString: !Ref GithubToken
 | |
|   
 | |
|   UnityLicenseSecret:
 | |
|     Type: AWS::SecretsManager::Secret
 | |
|     Properties: 
 | |
|       Name: !Join [ "", [ 'UnityLicense', !Ref BUILDID ] ]
 | |
|       SecretString: !Ref UnityLicense  
 | |
|       
 | |
|   UnityEmailSecret:
 | |
|     Type: AWS::SecretsManager::Secret
 | |
|     Properties: 
 | |
|       Name: !Join [ "", [ 'UnityEmail', !Ref BUILDID ] ]
 | |
|       SecretString: !Ref UnityEmail
 | |
|       
 | |
|   UnityPasswordSecret:
 | |
|     Type: AWS::SecretsManager::Secret
 | |
|     Properties: 
 | |
|       Name: !Join [ "", [ 'UnityPassword', !Ref BUILDID ] ]
 | |
|       SecretString: !Ref UnityPassword
 | |
|       
 | |
|   UnitySerialSecret:
 | |
|     Type: AWS::SecretsManager::Secret
 | |
|     Properties: 
 | |
|       Name: !Join [ "", [ 'UnitySerial', !Ref BUILDID ] ]
 | |
|       SecretString: !Ref UnitySerial
 | |
|   
 | |
|   AndroidKeystoreBase64Secret:
 | |
|     Type: AWS::SecretsManager::Secret
 | |
|     Properties: 
 | |
|       Name: !Join [ "", [ 'AndroidKeystoreBase64', !Ref BUILDID ] ]
 | |
|       SecretString: !Ref AndroidKeystoreBase64
 | |
|   
 | |
|   AndroidKeystorePassSecret:
 | |
|     Type: AWS::SecretsManager::Secret
 | |
|     Properties: 
 | |
|       Name: !Join [ "", [ 'AndroidKeystorePass', !Ref BUILDID ] ]
 | |
|       SecretString: !Ref AndroidKeystorePass
 | |
|   
 | |
|   AndroidKeyAliasPassSecret:
 | |
|     Type: AWS::SecretsManager::Secret
 | |
|     Properties: 
 | |
|       Name: !Join [ "", [ 'AndroidKeyAliasPass', !Ref BUILDID ] ]
 | |
|       SecretString: !Ref AndroidKeyAliasPass
 | |
|   AWSAccessKeyIDSecret:
 | |
|     Type: AWS::SecretsManager::Secret
 | |
|     Properties: 
 | |
|       Name: !Join [ "", [ 'AWSAccessKeyID', !Ref BUILDID ] ]
 | |
|       SecretString: !Ref AWSAccessKeyID
 | |
|   AWSSecretAccessKeySecret:
 | |
|     Type: AWS::SecretsManager::Secret
 | |
|     Properties: 
 | |
|       Name: !Join [ "", [ 'AWSSecretAccessKey', !Ref BUILDID ] ]
 | |
|       SecretString: !Ref AWSSecretAccessKey
 | |
|   
 | |
|   TaskDefinition:
 | |
|     Type: 'AWS::ECS::TaskDefinition'
 | |
|     Properties:
 | |
|       Family: !Ref ServiceName
 | |
|       Cpu: !Ref ContainerCpu
 | |
|       Memory: !Ref ContainerMemory
 | |
|       NetworkMode: awsvpc
 | |
|       Volumes:
 | |
|         - Name: efs-data
 | |
|           EFSVolumeConfiguration:
 | |
|             FilesystemId:
 | |
|               'Fn::ImportValue': !Sub '${EnvironmentName}:EfsFileStorageId'
 | |
|             TransitEncryption: ENABLED
 | |
|       RequiresCompatibilities:
 | |
|         - FARGATE
 | |
|       ExecutionRoleArn:
 | |
|         'Fn::ImportValue': !Sub '${EnvironmentName}:ECSTaskExecutionRole'
 | |
|       TaskRoleArn:
 | |
|         'Fn::If':
 | |
|           - HasCustomRole
 | |
|           - !Ref Role
 | |
|           - !Ref 'AWS::NoValue'
 | |
|       ContainerDefinitions:
 | |
|         - Name: !Ref ServiceName
 | |
|           Cpu: !Ref ContainerCpu
 | |
|           Memory: !Ref ContainerMemory
 | |
|           Image: !Ref ImageUrl
 | |
|           EntryPoint:
 | |
|             Fn::Split:
 | |
|                 - ","
 | |
|                 - !Ref EntryPoint
 | |
|           Command:
 | |
|             Fn::Split:
 | |
|                 - ","
 | |
|                 - !Ref Command
 | |
|           WorkingDirectory: !Ref WorkingDirectory
 | |
|           Environment:
 | |
|             - Name: ALLOW_EMPTY_PASSWORD
 | |
|               Value: 'yes'
 | |
|           MountPoints:
 | |
|             - SourceVolume: efs-data
 | |
|               ContainerPath: !Ref EFSMountDirectory
 | |
|               ReadOnly: false
 | |
|           Secrets:
 | |
|             - Name: 'GITHUB_TOKEN'
 | |
|               ValueFrom: !Ref GithubTokenSecret
 | |
|             - Name: 'UNITY_LICENSE'
 | |
|               ValueFrom: !Ref UnityLicenseSecret
 | |
|             - Name: 'UNITY_EMAIL'
 | |
|               ValueFrom: !Ref UnityEmailSecret
 | |
|             - Name: 'UNITY_PASSWORD'
 | |
|               ValueFrom: !Ref UnityPasswordSecret
 | |
|             - Name: 'UNITY_SERIAL'
 | |
|               ValueFrom: !Ref UnitySerialSecret
 | |
|             - Name: 'ANDROID_KEYSTORE_BASE64'
 | |
|               ValueFrom: !Ref AndroidKeystoreBase64Secret
 | |
|             - Name: 'ANDROID_KEYSTORE_PASS'
 | |
|               ValueFrom: !Ref AndroidKeystorePassSecret
 | |
|             - Name: 'AWS_ACCESS_KEY_ID'
 | |
|               ValueFrom: !Ref AWSAccessKeyIDSecret
 | |
|             - Name: 'AWS_SECRET_ACCESS_KEY'
 | |
|               ValueFrom: !Ref AWSSecretAccessKeySecret
 | |
|           LogConfiguration:
 | |
|             LogDriver: awslogs
 | |
|             Options:
 | |
|               awslogs-group: !Ref ServiceName
 | |
|               awslogs-region: !Ref 'AWS::Region'
 | |
|               awslogs-stream-prefix: !Ref ServiceName
 | |
|     Metadata:
 | |
|       'AWS::CloudFormation::Designer':
 | |
|         id: dabb0116-abe0-48a6-a8af-cf9111c879a5
 | |
|     DependsOn:
 | |
|       - LogGroup
 | |
| Metadata:
 | |
|   'AWS::CloudFormation::Designer':
 | |
|     dabb0116-abe0-48a6-a8af-cf9111c879a5:
 | |
|       size:
 | |
|         width: 60
 | |
|         height: 60
 | |
|       position:
 | |
|         x: 270
 | |
|         'y': 90
 | |
|       z: 1
 | |
|       embeds: []
 | |
|       dependson:
 | |
|         - aece53ae-b82d-4267-bc16-ed964b05db27
 | |
|     c6f18447-b879-4696-8873-f981b2cedd2b:
 | |
|       size:
 | |
|         width: 60
 | |
|         height: 60
 | |
|       position:
 | |
|         x: 270
 | |
|         'y': 210
 | |
|       z: 1
 | |
|       embeds: []
 | |
|     7f809e91-9e5d-4678-98c1-c5085956c480:
 | |
|       size:
 | |
|         width: 60
 | |
|         height: 60
 | |
|       position:
 | |
|         x: 60
 | |
|         'y': 300
 | |
|       z: 1
 | |
|       embeds: []
 | |
|       dependson:
 | |
|         - aece53ae-b82d-4267-bc16-ed964b05db27
 | |
|         - c6f18447-b879-4696-8873-f981b2cedd2b
 | |
|     aece53ae-b82d-4267-bc16-ed964b05db27:
 | |
|       size:
 | |
|         width: 150
 | |
|         height: 150
 | |
|       position:
 | |
|         x: 60
 | |
|         'y': 90
 | |
|       z: 1
 | |
|       embeds: []
 | |
|     4d2da56c-3643-46b8-aaee-e46e19f95fcc:
 | |
|       source:
 | |
|         id: 7f809e91-9e5d-4678-98c1-c5085956c480
 | |
|       target:
 | |
|         id: aece53ae-b82d-4267-bc16-ed964b05db27
 | |
|       z: 11
 | |
|     14eb957b-f094-4653-93c4-77b2f851953c:
 | |
|       source:
 | |
|         id: 7f809e91-9e5d-4678-98c1-c5085956c480
 | |
|       target:
 | |
|         id: c6f18447-b879-4696-8873-f981b2cedd2b
 | |
|       z: 12
 | |
|     85c57444-e5bb-4230-bc85-e545cd4558f6:
 | |
|       source:
 | |
|         id: dabb0116-abe0-48a6-a8af-cf9111c879a5
 | |
|       target:
 | |
|         id: aece53ae-b82d-4267-bc16-ed964b05db27
 | |
|       z: 13
 |