79 lines
2.9 KiB
Bash
Executable File
79 lines
2.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Helper script that provides a set of methods to configure VPC, EFS and FSx
|
|
# ready for the full suite of integration tests.
|
|
|
|
function create_fsx_security_group() {
|
|
echo "[Creating FSx Security Group] Creating security group"
|
|
|
|
IFS=',' read -r -a subnets_list <<< "$EKS_PRIVATE_SUBNETS"
|
|
local vpc_id="$(aws ec2 describe-subnets --subnet-ids "${subnets_list[0]}" \
|
|
--output text --query "Subnets[0].VpcId" --region ${REGION})"
|
|
|
|
local fsx_security_group="${DEPLOY_NAME}-fsx-sg"
|
|
FSX_SECURITY_GROUP_ID="$(aws ec2 create-security-group --region "${REGION}" \
|
|
--vpc-id ${vpc_id} \
|
|
--description "Security group for FSx in ${DEPLOY_NAME}" \
|
|
--group-name "${fsx_security_group}" --output text --query "GroupId")"
|
|
|
|
# Open FSx port to internal security group
|
|
aws ec2 authorize-security-group-ingress \
|
|
--region "${REGION}" --group-id "${FSX_SECURITY_GROUP_ID}" \
|
|
--protocol tcp --port 988 --source-group "${FSX_SECURITY_GROUP_ID}"
|
|
|
|
echo "[Creating FSx Security Group] Created security group ${FSX_SECURITY_GROUP_ID}"
|
|
}
|
|
|
|
function cleanup_fsx_security_group() {
|
|
if [ ! -z "${FSX_SECURITY_GROUP_ID}" ]; then
|
|
# You must remove any self-referencing ingress rules before deleting a SG
|
|
aws ec2 revoke-security-group-ingress --region "${REGION}" \
|
|
--group-id "${FSX_SECURITY_GROUP_ID}" --protocol tcp --port 988 \
|
|
--source-group "${FSX_SECURITY_GROUP_ID}"
|
|
|
|
aws ec2 delete-security-group --group-id "${FSX_SECURITY_GROUP_ID}" --region "${REGION}"
|
|
fi
|
|
}
|
|
|
|
# Creates a new FSX LUSTRE instance and automatically imports the data set from S3.
|
|
function create_fsx_instance() {
|
|
echo "[Creating FSx] Creating file system"
|
|
IFS=',' read -r -a subnets_list <<< "$EKS_PRIVATE_SUBNETS"
|
|
|
|
local fs_id=$(aws fsx create-file-system \
|
|
--file-system-type LUSTRE \
|
|
--lustre-configuration ImportPath=s3://${S3_DATA_BUCKET}/mnist_kmeans_example \
|
|
--storage-capacity 1200 \
|
|
--subnet-ids "${subnets_list[0]}" \
|
|
--security-group-ids "${FSX_SECURITY_GROUP_ID}" \
|
|
--tags Key="Name",Value=fsx-integ-lustre \
|
|
--region "${REGION}" \
|
|
--output text \
|
|
--query "FileSystem.FileSystemId")
|
|
|
|
echo "[Creating FSx] Waiting for file system to be in state AVAILABLE"
|
|
|
|
local fs_status="CREATING"
|
|
until [[ "${fs_status}" != "CREATING" ]]; do
|
|
fs_status="$(aws fsx describe-file-systems --region "${REGION}" --file-system-id ${fs_id} --output text --query "FileSystems[0].Lifecycle")"
|
|
sleep 10
|
|
done
|
|
aws fsx --region "${REGION}" describe-file-systems --file-system-id ${fs_id}
|
|
|
|
if [[ "${fs_status}" != "AVAILABLE" ]]; then
|
|
echo "[Creating FSx] FSx cluster never reached state 'Available'"
|
|
exit 1
|
|
fi
|
|
|
|
FSX_ID="${fs_id}"
|
|
|
|
echo "[Creating FSx] File system now available as ${FSX_ID}"
|
|
|
|
return 0
|
|
}
|
|
|
|
function delete_fsx_instance() {
|
|
if [ ! -z "${FSX_ID}" ]; then
|
|
aws fsx delete-file-system --file-system-id "${FSX_ID}" --region "${REGION}"
|
|
fi
|
|
} |