Hvordan Avsetning AWS EC2 Forekomster med Salt Cloud

SaltStack er en del av den neste utviklingen av infrastruktur administrasjonsverktøy som systemadministratorer har i sin verktøykasse for klargjøring og håndtering av en stadig voksende flåte av servere.

SaltStack prosjekt lansert i 2011. Vi først postet om SaltStack i august 2013 -. samme år som GitHub er Octoverse rangeres saltstack /salt repository tredjedel av alle offentlige depoter med flest "problemer lukket" og "fusjonert pull requests" kategorier Anmeldelser

På 8 november 2013, Salt Cloud ble fusjonert inn i hoved Salt depotet og inngår som en del av SaltStack 2014.1.0 Hydrogen utgivelse.

Salt Cloud er et verktøy for klargjøring og administrere cloud-servere innenfor og på tvers støttede sky tilbydere. For eksempel, et system administrator kan bestemmelsen fem nye webservere innenfor en AWS amerikanske vestkysten region og 3 nye applikasjonsservere innenfor et Rackspace London region fra en enkelt node som er konfigurert med Salt Cloud.

Dette innlegget beskriver hvordan til bestemmelsen Amazon EC2 instanser med Salt Cloud. Jeg også beskrive hvordan bestemmelsen flere tilfeller parallelt med en enkelt kommando ved hjelp av Salt Clouds Map-funksjonen.

Fordelingen brukes som en del av dette innlegget er CentOS selv, bortsett fra noen mindre detaljer om innst, detaljene dekket kan være anvendt til enhver distribusjon som er tilgjengelig på EC2 og kan kjøre en oppdatert versjon av SaltStack.

I tillegg AWS EC2, støtter SaltStack andre Cloud Tilbydere som Digital Ocean, GoGrid, Google Compute Engine, Openstack og Rackspace. En Feature Matrix gir en tabell over funksjonene som støttes for hver Cloud Provider.

All interaksjon fra forekomsten som kjører salt-sky, Salt Cloud kommandolinjeverktøyet, og forekomstene som er klargjort skjer over SSH. A Salt Master er ikke nødvendig for Salt Cloud. Hvis du ønsker å administrere klargjort tilfeller bruke salt stater og moduler, må du sette opp en Salt Master, som ikke omfattes av dette innlegget.

Installasjon

Salt-sky kommando linje verktøyet leveres med salt-mester 2014.1.0 RPM pakken tilgjengelig som en del av Epel. Det bør installeres på en forekomst innen EC2.

 $ yum install salt-mester 

'SaltStack' lag forvalter en Ubuntu Personal Package Arkiv som dekker alle nåværende versjoner av Ubuntu. Salt er også tilgjengelig i standard opensuse 13.1 release, også. Den utmerkede dokumentasjon finnes på docs.saltstack.com inneholder instruksjoner om hvordan du installerer Salt for andre distribusjoner og plattformer.

salt-skyen er avhengig av Apache libcloud som er en python bibliotek som samhandler med mer enn 30 skytjeneste leverandører. Bruk pip for å installere den stabile versjonen av apache-libcloud.

 $ Pip installere apache-libcloud 

Hvis pip ikke er tilgjengelig, må du kanskje installere python-pip pakken først. Hvis du ønsker å ha apache-libcloud installert i et isolert Python miljø, først sjekke ut virtualenv.

EC2 Security Groups

Hver forekomst klargjort av salt-sky må tilhøre minst én AWS EC2 Security Group som tillater innkommende trafikk fra port 22 /tcp stammer fra forekomsten som kjører salt-sky. Jeg har beskrevet hvordan du oppretter sikkerhetsgrupper i et tidligere innlegg bruker awscli verktøyet.

 $ AWS EC2 opprette-security-gruppen \\ --group-navnet MySecurityGroupSaltCloudInstances \\ --description "The Security Group brukes på alt salt -cloud forekomster "$ AWS EC2 autorisere-security-gruppe-inngå \\ --group-navnet MySecurityGroupSaltCloudInstances \\ --source-gruppe MySecurityGroupSaltCloud \\ --protocol tcp --port 22 

Autoriser-security-gruppe-ingress kommandoen tillater noen EC2 node innenfor MySecurityGroupSaltCloud Security Group for å få tilgang til alle andre EC2 node innenfor MySecurityGroupSaltCloudInstances på port 22 /tcp. I mitt oppsett, forekomsten som kjører salt-sky tilhører MySecurityGroupSaltCloud Security Group. Du må opprette en Security Group, der forekomsten som kjører salt-sky vil tilhøre.

EC2 Keypairs

salt-skyen er avhengig av SSH for å laste opp og bruke salt-bootstrap. En SSH offentlig og privat nøkkel må genereres på forekomsten som kjører salt-sky. Den offentlige nøkkelen må også lastes opp til AWS EC2 som et nøkkelpar. Jeg har også beskrevet hvordan du gjør dette i et tidligere innlegg

For å opprette en privat og offentlig SSH-tasten.

 $ ssh-keygen -f /etc /salt /my_salt_cloud_key -t rsa -b 4096 $ AWS EC2 import-key-pair --key-navn my_salt_cloud_key \\ --public-key-materialet filen: ///etc/salt/my_salt_cloud_key.pub 
Salt Cloud Profiler

Salt Cloud Profiler definere noen generelle konfigurasjonselementer for en gruppe av salt minions som vil bli levert, og som administreres av salt-sky.

Innenfor /etc/salt/cloud.profiles filen nedenfor, jeg har opprettet en profil med tittelen base_ec2_private som bruker my_ec2_ap_southeast_2_private_ips leverandør som jeg vil definere neste. Den eneste andre alternativet jeg trenger å spesifisere er AMI ID av bildet at medhjelperne skal kjøre. ami-e7138ddd er AMI ID CentOS 6.5 bilde frigitt av CentOS.org tilgjengelig innenfor AWS ap-sørøst-2 omegn

 base_ec2_private. leverandør: my_ec2_ap_southeast_2_private_ips bilde: ami-e7138ddd 
Salt Cloud Providers

salt-skyen leverandør definerer et sett med attributter som brukes av en AWS EC2 eksempel.

Nedenfor er /etc/salt/cloud.providers filen som jeg har brukt til å definere en my_ec2_ap_southeast_2_private_ips leverandør. Denne leverandøren er brukt av base_ec2_private profilen min

 my_ec2_ap_southeast_2_private_ips:. # Ip adresse salt-sky bør kobles til ssh_interface: private_ips # AWS legitimasjon id: @ AWS_ACCESS_KEY_ID @ nøkkel: '@ AWS_SECRET_ACCESS_KEY @' # ssh nøkkel KeyName: my_salt_cloud_key private_key: /etc /salt /my_salt_cloud_key # AWS beliggenhet: ap-sørøst-2 availability_zone: ap-sørøst-2a # AWS sikkerhet gruppe securitygroup: MySecurityGroupSaltCloudInstances # AWS ami størrelse: Micro Instance # slette AWS root volum når minion er ødelagt del_root_vol_on_destroy: Sann # lokal bruker ssh_username: root # Gi nytt navn på ødelegge rename_on_destroy: sant leverandør: EC2 

Jeg har definert noen attributter innpakket i @ symboler som må oppdateres for å passe ditt miljø

@ AWS_ACCESS_KEY_ID @: The AWS Tilgang Key ID som tilhører en IAM konto som har nok EC2 privilegier til å klargjøre nye tilfeller. Selv om salt-sky støtter AWS IAM roller, de er bare brukt til klargjort EC2 undersåtter. Statisk AWS tilgang og hemmelige nøkler fortsatt i bruk av salt-sky å distribuere minions

@ AWS_SECRET_ACCESS_KEY @:.. Den AWS hemmelig nøkkel som tilhører AWS Tilgang Key ID
< .no>
Lage din første salt-sky minion

Først kan det være lurt å sette opp SSH-tasten innenfor SSH agent.

 $ eval `ssh-agent` $ ssh-add /etc /salt /my_salt_cloud_key 

Deretter kaller salt-sky bestått i navnet på profilen som matcher det du har konfigurert innenfor /etc/salt/cloud.profiles og det endelige argumentet er navnet på ny Minion.

 $ salt-sky --profile = base_ec2_private my_first_minion 

salt-sky bruker SSH middel til å trekke ned salt-bootstrap som sikkert vil oppdage minions distribusjon, installere salt-minion pakke og pre-seed salt-mester med minion er nøkkelen hvis du har setup salt-Master

Hvis de lykkes, kan vi spørre forekomsten med salt-sky.

 $ salt-sky - -action = show_instance my_first_minion 

salt-sky støtter også andre handlinger som spørring og sette AWS EC2 tags:

 $ salt-sky --Action = get_tags my_first_minion $ salt-sky --Action = set_tags my_first_minion miljø = devel \\ rolle = webserver 

Vi kan aktivere og deaktivere EC2 Oppsigelse Protection:

 $ salt-sky --Action = show_term_protect my_first_minion $ salt-sky --Action = enable_term_protect my_first_minion $ salt-sky - -action = disable_term_protect my_first_minion 

Vi kan også starte minion:

 $ salt-sky --Action = omstart my_first_minion 

Hvis du har satt opp en salt-mester du bør være i stand til å kjøre standard salt moduler via salt kommandolinjen:

 $ salt my_first_minion cmd.run '/sbin /ip-adresse show' 

Og selvfølgelig, kan du søke state.highstate hvis salt-mester stater har vært inn- up:

 $ salt my_first_minion state.highstate 

Til slutt kan vi ødelegge forekomsten med -destroy alternativ:

 $ salt-sky --destroy my_first_minion 
Salt Cloud Maps

Vi har dekket provisioning en enkelt EC2 eksempel med salt-sky. Vi kan nå skalere dette ut til å skape flere forekomster med et enkelt salt-cloud kommando ved hjelp Salt Cloud Maps.

Innenfor /etc/salt/cloud.map filen, jeg har definert 3 webservere som all arve base_ec2_private profilen

 base_ec2_private: -. web1_prod - web2_prod - web3_prod 

Slik bestemmelsen alle tre tilfeller, jeg ville bare passere -kart alternativet med plasseringen av kartet filen. Ved også inkludert -parallel, vil alle forekomster innenfor kartet klargjøres samtidig.

 $ salt-sky --map = /etc /salt /cloud.map --parallel 

Når klargjort, vi kan spørre alle forekomstene innenfor kartet med salt-sky.

 $ salt-sky --map = /etc /salt /cloud.map --query 

For å avslutte alle servere i kartet vi passere -destroy alternativet.

 $ salt-sky --map = /etc /salt /cloud.map --destroy