Giter Site home page Giter Site logo

ansible-aws-workshop's Introduction

Ansible AWS workshop

I denne workshoppen skal vi konfigurere et AWS-oppsett bestående av:

  • Virtual Private Cloud (VPC) med to subnet
  • Jump server for sikker tilkobling til VPC
  • Lastbalanserer
  • Autoscaling group med to web-tjenere
  • Sikkerhetsgrupper for å styre tilgang til tjenestene

Oppgave 1: Oppsett

Installer Ansible og Boto.

pip install ansible
pip install boto

Gå inn i AWS-konsollet og generer en "Access Key" på brukeren din. Gå inn i Identity and Access Management (IAM), finn brukeren din under "Users", velg Security Credentials, og "Create Access Key". Last ned filen, så du er sikker på å ikke miste nøklene.

Hvis du bruker din egen konto, lag en bruker under "Users" først, og gi brukeren nødvendig tilganger (man kan godt bruke full admin i workshoppen).

Neste steg er å sette opp miljøvariabler med Access Key-en, slik at Ansible kan logge seg på AWS. Dette gjøres ved å sette AWS_ACCESS_KEY_ID og AWS_SECRET_ACCESS_KEY. Dette kan enten gjøres ved å legge det inn i .bashrc, ved å kjøre export-kommandoene i shellet du bruker, eller ved å konfigurere Boto med ~/.boto.

export AWS_ACCESS_KEY_ID="<din access key>"
export AWS_SECRET_ACCESS_KEY="<din secret key>"

Ansible bruker boto til å kommunisere med AWS. Det er derfor også mulig å spesifisere nøklene i filen ~/.boto.

[Credentials]
aws_access_key_id = <your_access_key_here>
aws_secret_access_key = <your_secret_key_here>

Oppgave 2: Playbook

Ansible bruker playbooks til å spesifisere konfigurasjon, utrulling og orkestrering. Opprett en ny playbook med filnavn playbook.yml og følgende innhold:

---
- hosts: localhost
  tasks:
  - debug:
      msg: Da er vi igang

Sjekk at playbook fungerer ved å kjøre ansible-playbook playbook.yml.

Oppgave 3: VPC

Vi begynner med å lage en VPC i Ansible. Bruk 10.0.0.0/16 som cidr_block, og tag med ansible-workshop som Name.

- hosts: localhost
  tasks:
  - name: create vpc
    ec2_vpc:
        region: eu-central-1
        state: present
        cidr_block: 10.0.0.0/16
        resource_tags:
          Name: ansible-workshop
    register: vpc

For å sjekke hvilke endringer Ansible har tenkt til å gjøre, kjør ansible-playbook --check playbook.yml. Hvis alt ser riktig ut, bruk ansible-playbook playbook.yml for å utfør endringene.

Instansene må også ha mulighet til å koble seg til Internett. For å få tilgang til Internett trenger vi en Internet Gateway. Sett opp en slike gateway. Tips: Internet gateway kan spesifiseres direkte i ec2_vpc-modulen.

Ved å refere til VPC-en definert tidligere, kan man hente ut ID-en, og bruke den når man definerer opp sikkerhetsgruppene. Id-en kan hentes ut med synaksen "{{ aws_vpc.vpc_id }}" (Jinja2 template engine) etter at den er registrert med register: aws_vpc. Se Variables for mer informasjon.

Oppgave 4: Sett opp subnet

Nå skal vi sette opp to subnet i VPC-en vår. La hvert subnet være i hver sin availability_zone. La et subnet bruke cidr_block 10.0.1.0/24 og det andre bruke 10.0.2.0/24.

For at maskiner på subnettet skal kunne koble seg til Internett må man lage en rutingtabell, og assosiere tabellen med subnettet. Opprett en rute 0.0.0.0/0 til internet gatewayen.

Oppgave 5

Nå skal vi sette opp to webservere og en lastbalanserer til å serve innholdet ut på Internett. Istedenfor å kjøre opp serverene manuelt, så lager vi en autoscalinggroup for serverene.

Oppgave 5.1: Lastbalanserer

For at lastbalanserer skal være tilgjengelig på nett, trenger den en sikkerhetsgruppe med åpning inn på port 80 med TCP mot alle IP-adresser (0.0.0.0/0). Husk å spesifisere VPC-ID på den nye sikkerhetsgruppen, siden gruppen er tilordnet en VPC.

- proto: tcp
  from_port: 80
  to_port: 80
  cidr_ip: 0.0.0.0/0

Vi begynner med å lage en lastbalanserer for webapplikasjonen. Lastbalansereren skal lytte på port 80, og kjøre helsesjekk mot applikasjonen på port 80 på URL-en /healthcheck.txt. Applikasjonen kjører også på port 80. Man må også definere hvilke subnet som lastbalansereren skal være koblet på. Bruk variabelreferanser til de subnettene vi definerte i den tidligere oppgaven. Huske å definere listeners, health_check og security_group_names.

Kjør ansible-playbook playbook.yml -vvv for å informasjon om resultatet. Prøv å gå på URL-en i browseren. Siden vi ikke har noen app som kjører skal du få en helt blank side, som returnerer 503 Service Unavailable.

Oppgave 5.2: Jump server

Siden vi har lyst til å logge inn på serverene for å sjekke at alt kom riktig opp, må vi lage et Key Pair med kommandoen ssh-keygen -f id_rsa. Innholdet i id_rsa.pub skal da legges inn i feltet key_material i ec2-modulen. Man kan enten kopiere innholdet manuelt, eller bruke with_file-attributten.

Et tips kan være å kjøre ssh-add id_rsa for å slippe å spesifisere nøkkel når du skal prøve å logge deg inn på serverene senere.

Vi må også sette opp en sikkerhetsgruppe for å kontrollere hvilke porter som er tilgjengelig. Maskinene vi skal sette opp trenger port 22 (slik at vi kan bruke SSH inn) tilgjengelig fra overalt (0.0.0.0/0), og port 80 (slik at lastbalansereren får tilgang til webappen) tilgjengelig for lastbalansereren. Webappen skal kun være tilgjengelig for lastbalanseren, og ikke hele verden. Man kan bruke en security group som source, istedenfor en IP-adresse i AWS. Tips er derfor å bruke group_name for å angi tilgang fra lastbalansereren uten å måtte oppgi IP.

Husk å spesifisere VPC-ID på den nye sikkerhetsgruppen.

Oppgave 5.3: Launch configuration

An autoscaling group (AG) trenger en Launch Configuration for å kunne vite hva slags type instancer som skal startes. image_id finner man ved å logge inn på AWS-konsollet, og begynne å starte en EC2 instans i regionen man bruker. Hver region har sine egne AMI-ider.

Hvis man legger til et script i user_data, så blir dette kjørt når instansen kommer opp. Les inn innholdet fra startup.sh ved hjelp av with_file-funksjonen, og putt det inn i user_data-feltet.

Merk at launch configuration ikke kan endres. For å endre en eksisterende konfigurasjon må det opprettes en ny launch configuration.

Oppgave 5.4: Auto-scaling group

Helt til slutt skal vi lage en auto-scaling group som skal kjøre opp maskinene våre. Vi skal ha to instanser basert på launch configuration fra forrige oppgave, fordelt på de to subnettene fra tidligere (via vpc_zone_identifier). Husk også å spesifisere hvilken load_balancer som maskinene skal meldes inn i.

Når du kjører ansible-playbook playbook.yml så auto-scaling groupen blir laget, så skal du AWS Console se at det starter opp to maskiner, og du vil etterhvert få opp en side i browseren hvis du går inn på URL-en til lastbalansereren.

Prøv gjerne også å logge deg inn på serverene via SSH. IP-adressene finner du i AWS Console.

Ferdig?

Antagelig ikke helt. Fjern alt du har laget via AWS Console, eller ved å bruk av en playbook der du bruker state-attributten til å fjerne tjenester.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.