Cosa si intende per automazione e orchestrazione nel cloud computing?
CLOUD & DEVOPS
Cosa si intende per automazione e orchestrazione nel cloud computing?
event 20/03/2018

Automazione e orchestrazione sono tecnologie e processi preziosi quando si parla di cloud computing, ma non c’è sempre chiarezza su cosa siano e quali vantaggi offrano. Sebbene i due termini vengano spesso associati, i team IT dovrebbero avere una chiara comprensione di ciascuno dei due e della loro relazione. Scopriamolo insieme!
Che cos’è la cloud automation?
L’automazione del cloud fa riferimento alle azioni di implementazione e gestione che i team IT possono eseguire senza necessità di interazione umana.
Esiste un lungo elenco di processi e attività che i team possono automatizzare nel cloud computing. Tre scenari comuni includono:
- automazione dei server di provisioning per soddisfare le esigenze di scalabilità;
- individuazione e chiusura di istanze e processi di cloud zombie;
- esecuzione di backup dei dati a intervalli regolari.
L'automazione del cloud consente alle aziende di risparmiare tempo e denaro quando devono configurare e gestire le applicazioni sul cloud pubblico. Il concetto generale di cloud computing è quello di semplificare le tradizionali attività di implementazione e gestione dell’IT; senza l'automazione, il cloud non sarebbe poi così importante! Se non si facesse ricorso alla cloud automation, infatti, il provisioning si ridurrebbe a un processo manuale e la gestione di tutte le risorse risulterebbe davvero troppo ingombrante.
Oltre alla basilare assegnazione delle risorse, i software di automazione si occupano di routing e networking, impostano reti private virtuali, gestiscono policy e autorizzazioni, bilanciano i carichi e scalano in automatico. Alcune soluzioni fanno un ulteriore passo avanti automatizzando l'intero sistema, liberando i reparti IT dalla rotazione delle implementazioni personalizzate e dando invece alle singole unità aziendali la possibilità di richiedere e distribuire le proprie risorse.
Che cos’è la cloud orchestration?
L'orchestrazione del cloud è strettamente correlata alla cloud automation poiché organizza, mette in sequenza e coordina le attività automatizzate. Se volessimo dare una struttura gerarchica a questi processi, l'orchestrazione del cloud sarebbe il processo principale nel quale si inseriscono le attività automatizzate secondo sequenze specifiche, in momenti specifici, per scopi specifici.
Il processo di orchestrazione entra in gioco quando tali attività devono essere eseguite in un ordine particolare con determinati gruppi / strumenti di sicurezza, assegnazione di ruoli e autorizzazioni. Gli strumenti di orchestrazione ricorrono all'automazione al fine di creare processi che organizzino le singole attività e possano essere nativi per la piattaforma IaaS o per gli strumenti software di terze parti.
Molte organizzazioni IT o che ricorrono a DevOps guardano con interesse alla cloud orchestration per la possibilità che offre di accelerare l’erogazione dei servizi e di ridurre i costi. L’orchestrazione automatizza la gestione, il coordinamento e l'organizzazione di complicati sistemi informatici, servizi e middleware. Oltre a ridurre il coinvolgimento del personale, permette di eliminare potenziali errori nel provisioning, nella scalabilità o in altri processi cloud.
Gli strumenti per l’automazione e l’orchestrazione del cloud
Per riassumere, quindi, possiamo dire che la cloud automation fa riferimento alle singole attività che devono essere eseguite, mentre la cloud orchestration descrive l'organizzazione e il coordinamento delle attività automatizzate, risultando in un processo o flusso di lavoro consolidato.
Ma con quali strumenti le imprese possono delineare questi processi?
RED HAT ANSIBLE PER LA CLOUD AUTOMATION
In un ambiente IT complesso, anche i compiti più piccoli possono richiedere tempi infiniti. I sistemi tentacolari sono difficili da sviluppare, implementare e mantenere. Le esigenze aziendali aumentano la complessità e i team IT sono in difficoltà con la gestione, la disponibilità e i costi.
Ansible è una tecnologia di automazione IT semplice e in grado di migliorare i processi, migrare le applicazioni per una migliore ottimizzazione e fornire un unico linguaggio per le pratiche DevOps in tutta l'organizzazione.
HEAT PER LA CLOUD ORCHESTRATION
Heat è il progetto principale del programma OpenStack Orchestration. Implementa un motore di orchestrazione per avviare più applicazioni di cloud composito basate su modelli sotto forma di file di testo che possono essere trattati come codice. Si sta sviluppando un Heat nativo, ma Heat si sforza anche di fornire compatibilità con il formato del modello AWS CloudFormation, in modo che molti modelli CloudFormation esistenti possano essere lanciati su OpenStack. Heat fornisce sia un'API ReST OpenStack nativa che un'API Query compatibile con CloudFormation.
Scopri come creare la tua infrastruttura cloud!
article Scarica l'ebook!
Failed to "?eval" string with this error: ---begin-message--- Syntax error in ?eval-ed string in line 1, column 463: Lexical error: encountered "u" (117), after "\"Extra Red \\". ---end-message--- The failing expression: ==> entitiesListJson?eval [in template "20097#20123#43230" at line 59, column 29] ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign entities = entitiesListJson?eval [in template "20097#20123#43230" at line 59, column 9] ----
1<#-- Articoli in evidenza ADT -->
2<#assign portletBackground = "bg-red-white" />
3<#list portletPreferences?keys as key>
4 <#if key=="portletBackground">
5 <#assign portletBackground=portletPreferences[key]?first />
6 </#if>
7</#list>
8
9<#assign assetCategoryPropertyLocalService = serviceLocator.findService("com.liferay.asset.category.property.service.AssetCategoryPropertyLocalService") />
10<#assign categoryService = serviceLocator.findService("it.extrared.redweb.commons.service.CategoryService") />
11<#assign assetEntryLocalService=serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
12<#assign dlFileEntryService = serviceLocator.findService('com.liferay.document.library.kernel.service.DLFileEntryService') />
13<#assign otherArticles = languageUtil.get(locale, "other-articles") />
14<#assign readMore = languageUtil.get(locale, "read-all") />
15
16<#assign redSimilarJournalArticle = serviceLocator.findService("it.extrared.redweb.commons.service.SimilarJournalArticle") />
17<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
18<#assign dlAppServiceUtil = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppService")/>
19
20<#assign article = "" />
21<#assign urlTitle = "" />
22
23<#assign dirtyUrlTitle = themeDisplay.getURLCurrent() />
24<#assign curPage = 1 />
25
26<#if dirtyUrlTitle?contains("redirect")>
27 <#assign namespace = "_" + paramUtil.getString(request, "p_p_id") />
28 <#assign currentUrl = "_" + paramUtil.getString(request, namespace + "_redirect") />
29 <#assign urlTitle = currentUrl?split("/")?last />
30 <#assign curPage = paramUtil.getString(request, namespace + "_cur")/>
31<#elseif dirtyUrlTitle?contains("?wkrh___tabs1=properties")>
32 <#assign last = themeDisplay.getURLCurrent()?split("/")?last />
33 <#assign urlTitle = last?substring(0, last?index_of('?wkrh___tabs1=properties')) />
34<#elseif dirtyUrlTitle?contains("?")>
35 <#assign last = themeDisplay.getURLCurrent()?split("/")?last />
36 <#assign urlTitle = last?substring(0, last?index_of('?')) />
37<#else>
38 <#assign urlTitle = themeDisplay.getURLCurrent()?split("/")?last />
39</#if>
40
41
42<#assign logfactory = staticUtil["com.liferay.portal.kernel.log.LogFactoryUtil"] />
43<#assign log = logfactory.getLog("FreemarkerLog") />
44${log.info("urlTitle: " + urlTitle)}
45
46<#attempt>
47 <#assign article = journalArticleLocalService.getArticleByUrlTitle(groupId, urlTitle) />
48<#recover>
49</#attempt>
50
51<#assign entitiesListJson = "" />
52
53<#if article?? && article?has_content>
54 <#assign entitiesListJson = redSimilarJournalArticle.getSimilarJournalArticlesWithConfig(portletPreferences, article.articleId, groupId, false, curPage?number) />
55</#if>
56
57
58<#if entitiesListJson?? && entitiesListJson?has_content>
59 <#assign entities = entitiesListJson?eval />
60</#if>
61
62<#assign noResult = languageUtil.get(locale, "no-result") />
63
64<#if entities?has_content && entities?size gt 0>
65 <section class="container-fluid bg5percent">
66 <div class="swiper container ">
67 <p class="mb-5 text-muted text-uppercase">${otherArticles}</p>
68 <div class="swiper-wrapper align-items-center pt-lg-5 mb-lg-5">
69 <#list entities?keys as k>
70 <#assign entitiesGroup=entities[k] />
71 <#if entitiesGroup?size gt 0>
72 <#list entitiesGroup as array>
73 <div class="swiper-slide">
74 <#assign urlImage = "" />
75 <#assign altImage = "" />
76 <#if array["image"]?? && array["image"]?has_content>
77 <#assign docVal=array["image"]?eval />
78 <#if docVal.url?? && docVal.url?has_content>
79 <#assign urlImage = docVal.url />
80 </#if>
81 <#assign fileEntryId = docVal.fileEntryId />
82 </#if>
83
84 <#if docVal.title?? && docVal.title?has_content>
85 <#assign altImage = docVal.title />
86 </#if>
87
88 <#assign titolo = array["articleTitle"] />
89 <#assign categories = array["categoriesString"] />
90 <#assign displayPage = array["displayPage"] />
91 <#assign assetEntryId = array["assetEntryId"] />
92 <#assign assetEntry = assetEntryLocalService.getEntry(assetEntryId) />
93 <#assign categoriesList = assetEntry.getCategories() />
94
95 <div class="col-lg-9 col-9 col-sm-9 p-0">
96 <@adaptive_media_image["img"] fileVersion=dlAppServiceUtil.getFileEntry(fileEntryId?number).getFileVersion() class="mb-4" width="100%" height="auto" alt="${altImage}"/>
97 <#--
98 <img width="100%" class="mb-4" height="auto" src="${urlImage}" alt="${altImage}" title="${titolo}">
99 -->
100 </div>
101 <div class="card-body pt-2">
102 <#if categoriesList?? && categoriesList?has_content>
103 <div class="card-subtitle text-muted">
104 <#assign categoriesString = "" />
105 <#list categoriesList as c>
106 <#assign hasProperty = categoryService.hasCategoryProperty(c.getCategoryId(), "type") />
107 <#if !hasProperty>
108 <#if !categoriesString?has_content>
109 <#assign categoriesString = c.getTitle(locale)?upper_case />
110 <#else>
111 <#assign categoriesString = categoriesString + ", " + c.getTitle(locale)?upper_case />
112 </#if>
113 </#if>
114 <#--
115 <#attempt>
116 <#assign typeProperty = assetCategoryPropertyLocalService.fetchCategoryProperty(c.categoryId?long, "type") />
117 <#recover>
118 <#if !categoriesString?has_content>
119 <#assign categoriesString = c.getTitle(locale)?upper_case />
120 <#else>
121 <#assign categoriesString = categoriesString + ", " + c.getTitle(locale)?upper_case />
122 </#if>
123 </#attempt>
124 -->
125 </#list>
126
127 ${categoriesString}
128 </div>
129 </#if>
130 <a href="${displayPage}" target="_self" title="${titolo}">
131 <h3 class="m-0">${titolo}</h3>
132 </a>
133 </div>
134 </div>
135 </#list>
136 <#else>
137 <div class="container">
138 <h2 class="m-0">${noResult}</h2>
139 </div>
140 </#if>
141 </#list>
142 </div>
143 <a data-aos="fade-right" class="pt-5 align-middle" style="display: block" href="/blog">
144 <i class="align-middle me-2 material-icons-outlined">explore</i>
145 <span class="align-middle">${readMore?capitalize}</span>
146 </a>
147 </div>
148 </section>
149</#if>