-
Notifications
You must be signed in to change notification settings - Fork 0
232 lines (208 loc) · 8.63 KB
/
Copy pathterraform.yml
File metadata and controls
232 lines (208 loc) · 8.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
name: Terraform Plan and Apply
on:
workflow_dispatch:
inputs:
environment:
description: 'The target environment for deployment'
required: true
default: 'Sandbox'
type: choice
options:
- Sandbox
- Production
apply:
description: 'Apply the Terraform plan after creation'
required: false
default: false
type: boolean
jobs:
terraform:
# dev is used for Sandbox deployments, main is used for Production deployments
if: github.ref_name == 'dev' && github.event.inputs.environment == 'Sandbox' || github.ref_name == 'main' && github.event.inputs.environment == 'Production'
permissions:
contents: read
id-token: write
environment: ${{ inputs.environment }}
runs-on: ubuntu-latest
# workaround for "context access might be invalid warning"
env:
IMAGE_REPO: ghcr.io/bcgov/otp-provider
IMAGE_TAG: dev
TF_STATE_BUCKET_NAME:
TF_STATE_BUCKET_KEY:
TF_STATE_BUCKET_REGION:
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- uses: hashicorp/setup-terraform@v4
with:
terraform_version: 1.11.0
- name: Get latest tag
id: tag
run: |
if [ "${{ github.event.inputs.environment }}" == "Production" ]; then
echo "IMAGE_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV
else
echo "IMAGE_TAG=dev" >> $GITHUB_ENV
fi
- name: Set global environment variables
run: |
cat >> $GITHUB_ENV <<EOF
TF_VAR_otp_cwlogs_group=/aws/ecs/fargate/otp-provider
TF_STATE_BUCKET_KEY=otp-provider.tfstate
TF_STATE_BUCKET_REGION=ca-central-1
TF_VAR_otp_image_repo=${{ env.IMAGE_REPO }}
TF_VAR_ches_api_url=https://ches.api.gov.bc.ca/api/v1/email
TF_VAR_ches_token_url=https://loginproxy.gov.bc.ca/auth/realms/comsvcauth/protocol/openid-connect/token
TF_VAR_email_provider=ches
EOF
- name: Set sandbox environment variables
if: github.event.inputs.environment == 'Sandbox'
run: |
cat >> $GITHUB_ENV <<EOF
TF_STATE_BUCKET_NAME=otp-provider-tf-sandbox
TF_VAR_otp_image_tag=${{ env.IMAGE_TAG }}
TF_VAR_subnet_a=Dev-App-A
TF_VAR_subnet_b=Dev-App-B
TF_VAR_dev_app_url=https://dev.sandbox.otp.loginproxy.gov.bc.ca
TF_VAR_mail_from=no-reply-sso@gov.bc.ca
TF_VAR_dev_custom_domain_name=dev.sandbox.otp.loginproxy.gov.bc.ca
TF_VAR_dev_cors_origins=https://dev.sandbox.loginproxy.gov.bc.ca
TF_VAR_dev_task_cpu=256
TF_VAR_dev_task_memory=512
TF_VAR_dev_task_container_cpu=256
TF_VAR_dev_task_container_memory=512
TF_VAR_dev_task_container_port=3000
TF_VAR_dev_rds_min_capacity=0
TF_VAR_dev_rds_max_capacity=2
TF_VAR_dev_rds_scale_down_time=3600
TF_VAR_test_app_url=https://test.sandbox.otp.loginproxy.gov.bc.ca
TF_VAR_test_custom_domain_name=test.sandbox.otp.loginproxy.gov.bc.ca
TF_VAR_test_cors_origins=https://test.sandbox.loginproxy.gov.bc.ca
TF_VAR_test_task_cpu=256
TF_VAR_test_task_memory=512
TF_VAR_test_task_container_cpu=256
TF_VAR_test_task_container_memory=512
TF_VAR_test_task_container_port=3000
TF_VAR_test_rds_min_capacity=0
TF_VAR_test_rds_max_capacity=2
TF_VAR_test_rds_scale_down_time=3600
TF_VAR_prod_app_url=https://sandbox.otp.loginproxy.gov.bc.ca
TF_VAR_prod_custom_domain_name=sandbox.otp.loginproxy.gov.bc.ca
TF_VAR_prod_cors_origins=https://sandbox.loginproxy.gov.bc.ca
TF_VAR_prod_task_cpu=256
TF_VAR_prod_task_memory=512
TF_VAR_prod_task_container_cpu=256
TF_VAR_prod_task_container_memory=512
TF_VAR_prod_task_container_port=3000
TF_VAR_prod_rds_min_capacity=0
TF_VAR_prod_rds_max_capacity=2
TF_VAR_prod_rds_scale_down_time=3600
TF_VAR_enable_grafana=true
TF_VAR_grafana_kc_url=${{ vars.GRAFANA_OAUTH_BASE_URL }}
TF_VAR_grafana_kc_client_id=${{ secrets.GRAFANA_OAUTH_CLIENT_ID }}
TF_VAR_grafana_kc_client_secret=${{ secrets.GRAFANA_OAUTH_CLIENT_SECRET }}
TF_VAR_dev_desired_tasks=1
TF_VAR_dev_enable_autoscale=true
TF_VAR_test_desired_tasks=1
TF_VAR_test_enable_autoscale=false
TF_VAR_prod_desired_tasks=1
TF_VAR_prod_enable_autoscale=false
TF_VAR_cpu_target_use=15
TF_VAR_autoscale_max_capacity=2
TF_VAR_autoscale_min_capacity=1
EOF
- name: Set production environment variables
if: github.event.inputs.environment == 'Production'
run: |
cat >> $GITHUB_ENV <<EOF
TF_STATE_BUCKET_NAME=otp-provider-tf-production
TF_VAR_otp_image_tag=${{ env.IMAGE_TAG }}
TF_VAR_subnet_a=Prod-App-A
TF_VAR_subnet_b=Prod-App-B
TF_VAR_dev_app_url=https://dev.otp.loginproxy.gov.bc.ca
TF_VAR_mail_from=no-reply-sso@gov.bc.ca
TF_VAR_dev_custom_domain_name=dev.otp.loginproxy.gov.bc.ca
TF_VAR_dev_cors_origins=https://dev.loginproxy.gov.bc.ca
TF_VAR_dev_task_cpu=256
TF_VAR_dev_task_memory=512
TF_VAR_dev_task_container_cpu=256
TF_VAR_dev_task_container_memory=512
TF_VAR_dev_task_container_port=3000
TF_VAR_dev_rds_min_capacity=0.5
TF_VAR_dev_rds_max_capacity=2
TF_VAR_dev_rds_scale_down_time=36000
TF_VAR_test_app_url=https://test.otp.loginproxy.gov.bc.ca
TF_VAR_test_custom_domain_name=test.otp.loginproxy.gov.bc.ca
TF_VAR_test_cors_origins=https://test.loginproxy.gov.bc.ca
TF_VAR_test_task_cpu=256
TF_VAR_test_task_memory=512
TF_VAR_test_task_container_cpu=256
TF_VAR_test_task_container_memory=512
TF_VAR_test_task_container_port=3000
TF_VAR_test_rds_min_capacity=0.5
TF_VAR_test_rds_max_capacity=2
TF_VAR_test_rds_scale_down_time=36000
TF_VAR_prod_app_url=https://otp.loginproxy.gov.bc.ca
TF_VAR_prod_custom_domain_name=otp.loginproxy.gov.bc.ca
TF_VAR_prod_cors_origins=https://loginproxy.gov.bc.ca
TF_VAR_prod_task_cpu=512
TF_VAR_prod_task_memory=1024
TF_VAR_prod_task_container_cpu=512
TF_VAR_prod_task_container_memory=1024
TF_VAR_prod_task_container_port=3000
TF_VAR_prod_rds_min_capacity=0.5
TF_VAR_prod_rds_max_capacity=2
TF_VAR_prod_rds_scale_down_time=36000
TF_VAR_enable_grafana=true
TF_VAR_grafana_kc_url=${{ vars.GRAFANA_OAUTH_BASE_URL }}
TF_VAR_grafana_kc_client_id=${{ secrets.GRAFANA_OAUTH_CLIENT_ID }}
TF_VAR_grafana_kc_client_secret=${{ secrets.GRAFANA_OAUTH_CLIENT_SECRET }}
TF_VAR_dev_desired_tasks=1
TF_VAR_dev_enable_autoscale=false
TF_VAR_test_desired_tasks=1
TF_VAR_test_enable_autoscale=false
TF_VAR_prod_desired_tasks=2
TF_VAR_prod_enable_autoscale=true
TF_VAR_prod_enable_alb_alarm = true
TF_VAR_prod_enable_alerts = true
TF_VAR_prod_alert_webhook_url = ${{ secrets.alert_webhook_url }}
TF_VAR_cpu_target_use=15
TF_VAR_autoscale_max_capacity=4
TF_VAR_autoscale_min_capacity=2
EOF
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v6
with:
role-to-assume: ${{ secrets.SSO_AWS_GH_ACTIONS_DEPLOYER }}
aws-region: ca-central-1
- name: Terraform Variables
run: |
cat >"config.tf" <<EOF
terraform {
backend "s3" {
bucket = "${{ env.TF_STATE_BUCKET_NAME }}"
key = "${{ env.TF_STATE_BUCKET_KEY }}"
region = "${{ env.TF_STATE_BUCKET_REGION }}"
use_lockfile = true
}
}
EOF
working-directory: ./terraform
- name: Terraform Init
id: init
run: terraform init -upgrade
working-directory: ./terraform
- name: Terraform Plan
id: plan
run: terraform plan -no-color
working-directory: ./terraform
continue-on-error: true
- name: Terraform Plan Status
if: steps.plan.outcome == 'failure'
run: exit 1
- name: Terraform Apply
if: ${{ github.event.inputs.apply == 'true' }}
run: terraform apply -auto-approve
working-directory: ./terraform