AWSTemplateFormatVersion: "2010-09-09" Parameters: EksWorkVPC: Type: AWS::EC2::VPC::Id WorkerSubnet1Block: Type: String Default: 192.168.0.0/24 WorkerSubnet2Block: Type: String Default: 192.168.1.0/24 WorkerSubnet3Block: Type: String Default: 192.168.2.0/24 ClusterBaseName: Type: String Default: eks-work TargetRegion: Type: String Default: ap-northeast-2 AvailabilityZone1: Type: String Default: ap-northeast-2a AvailabilityZone2: Type: String Default: ap-northeast-2b AvailabilityZone3: Type: String Default: ap-northeast-2c RdsSubnet1Block: Type: String Default: 192.168.3.0/24 RdsSubnet2Block: Type: String Default: 192.168.4.0/24 RdsSubnet3Block: Type: String Default: 192.168.5.0/24 Resources: RdsSubnet1: Type: AWS::EC2::Subnet Properties: AvailabilityZone: !Ref AvailabilityZone1 CidrBlock: !Ref RdsSubnet1Block VpcId: !Ref EksWorkVPC Tags: - Key: Name Value: !Sub ${ClusterBaseName}-PrivateSubnet1 - Key: kubernetes.io/role/internal-elb Value: 1 RdsSubnet2: Type: AWS::EC2::Subnet Properties: AvailabilityZone: !Ref AvailabilityZone2 CidrBlock: !Ref RdsSubnet2Block VpcId: !Ref EksWorkVPC Tags: - Key: Name Value: !Sub ${ClusterBaseName}-PrivateSubnet2 - Key: kubernetes.io/role/internal-elb Value: 1 RdsSubnet3: Type: AWS::EC2::Subnet Properties: AvailabilityZone: !Ref AvailabilityZone3 CidrBlock: !Ref RdsSubnet3Block VpcId: !Ref EksWorkVPC Tags: - Key: Name Value: !Sub ${ClusterBaseName}-PrivateSubnet3 - Key: kubernetes.io/role/internal-elb Value: 1 RdsSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Security Group for RDS VpcId: !Ref EksWorkVPC RdsIngressPostgreSQLWorker1: Type: AWS::EC2::SecurityGroupIngress Properties: GroupId: !Ref RdsSecurityGroup CidrIp: !Ref WorkerSubnet1Block IpProtocol: tcp FromPort: 5432 # mysql 3306 mariadb 3396 postgresql 5432 ToPort: 5432 RdsIngressPostgreSQLWorker2: Type: AWS::EC2::SecurityGroupIngress Properties: GroupId: !Ref RdsSecurityGroup CidrIp: !Ref WorkerSubnet2Block IpProtocol: tcp FromPort: 5432 ToPort: 5432 RdsIngressPostgreSQLWorker3: Type: AWS::EC2::SecurityGroupIngress Properties: GroupId: !Ref RdsSecurityGroup CidrIp: !Ref WorkerSubnet3Block IpProtocol: tcp FromPort: 5432 ToPort: 5432 EksWorkDB: Type: "AWS::RDS::DBInstance" Properties: DBInstanceIdentifier: !Sub ${ClusterBaseName}-db Engine: postgres # https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#aws-properties-rds-database-instance-properties EngineVersion: 11 # https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MySQL.html#MySQL.Concepts.VersionMgmt DBInstanceClass: db.t2.micro AllocatedStorage: 30 StorageType: gp2 DBName: eksworkdb MasterUsername: !Join ['', ['{{resolve:secretsmanager:', !Ref RdsMasterSecret, ':SecretString:username}}' ]] MasterUserPassword: !Join ['', ['{{resolve:secretsmanager:', !Ref RdsMasterSecret, ':SecretString:password}}' ]] DBSubnetGroupName: !Ref EksWorkDBSubnetGroup PubliclyAccessible: false MultiAZ: false PreferredBackupWindow: 18:00-18:30 PreferredMaintenanceWindow: sat:19:00-sat:19:30 AutoMinorVersionUpgrade: false DBParameterGroupName: !Ref EksWorkDBParameterGroup VPCSecurityGroups: - !Ref RdsSecurityGroup CopyTagsToSnapshot: true BackupRetentionPeriod: 7 DeletionProtection: false RdsMasterSecret: Type: AWS::SecretsManager::Secret Properties: GenerateSecretString: SecretStringTemplate: '{"username": "eksdbadmin"}' GenerateStringKey: 'password' PasswordLength: 16 ExcludeCharacters: '"@/\''' Name: RdsMasterSecret RdsUserSecret: Type: AWS::SecretsManager::Secret Properties: GenerateSecretString: SecretStringTemplate: '{"username": "mywork"}' GenerateStringKey: 'password' PasswordLength: 16 ExcludeCharacters: '"@/\''{}#%&*<>[]^`|' Name: RdsUserSecret RdsSecretAttachment: Type: AWS::SecretsManager::SecretTargetAttachment Properties: SecretId: !Ref RdsMasterSecret TargetId: !Ref EksWorkDB TargetType: AWS::RDS::DBInstance EksWorkDBSubnetGroup: Type: AWS::RDS::DBSubnetGroup Properties: DBSubnetGroupName: subnet-group-eks-work-db DBSubnetGroupDescription: "DB Subnet Group" SubnetIds: - !Ref RdsSubnet1 - !Ref RdsSubnet2 - !Ref RdsSubnet3 EksWorkDBParameterGroup: Type: AWS::RDS::DBParameterGroup Properties: Family: postgres11 # aws rds describe-db-engine-versions --query "DBEngineVersions[].DBParameterGroupFamily" Description: Parameter Group for PostgreSQL 11 Outputs: RDSEndpoint: Value: !GetAtt EksWorkDB.Endpoint.Address