stackql-deploy 2.0.6

Infrastructure-as-code framework for declarative cloud resource management using StackQL
version: 1
name: sqlserver-migration-lab
description: SQL Server 2016 Express RDS lab instance for Databricks migration course
providers:
  - awscc::v26.03.00379

globals:
  - name: region
    value: ap-southeast-2
  - name: db_master_username
    value: admin
  - name: db_master_password
    value: "{{ DB_MASTER_PASSWORD }}"
  - name: global_tags
    value:
      - Key: 'stackql:stack-name'
        Value: "{{ stack_name }}"
      - Key: 'stackql:stack-env'
        Value: "{{ stack_env }}"
      - Key: 'stackql:resource-name'
        Value: "{{ resource_name }}"

resources:
  - name: vpc
    description: VPC for SQL Server lab
    props:
      - name: vpc_cidr_block
        values:
          prd:
            value: "10.0.0.0/16"
          sit:
            value: "10.1.0.0/16"
          dev:
            value: "10.2.0.0/16"
      - name: vpc_tags
        value:
          - Key: Name
            Value: "{{ stack_name }}-{{ stack_env }}-vpc"
        merge:
          - global_tags
    return_vals:
      create:
        - RequestToken
    exports:
      - vpc_id
      - vpc_cidr_block

  - name: subnet_a
    file: subnet.iql
    props:
      - name: subnet_cidr_block
        values:
          prd:
            value: "10.0.1.0/24"
          sit:
            value: "10.1.1.0/24"
          dev:
            value: "10.2.1.0/24"
      - name: availability_zone
        value: ap-southeast-2a
      - name: subnet_tags
        value:
          - Key: Name
            Value: "{{ stack_name }}-{{ stack_env }}-subnet-a"
        merge: ['global_tags']
    return_vals:
      create:
        - RequestToken
    exports:
      - subnet_id: subnet_a_id
      - availability_zone: subnet_a_availability_zone

  - name: subnet_b
    file: subnet.iql
    props:
      - name: subnet_cidr_block
        values:
          prd:
            value: "10.0.2.0/24"
          sit:
            value: "10.1.2.0/24"
          dev:
            value: "10.2.2.0/24"
      - name: availability_zone
        value: ap-southeast-2b
      - name: subnet_tags
        value:
          - Key: Name
            Value: "{{ stack_name }}-{{ stack_env }}-subnet-b"
        merge: ['global_tags']
    return_vals:
      create:
        - RequestToken
    exports:
      - subnet_id: subnet_b_id
      - availability_zone: subnet_b_availability_zone

  - name: db_subnet_group
    description: RDS subnet group spanning 2 AZs
    props:
      - name: db_subnet_group_name
        value: "{{ stack_name }}-{{ stack_env }}-subnet-group"
      - name: db_subnet_group_description
        value: SQL Server lab subnet group
      - name: subnet_ids
        value:
          - '{{ subnet_a_id }}'
          - '{{ subnet_b_id }}'
      - name: tags
        value: []
        merge: ['global_tags']
    return_vals:
      create:
        - RequestToken        
    exports:
      - db_subnet_group_name

  - name: inet_gateway
    props:
      - name: inet_gateway_tags
        value:
          - Key: Name
            Value: "{{ stack_name }}-{{ stack_env }}-inet-gateway"
        merge: ['global_tags']
    exports:
      - internet_gateway_id

  - name: inet_gw_attachment
    props: []

  - name: route_table
    props:
      - name: route_table_tags
        value:
          - Key: Name
            Value: "{{ stack_name }}-{{ stack_env }}-route-table"
        merge: ['global_tags']
    exports:
      - route_table_id

  - name: subnet_rt_assn_a
    file: subnet_rt_assn.iql
    props:
      - name: subnet_id
        value: '{{ subnet_a_id }}'
      - name: route_table_id
        value: '{{ route_table_id }}'
    exports:
      - subnet_route_table_assn_id: subnet_a_route_table_assn_id

  - name: subnet_rt_assn_b
    file: subnet_rt_assn.iql
    props:
      - name: subnet_id
        value: '{{ subnet_b_id }}'
      - name: route_table_id
        value: '{{ route_table_id }}'
    exports:
      - subnet_route_table_assn_id: subnet_b_route_table_assn_id

  - name: inet_route
    props: []

  - name: security_group
    props:
      - name: group_description
        value: SG allowing inbound MSSQL from anywhere
      - name: group_name
        value: "{{ stack_name }}-{{ stack_env }}-sg"
      - name: sg_tags
        value: []
        merge: ['global_tags']
      - name: security_group_ingress
        value:
          - IpProtocol: "tcp"
            CidrIp: "0.0.0.0/0"
            Description: Allow MSSQL from anywhere
            FromPort: 1433
            ToPort: 1433
      - name: security_group_egress
        value:
          - CidrIp: "0.0.0.0/0"
            Description: Allow all outbound traffic
            FromPort: -1
            ToPort: -1
            IpProtocol: "-1"
    return_vals:
      create:
        - RequestToken
    exports:
      - security_group_id

  - name: db_instance
    description: SQL Server 2016 Express RDS instance
    props:
      - name: db_instance_identifier
        value: "{{ stack_name }}-{{ stack_env }}"
      - name: db_instance_class
        value: db.t3.small
      - name: engine
        value: sqlserver-ex
      - name: engine_version
        value: "14.00"
      - name: allocated_storage
        value: "20"
      - name: storage_type
        value: gp2
      - name: license_model
        value: license-included
      - name: master_username
        value: "{{ db_master_username }}"
      - name: master_user_password
        value: "{{ db_master_password }}"
      - name: db_subnet_group_name
        value: "{{ db_subnet_group_name }}"
      - name: vpc_security_groups
        value:
          - "{{ security_group_id }}"
      - name: publicly_accessible
        value: true
      - name: multi_az
        value: false
      - name: backup_retention_period
        value: 0
      - name: tags
        value: []
        merge: ['global_tags']
    return_vals:
      create:
        - RequestToken
    exports:
      - db_endpoint