TheDeveloper / dev-machine

Set up a ubuntu dev machine in AWS.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Set up a ubuntu dev machine in AWS.

Requirements

  • aws-vault brew install aws-vault [usage]
  • terraform brew install terraform
  • python3 brew install python3

Setup

Fork this repo and clone locally. Then run:

./bin/setup

Usage

Set variables in .env, then:

./bin/create

Teardown

./bin/destroy

Update

git pull upstream main

Details

Install ansible

python3 -m venv env && \
source env/bin/activate && \
pip3 install ansible && \
ansible-galaxy install diodonfrost.terraform && \
ansible-galaxy install darkwizard242.awsvault

Create .env

cp .env.example .env

Init terraform

terraform init

Generate setup key for ec2 instance

ssh-keygen -t ed25519 -N '' -f ./key

Do this for every new shell

source env/bin/activate
source ./.env

Run terraform plan to test

aws-vault exec $DM_AWS_VAULT_ROLE -- \
  terraform plan \
  -var "instance_type=$DEVMACHINE_INSTANCE_TYPE" \
  -var "ami=$DEVMACHINE_AMI" \
  -var "vpc_id=$DEVMACHINE_VPC_ID" \
  -var "name=$DEVMACHINE_NAME" \
  -var "subnet=$DEVMACHINE_SUBNET" \
  -var "kms_key_arn=$DEVMACHINE_KMS_KEY_ARN"a

Create resources

aws-vault exec $DM_AWS_VAULT_ROLE -- \
  terraform apply \
  -var "instance_type=$DEVMACHINE_INSTANCE_TYPE" \
  -var "ami=$DEVMACHINE_AMI" \
  -var "vpc_id=$DEVMACHINE_VPC_ID" \
  -var "name=$DEVMACHINE_NAME" \
  -var "subnet=$DEVMACHINE_SUBNET" \
  -var "kms_key_arn=$DEVMACHINE_KMS_KEY_ARN"

Tear down resources

aws-vault exec $DM_AWS_VAULT_ROLE -- \
  terraform destroy \
  -auto-approve \
  -var "instance_type=$DEVMACHINE_INSTANCE_TYPE" \
  -var "ami=$DEVMACHINE_AMI" \
  -var "vpc_id=$DEVMACHINE_VPC_ID" \
  -var "name=$DEVMACHINE_NAME" \
  -var "subnet=$DEVMACHINE_SUBNET" \
  -var "kms_key_arn=$DEVMACHINE_KMS_KEY_ARN"

Verify values

terraform state show aws_instance.instance
terraform output -raw ip

Set up ssh access

# trailing comma is required to specify ip list
DM_IP=$(terraform output -raw ip)
DEVMACHINE_HOST="$DM_IP,"
ansible-playbook \
  --private-key "$(pwd)/key" \
  -i $DEVMACHINE_HOST \
  playbooks/ssh.yaml
ssh "ubuntu@$DEVMACHINE_HOST"

Add ssh host

https://stormssh.readthedocs.io/en/latest/index.html

pip3 install stormssh
storm add $DEVMACHINE_NAME ubuntu@$DM_IP
# or update
storm edit $DEVMACHINE_NAME ubuntu@$DM_IP
storm delete $DEVMACHINE_NAME
ssh "ubuntu@$DEVMACHINE_NAME"

Upgrade packages

ansible-playbook \
  -i "$DEVMACHINE_NAME," \
  playbooks/upgrade.yaml

Setup workspace folders

ansible-playbook \
  -i "$DEVMACHINE_NAME," \
  playbooks/workspace.yaml

Install nvm

ansible-playbook \
  -i "$DEVMACHINE_NAME," \
  playbooks/nvm.yaml
ansible-playbook \
  -i "$DEVMACHINE_NAME," \
  playbooks/packages.yaml
ansible-galaxy install diodonfrost.terraform
ansible-playbook \
  -i "$DEVMACHINE_NAME," \
  playbooks/terraform.yaml
ansible-galaxy install darkwizard242.awsvault
ansible-playbook \
  -i "$DEVMACHINE_NAME," \
  playbooks/aws-vault.yaml
ssh-add -K ~/.ssh/id_ed25519

About

Set up a ubuntu dev machine in AWS.


Languages

Language:Shell 50.5%Language:HCL 49.5%