schemaVersion: "2.2" description: Bootstrap AWS Cloud9 EC2 Instance mainSteps: - action: aws:runShellScript name: BootstrappingIDE inputs: runCommand: - "#!/bin/bash" - echo '=== PREPARE ENV ===' - date - echo LANG=en_US.utf-8 >> /etc/environment - echo LC_ALL=en_US.UTF-8 >> /etc/environment - . /home/ec2-user/.bashrc - echo '=== INSTALL CORE DEPENDENCIES ===' - yum -y remove aws-cli - yum -y install amazon-linux-extras - yum -y install sqlite curl wget telnet jq strace git nc python3 python3-pip bash-completion - yum -y install tar unzip gzip bzip2-devel ed gcc gcc-c++ gcc-gfortran less libcurl-devel - yum -y install openssl openssl-devel readline-devel xz-devel zlib-devel glibc-static - yum -y install libcxx libcxx-devel llvm-toolset-7 zlib-static - echo '=== INSTALL AND CONFIGURE AWS CLI ===' - sudo -i -u ec2-user bash -c "pip install --user -U boto boto3 botocore awscli aws-sam-cli" - sudo -i -u ec2-user bash -c "pip3 install --user -U boto boto3 botocore awscli aws-sam-cli" - export REGION=$(curl -s http://169.254.169.254/latest/dynamic/instance-identity/document/ | jq -r .region) - mkdir -p /home/ec2-user/.aws - echo '[default]' > /home/ec2-user/.aws/config - echo "region = ${REGION}" >> /home/ec2-user/.aws/config - echo 'output = json' >> /home/ec2-user/.aws/config - chmod 600 /home/ec2-user/.aws/config - rm -rf /home/ec2-user/.aws/credentials - pip install boto boto3 botocore awscli aws-sam-cli - pip3 install boto boto3 botocore awscli aws-sam-cli - mkdir -p /root/.aws - echo '[default]' > /root/.aws/config - echo "region = ${REGION}" >> /root/.aws/config - echo 'output = json' >> /root/.aws/config - chmod 600 /root/.aws/config - rm -rf /root/.aws/credentials - echo '=== RESIZE DISK ===' - | SIZE=30 REGION=$(curl -s http://169.254.169.254/latest/dynamic/instance-identity/document/ | jq -r .region) INSTANCEID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id) VOLUMEID=$(aws ec2 describe-instances \ --instance-id $INSTANCEID \ --query "Reservations[0].Instances[0].BlockDeviceMappings[0].Ebs.VolumeId" \ --output text --region $REGION) aws ec2 modify-volume --volume-id $VOLUMEID --size $SIZE --region $REGION while [ \ "$(aws ec2 describe-volumes-modifications \ --volume-id $VOLUMEID \ --filters Name=modification-state,Values="optimizing","completed" \ --query "length(VolumesModifications)"\ --output text --region $REGION)" != "1" ]; do sleep 1 done if [ $(readlink -f /dev/xvda) = "/dev/xvda" ] then sudo growpart /dev/xvda 1 STR=$(cat /etc/os-release) SUB="VERSION_ID=\"2\"" if [[ "$STR" == *"$SUB"* ]] then sudo xfs_growfs -d / else sudo resize2fs /dev/xvda1 fi else sudo growpart /dev/nvme0n1 1 STR=$(cat /etc/os-release) SUB="VERSION_ID=\"2\"" if [[ "$STR" == *"$SUB"* ]] then sudo xfs_growfs -d / else sudo resize2fs /dev/nvme0n1p1 fi fi - echo '=== INSTALL AND CONFIGURE MACHINE ===' - echo 'fs.inotify.max_user_watches=524288' >> /etc/sysctl.conf && sysctl -p - echo '=== INSTALL AND CONFIGURE NODE.JS ===' - sudo -i -u ec2-user bash -c 'source /home/ec2-user/.nvm/nvm.sh && nvm install 16.14.0' - sudo -i -u ec2-user bash -c 'source /home/ec2-user/.nvm/nvm.sh && nvm use 16.14.0 && nvm alias default 16.14.0' - sudo -i -u ec2-user bash -c 'npm install --force --global npm' - sudo -i -u ec2-user bash -c 'npm install --force --global typescript aws-cdk' - echo '=== INSTALL AND CONFIGURE JAVA AND ITS DEPENDENCIES ===' - yum install -y java-11-amazon-corretto-headless - GRADLE_VERSION=7.4.1 - GRADLE_URL="https://downloads.gradle-dn.com/distributions/gradle-${GRADLE_VERSION}-bin.zip" - mkdir -p /opt/gradle - wget -O "/tmp/gradle-${GRADLE_VERSION}-bin.zip" "${GRADLE_URL}" - unzip -d /opt/gradle "/tmp/gradle-${GRADLE_VERSION}-bin.zip" - chown -R ec2-user:ec2-user /opt/gradle - ln -s "/opt/gradle/gradle-${GRADLE_VERSION}/bin/gradle" /usr/bin/gradle - MVN_URL="https://mirrors.ukfast.co.uk/sites/ftp.apache.org/maven" - MVN_VERSION=3.6.3 - MVN_FOLDERNAME="apache-maven-${MVN_VERSION}" - MVN_FILENAME="apache-maven-${MVN_VERSION}-bin.tar.gz" - curl -4 -L "${MVN_URL}/maven-3/${MVN_VERSION}/binaries/${MVN_FILENAME}" | tar -xvz - mv ${MVN_FOLDERNAME} /usr/lib/maven - rm -rf ${MVN_FOLDERNAME} - ln -s /usr/lib/maven/bin/mvn /usr/bin/mvn - echo '=== INSTALL AND CONFIGURE DOCKER ===' - yum install -y docker - echo '=== CREATE REPOSITORIES DIRECTORY ===' - mkdir -p /home/ec2-user/repositories/ - echo '=== CLONING REPOSITORIES ===' - cd /home/ec2-user/repositories/ && git clone https://github.com/aws-samples/amazon-codeguru-reviewer-github-actions-shift-left-example - echo '=== CLEANING EC2-USER ===' - echo 'export PATH="$PATH:/usr/local/bin:/$HOME/.local/bin"' >> /home/ec2-user/.bashrc - echo "complete -C '/usr/local/bin/aws_completer' aws" >> /home/ec2-user/.bash_profile - rm -rf /home/ec2-user/environment/README.md - chown -R ec2-user:ec2-user /home/ec2-user/ - echo '=== REBOOT ===' - FILE=$(mktemp) && echo $FILE && echo '#!/bin/bash' > $FILE - echo 'reboot -f --verbose' >> $FILE && at now + 1 minute -f $FILE - echo "Bootstrap completed with return code $?"