-
-
Notifications
You must be signed in to change notification settings - Fork 41
/
Copy pathssm_release.tf
79 lines (75 loc) · 3.32 KB
/
ssm_release.tf
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
//////////////////////////////////////////////[ SYSTEM MANAGER DOCUMENT RELEASE ]/////////////////////////////////////////
# # ---------------------------------------------------------------------------------------------------------------------#
# Create SSM Document to check and deploy latest release on EC2 from S3
# # ---------------------------------------------------------------------------------------------------------------------#
resource "aws_ssm_document" "release" {
name = "LatestReleaseDeployment"
document_format = "YAML"
document_type = "Automation"
content = <<EOF
schemaVersion: "0.3"
description: "Latest release deployment step"
parameters:
EventSource:
type: String
description: "Event Source"
default: ""
LogFileName:
type: String
description: "SSM Document Execution log file"
default: "/tmp/ssm_execution_log.txt"
Force:
type: String
description: "Force SSM Document Steps Execution"
default: "false"
mainSteps:
- name: "LatestReleaseDeployment"
action: "aws:runCommand"
inputs:
DocumentName: "AWS-RunShellScript"
Parameters:
commands:
- |-
#!/bin/bash
echo "Start release check step $(date)" >> {{ LogFileName }}
LATEST_RELEASE=$(aws s3 ls s3://${aws_s3_bucket.this["system"].bucket}/releases/ --recursive | sort | tail -n 1 | awk '{print $3}')
if [ -z "$${LATEST_RELEASE}" ]; then
echo "-- Release directory not found or empty" >> {{ LogFileName }}
exit 1
fi
RELEASES_DIRECTORY="/home/${var.brand}/releases"
for DIRECTORY in $${RELEASES_DIRECTORY}/*; do
if [ "$(basename "$${DIRECTORY}")" == "$${LATEST_RELEASE}" ]; then
echo "-- [INFO]: Release directory [$${LATEST_RELEASE}] already exists" >> {{ LogFileName }}
exit 1
fi
done
echo "-- Latest release found: [$${LATEST_RELEASE}]" >> {{ LogFileName }}
SHARED_DIRECTORY="/home/${var.brand}/shared"
LATEST_RELEASE_DIRECTORY="/home/${var.brand}/releases/$${LATEST_RELEASE}"
mkdir -p $${LATEST_RELEASE_DIRECTORY}/pub
ln -nfs "$${SHARED_DIRECTORY}/var" "$${LATEST_RELEASE_DIRECTORY}/var"
ln -nfs "$${SHARED_DIRECTORY}/pub/media" "$${LATEST_RELEASE_DIRECTORY}/pub/media"
aws s3 sync "s3://${aws_s3_bucket.this["system"].bucket}/releases/$${LATEST_RELEASE}" "$${LATEST_RELEASE_DIRECTORY}"
if ! df -T "$${LATEST_RELEASE_DIRECTORY}/pub/media" | grep -q "efs"; then
echo "-- [ERROR]: The media directory is not an EFS mount" >> {{ LogFileName }}
exit 1
fi
cd $${LATEST_RELEASE_DIRECTORY}
unzip $${LATEST_RELEASE}.zip && rm -f $${LATEST_RELEASE}.zip
if [[ $? -eq 0 ]]; then
echo "-- The archive with the new release has been unpacked" >> {{ LogFileName }}
else
echo "-- [ERROR]: The archive is broken" >> {{ LogFileName }}
exit 1
fi
ln -nfs "$${LATEST_RELEASE_DIRECTORY}" "$${PUBLIC_HTML}"
- name: "SendExecutionLog"
action: "aws:executeAutomation"
inputs:
DocumentName: "SendExecutionLog"
RuntimeParameters:
EventSource:
- {{ EventSource }}
EOF
}