<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Yahya Abulhaj]]></title><description><![CDATA[Yahya Abulhaj is a DevOps consultant blogger and a blogger who writes about topics related to cloud computing, containerization, infrastructure as code, and automation.]]></description><link>https://blog.yahya-abulhaj.dev</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1673890900893/5hs_v1Ku5.png</url><title>Yahya Abulhaj</title><link>https://blog.yahya-abulhaj.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 12:36:42 GMT</lastBuildDate><atom:link href="https://blog.yahya-abulhaj.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Why I am shutting this at 40]]></title><description><![CDATA[Writing on Hashnode was a way to cope during a central year in my life.
One that will live forever behind me as we continue our journey in the cloud.
The brainstorming and time spent writing for this ]]></description><link>https://blog.yahya-abulhaj.dev/why-i-am-shutting-this-at-40</link><guid isPermaLink="true">https://blog.yahya-abulhaj.dev/why-i-am-shutting-this-at-40</guid><category><![CDATA[2022-2023]]></category><category><![CDATA[journey]]></category><dc:creator><![CDATA[Yahya Abulhaj]]></dc:creator><pubDate>Wed, 18 Sep 2024 12:04:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/dlmeazu4gB8/upload/81fcc953cd98d8f4df0487bc6a0cc583.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Writing on Hashnode was a way to cope during a central year in my life.</p>
<p>One that <a href="https://archive.ya-ya.tech">will live forever behind me</a> as we continue our journey in the cloud.</p>
<p>The brainstorming and time spent writing for this blog were impactful.</p>
<p>It kept me employed for a while.</p>
<p>It was an easy way to post content and have a great-looking platform that gave a solid impression.</p>
<p>Even though I didn't write deep technical topics - that wasn't the intent - this was meant to connect dots, build faith in technologies while I was uncertain about my life, and compile resources to benefit others on their path to the divine, unsure if it works.</p>
<p>Here you'll find lighter content, a hub directing to various tracks.</p>
<p>That's the main reason for writing all this.</p>
<p>I was preparing for a cert, consuming resources, doing labs.</p>
<p>And <em>combining them over here.</em></p>
<p>We ended up with over 30 cloud certifications across the three major cloud providers and Terraform. We delivered a theoretical <a href="https://blog.yahya-abulhaj.dev/series/break-into-devops">DevOps series</a>. We also <a href="http://just.rise.ya-ya.tech">outsourced the cloud resource</a> initiative.</p>
<p>We got <a href="https://blog.yahya-abulhaj.dev/badges">some cool badges</a> like writing our first blog post ever 3 years ago! Yayha!</p>
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1726660402782/49cfcfef-c43b-4fb0-bc65-5f9d6ab74ced.png" alt="" style="display:block;margin:0 auto" />

<p>We also earned the crazy blogger for posting every single day for a week.</p>
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1726659965846/16753e1d-6e5d-492d-a546-90f4c0b492c4.png" alt="" style="display:block;margin:0 auto" />

<p>We wrote some <a href="https://blog.yahya-abulhaj.dev/it-general-culture">solid 2000+ words covering the entire technology industry</a>. (Jk)</p>
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1726660140752/ad3d8d9d-6db6-4577-82ea-1a9b42106616.png" alt="" style="display:block;margin:0 auto" />

<p>During <strong>a year of focused practice</strong>, we reached <em>30k views</em>.</p>
<p>If it benefits <strong>100 people</strong>, that fulfilled its purpose.</p>
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1726659167688/fce255bc-3921-4cf7-a369-b55898858f7c.png" alt="" style="display:block;margin:0 auto" />

<p><a href="https://archive.ya-ya.tech/">  
</a>But now, <em>at 40</em>, it’s time to record this and celebrate the move on to others!</p>
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1726660780409/bd10c046-dcc6-4432-9108-81301a678997.png" alt="" style="display:block;margin:0 auto" />

<p>This work reminds me of <a href="https://archive.ya-ya.tech">where I started and an exact point in time</a>.</p>
<p>I want it to stay that way.<br />See you, Yahya.</p>
<hr />
<p>I’m happy to wrap up this post with our latest expansion in 2026. Below is a snapshot of our infrastructure and what we are serving across the globe at the company in January alone.</p>
<img src="https://cdn.hashnode.com/uploads/covers/62014a933a8a6e5fe1199f2e/ec8a4eb2-4398-4dc6-8243-03f466cab12e.png" alt="" style="display:block;margin:0 auto" />]]></content:encoded></item><item><title><![CDATA[Explaining Packages To A-5Year-Old]]></title><description><![CDATA[Node.js is a popular runtime environment for executing JavaScript code outside of a browser.
npm is the package manager for Node.js, used to install, manage, and share packages of code.
Docsify is a lightweight documentation generator that can turn y...]]></description><link>https://blog.yahya-abulhaj.dev/explaining-packages-to-a-5year-old</link><guid isPermaLink="true">https://blog.yahya-abulhaj.dev/explaining-packages-to-a-5year-old</guid><category><![CDATA[package]]></category><category><![CDATA[npm]]></category><category><![CDATA[node]]></category><category><![CDATA[nkde]]></category><dc:creator><![CDATA[Yahya Abulhaj]]></dc:creator><pubDate>Sun, 19 Mar 2023 20:22:05 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1679257217849/52e0051b-2513-45b4-b10d-04a670440774.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Node.js</strong> is a popular runtime environment for executing JavaScript code outside of a browser.</p>
<p><strong>npm</strong> is the package manager for Node.js, used to install, manage, and share packages of code.</p>
<p><strong>Docsify</strong> is a lightweight documentation generator that can turn your markdown files into a beautiful website.</p>
<h2 id="heading-installing-nodejs">Installing Node.js</h2>
<h3 id="heading-windows">Windows</h3>
<ol>
<li><p>Download the Windows Installer from the <a target="_blank" href="https://nodejs.org/en/download/">official Node.js website</a>.</p>
</li>
<li><p>Double-click the downloaded file to start the installation wizard and follow the prompts.</p>
</li>
<li><p>Open Command Prompt and run the following command to check if Node.js is installed:</p>
</li>
</ol>
<pre><code class="lang-plaintext">node -v
</code></pre>
<p>If Node.js is installed, you will see its version number printed to the console.</p>
<h3 id="heading-macos">MacOs</h3>
<ol>
<li>Install Node.js using <a target="_blank" href="https://brew.sh/">Homebrew</a> by running the following command in Terminal:</li>
</ol>
<pre><code class="lang-plaintext">brew install node
</code></pre>
<ol>
<li><p>Alternatively, you can download the Linux Binaries from the <a target="_blank" href="https://nodejs.org/en/download/">official Node.js website</a>.</p>
</li>
<li><p>Open Terminal and run the following command to check if Node.js is installed:</p>
</li>
</ol>
<pre><code class="lang-plaintext">node -v
</code></pre>
<h3 id="heading-linux">Linux</h3>
<ol>
<li>Install Node.js using your distribution's package manager. For example, on Ubuntu, run the following command:</li>
</ol>
<pre><code class="lang-plaintext">sudo apt-get install nodejs
</code></pre>
<ol>
<li>Open Terminal and run the following command to check if Node.js is installed:</li>
</ol>
<pre><code class="lang-plaintext">node -v
</code></pre>
<h2 id="heading-install-npm">Install NPM</h2>
<p>npm is installed automatically with Node.js.</p>
<p>To check if npm is installed, open Terminal or Command Prompt and run the following command:</p>
<pre><code class="lang-plaintext">npm -v
</code></pre>
<h2 id="heading-installing-docsify">Installing Docsify</h2>
<ol>
<li>Open Terminal or Command Prompt and run the following command:</li>
</ol>
<pre><code class="lang-plaintext">npm install -g docsify-cli
</code></pre>
<ol>
<li><p>This command installs Docsify globally on your system, making it available from anywhere in the terminal.</p>
</li>
<li><p>To check if Docsify is installed, run the following command:</p>
</li>
</ol>
<pre><code class="lang-plaintext">docsify -v
</code></pre>
<p>Congratulations!</p>
<p>You have successfully installed Node.js, npm, and Docsify on your system.</p>
<h2 id="heading-get-started-with-docisfy">Get Started with Docisfy</h2>
<p>Start a New project:</p>
<pre><code class="lang-plaintext">docsify init your-project
</code></pre>
<p>Serve it locally:</p>
<pre><code class="lang-plaintext">docisfy serve your-project
</code></pre>
<p>I built <a target="_blank" href="https://istic.computer-engineering.tech/#/">this</a> using Docsify.</p>
<p>You can now start to generate your websites.</p>
]]></content:encoded></item><item><title><![CDATA[AWS Cloud Project Bootcamp]]></title><description><![CDATA[Hey friends, I'm officially a participant in the AWS Cloud Project Bootcamp, WO-HO🎉🎉🎉.
I am thrilled to be a part of this exciting initiative by Andrew Brown.
The bootcamp will last 13 weeks, with one session per week, starting on February 11, and...]]></description><link>https://blog.yahya-abulhaj.dev/aws-cloud-project-bootcamp</link><guid isPermaLink="true">https://blog.yahya-abulhaj.dev/aws-cloud-project-bootcamp</guid><category><![CDATA[AWS]]></category><category><![CDATA[bootcamp]]></category><category><![CDATA[technology]]></category><category><![CDATA[Twitter]]></category><category><![CDATA[twitter-like]]></category><dc:creator><![CDATA[Yahya Abulhaj]]></dc:creator><pubDate>Mon, 06 Feb 2023 18:09:56 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1675707786864/15a8d9eb-4376-461a-85d3-6e1367084b32.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey friends, I'm officially a participant in the <a target="_blank" href="https://aws.cloudprojectbootcamp.com/">AWS Cloud Project Bootcamp</a>, WO-HO🎉🎉🎉.</p>
<p>I am thrilled to be a part of this exciting initiative by <a target="_blank" href="https://twitter.com/andrewbrown">Andrew Brown</a>.</p>
<p>The bootcamp will last 13 weeks, with one session per week, starting <strong>on February 11,</strong> and will culminate with the development of a modern web application, specifically a microblogging platform using AWS services.</p>
<p>The platform will be built for scale and will allow users to share thoughts, posts, and updates that will seamlessly expire after a certain period of time to ensure privacy and to encourage users to live in the moment.:)</p>
<p>I forked the initial template as instructed by Andrew, and I'll keep working on the project continuously <a target="_blank" href="https://github.com/yaya2devops/aws-cloud-project-bootcamp">from here.</a></p>
<p>It's worth noting that the app will be called <strong>CRUDDUR</strong>, say it then forget it</p>
<details>
<summary>
Nope, I didnt!</summary></details>

<p>Along the way, we'll get to experiment with AWS billing, app containerization, caching, CI/CD with AWS CodePipeline, CodeBuild, and CodeDeploy, modern APIs, and IaC, to name a few.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1675706654419/66fca4aa-ef27-415b-a00c-0b9dfd7dbaad.png" alt class="image--center mx-auto" /></p>
<p><a target="_blank" href="https://student.cloudprojectbootcamp.com/">A student portal</a> is also now available throughout the bootcamp to keep track of all activities for those who have registered.</p>
<details>
<summary>
Indeed! 🚀<p></p>
</summary>
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1675706814169/f33c09bd-5947-42b6-a74a-c0d37988c25f.png" />
</details>

<p>Student Portal Tour from <a target="_blank" href="https://github.com/yaya2devops/aws-cloud-project-bootcamp/blob/main/journal/student-portal.md#student-portal-tour">here</a>.</p>
<p>Further, I had already begun working on supporting this project.</p>
<p>I collaborated with <a target="_blank" href="https://twitter.com/loujaybee">Loo</a> on some preliminary configurations to ensure that the necessary tools are installed at the start of the cloud-based code editor, e.g. <a target="_blank" href="https://www.gitpod.io/about">Gitpod</a>.</p>
<details>
<summary>
It was a great experience! ☁️
</summary>
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1675705961795/cdf505e2-21e5-470d-89cc-855485f68cd6.jpeg" />
</details>



<p>Here is one of the <a target="_blank" href="https://github.com/openupthecloud/open-cloud-dev-box/pull/20">pull requests</a> to automate the installation of initial VS code extensions.
Additionally, you can look at <a target="_blank" href="https://docs.google.com/document/d/19XMyd5zCk7S9QT2q1_Cg-wvbnBwOge7EgzgvtVCgcz0">this document</a> for a more outline of all of the technologies we'll be discussing each week.</p>
<p>For students who are already enrolled, the main communication channels are <a target="_blank" href="https://www.meetup.com/fr-FR/aws-ontario-virtual-user-group/">AWS Ontario Virtual User Group</a>, <a target="_blank" href="https://discord.gg/qkbwvyRp">Discord</a>, and <a target="_blank" href="https://www.youtube.com/c/ExamProChannel/videos">ExamPro YouTube Channel</a>.</p>
<p><strong>Be</strong> ready; see you!</p>
]]></content:encoded></item><item><title><![CDATA[The Technology Titan Go Language]]></title><description><![CDATA[Go is sure to be a major language in the world of programming for years to come. Created by Google in 2009, Go is a modern, open-source language that is designed for high performance, reliability, and ease of use
Why GO Programming Language?
Go is co...]]></description><link>https://blog.yahya-abulhaj.dev/the-technology-titan-go-language</link><guid isPermaLink="true">https://blog.yahya-abulhaj.dev/the-technology-titan-go-language</guid><category><![CDATA[General Programming]]></category><category><![CDATA[Go Language]]></category><category><![CDATA[Developer]]></category><category><![CDATA[Devops]]></category><dc:creator><![CDATA[Yahya Abulhaj]]></dc:creator><pubDate>Sat, 21 Jan 2023 13:50:22 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1674308962686/0405ca34-732e-42ba-8f5f-fa4ff9fc2967.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Go is sure to be a major language in the world of programming for years to come. Created by Google in 2009, Go is a modern, open-source language that is designed for high performance, reliability, and ease of use</p>
<h2 id="heading-why-go-programming-language">Why GO Programming Language?</h2>
<p>Go is considered a key player in the DevOps world. <strong>Docker</strong>, <strong>Kubernetes</strong>, <strong>Prometheus</strong>, <strong>Hugo</strong>, <strong>Grafana</strong> and <strong>Terraform</strong> are all built <strong>on top of Go</strong>.</p>
<p>Concurrency support built into Go makes it simple for developers to create highly performant and efficient systems, which is essential in the DevOps world where speed and reliability are critical.</p>
<p>In this article, I'll walk you through my troubleshooting process for installing Go lang and then running your first project.</p>
<p>Installation</p>
<ul>
<li><p>I downloaded the exe from the internet and installed it, if you wish to install it on Linux, install and extract the <a target="_blank" href="https://golangdocs.com/install-go-linux">binaries</a>.</p>
</li>
<li><p>set env variable, in root, I added this line to <code>.bashrc</code></p>
</li>
</ul>
<pre><code class="lang-go">export GOPATH=C:/<span class="hljs-keyword">go</span>-work
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1674307181891/7e88919c-fc6d-4b98-ad89-9fc87105b2a3.png" alt class="image--center mx-auto" /></p>
<p>i did it using vim, u can do <a target="_blank" href="https://www.geeksforgeeks.org/nano-vs-vim-editor-whats-the-difference-between-nano-and-vim-editors/">nano</a> if u wish.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1674307203752/70e87c1a-0c0f-4f83-b6b9-cda4bebf032e.png" alt class="image--center mx-auto" /></p>
<p>On windows, u can also type 'edit environment variables' in the start and edit manually.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1674339491254/441a4b06-f619-43b3-8bda-5b15a6dfc171.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>I added this line to .bash_profile (create one if you don't have)</p>
<p>  <code>source ~/.bashrc</code></p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1674307253235/3648b98f-adeb-43d1-9e02-590b7baebc95.png" alt class="image--center mx-auto" /></p>
<p>These files are hidden, check them out using:</p>
<pre><code class="lang-bash">ls -a
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1674307289966/b5ff0ff9-450b-40f0-b9fe-bfe7a2f8411e.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-install-checks">Install checks</h3>
<ul>
<li>Check if Go installed</li>
</ul>
<pre><code class="lang-go"><span class="hljs-keyword">go</span> version
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1674307326081/2d053139-b9b5-4e55-96f2-605af9689a9f.png" alt class="image--center mx-auto" /></p>
<ul>
<li>check the env variable:</li>
</ul>
<pre><code class="lang-bash"><span class="hljs-built_in">echo</span> <span class="hljs-variable">$GOPATH</span>
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1674307283931/70f79f27-bb2d-4971-953c-5a77bb28f45a.png" alt class="image--center mx-auto" /></p>
<p>to check all env available write</p>
<pre><code class="lang-go"><span class="hljs-keyword">go</span> env
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1674307337406/c84e871b-89c0-42a8-8058-36dc8c38a7ae.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-hello-world">Hello world?</h3>
<ul>
<li>write the code</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1674307392157/e755987c-7517-4f57-9bce-988feeef86db.png" alt class="image--center mx-auto" /></p>
<ul>
<li>Let's execute the greatest</li>
</ul>
<pre><code class="lang-go"><span class="hljs-keyword">go</span> run filename.<span class="hljs-keyword">go</span>
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1674307405098/7bab1e0b-eda9-4af1-a0e4-598b68368595.png" alt class="image--center mx-auto" /></p>
<p>You should be able to successfully set up your development environment and get started on your first project.</p>
<h3 id="heading-advanced-go-use-cases">Advanced Go use-cases</h3>
<ul>
<li><p>Building web servers and APIs.</p>
</li>
<li><p>Developing command-line tools and utilities.</p>
</li>
<li><p>Creating concurrent and parallel programs.</p>
</li>
<li><p>Building network services and distributed systems.</p>
</li>
<li><p>Developing serverless functions.</p>
</li>
<li><p>Building and deploying containerized applications.</p>
</li>
<li><p>Developing desktop and mobile applications using GUI libraries.</p>
</li>
<li><p>Building machine learning and data processing pipelines.</p>
</li>
<li><p>Developing blockchain and cryptocurrency applications.</p>
</li>
</ul>
<p>All in all, Go is a powerful, efficient, and simple programming language that is suitable for a wide range of applications. The language's simplicity and ease of use make it accessible to developers of all skill levels, and its performance and scalability make it suitable for building large, complex systems.</p>
<p>Go's popularity has been on the rise in recent years, and it has been adopted by many large companies such as Uber, Netflix, and Dropbox, as well as open-source projects such as Kubernetes and Docker.</p>
<p>Bonus, check this <a target="_blank" href="https://github.com/gofireflyio/aiac">Get ChatGPT in Your terminal</a>, a go-based project that generates ready-to-use devops code such as terraform configurations, kubernetes manifest files, ansible, dockfiles, and much more with a single command.</p>
<p>After building your source code, and connecting to the API, set the PATH variable so you can use the tool anywhere.</p>
<p>Powershell as an admin and run this command:</p>
<pre><code class="lang-cpp">[Environment]::SetEnvironmentVariable(<span class="hljs-string">"PATH"</span>, <span class="hljs-string">"C:\YourPathOfc\aiac;"</span> + [Environment]::GetEnvironmentVariable(<span class="hljs-string">"PATH"</span>), <span class="hljs-string">"User"</span>)
</code></pre>
<p>Restart your terminals.</p>
<ul>
<li>Check the tool in Powershell</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1674341678263/67fd6898-00f6-47b4-bce6-d87c4cd30f94.png" alt class="image--center mx-auto" /></p>
<ul>
<li>check the tool in git:</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1674341692433/fe0555c6-bd2e-4853-a4c3-d4acc434839b.png" alt class="image--center mx-auto" /></p>
<p>Good.</p>
<p>In summary, if you are looking for a new language to experience, or if you are interested in building systems, web applications, or network services, <strong>Go is definitely worth considering</strong>. It is a great choice for your next project and you will not regret giving it a try.</p>
]]></content:encoded></item><item><title><![CDATA[AWS Developer Exam Study Guide: Resources, Tips, and Strategies]]></title><description><![CDATA[If you're reading this, you're probably getting ready to take the AWS Developer Exam and want to know how to best prepare. I recently took the exam and wanted to share the resources that I found most useful during my own preparation.
 I'm AWS Develop...]]></description><link>https://blog.yahya-abulhaj.dev/aws-developer-exam-study-guide-resources-tips-and-strategies</link><guid isPermaLink="true">https://blog.yahya-abulhaj.dev/aws-developer-exam-study-guide-resources-tips-and-strategies</guid><category><![CDATA[AWS]]></category><category><![CDATA[Certification]]></category><category><![CDATA[Developer]]></category><category><![CDATA[aws lambda]]></category><category><![CDATA[aws-cdk]]></category><dc:creator><![CDATA[Yahya Abulhaj]]></dc:creator><pubDate>Tue, 10 Jan 2023 00:20:58 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1673310012903/128a6c4e-9ddd-4c6e-a482-8d453337f2a6.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you're reading this, you're probably getting ready to take the AWS Developer Exam and want to know how to best prepare. I recently took the exam and wanted to share the resources that I found most useful during my own preparation.</p>
<details> <summary>I'm AWS Developer Certified.</summary>

<a target="_blank" href="https://www.linkedin.com/posts/yahya-abulhaj_aws-certified-developer-associate-was-issued-activity-7005613788276080640-K5ZU?utm_source=share&amp;utm_medium=member_desktop"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1673373006205/17e94e2f-3f13-417e-84fe-e20690a37c90.png?auto=compress,format&amp;format=webp" /></a>

To be directed, <b>click the post.<b>

</b></b></details>

<p>Let's start with the fundamentals. The AWS Developer Exam is intended to assess your knowledge and skills in developing and maintaining AWS-hosted applications. It covers a wide range of topics related to developement such as storage, networking, and security.</p>
<p>To pass the exam, you must have a solid understanding of these concepts as well as the ability to apply them in real-world scenarios.</p>
<p>With that said, here are the resources that I found most helpful in my journey to becoming an AWS Developer:</p>
<h1 id="heading-aws-documentationhttpsawsamazoncomfrcertificationcertified-developer-associate"><a target="_blank" href="https://aws.amazon.com/fr/certification/certified-developer-associate/">AWS Documentation</a></h1>
<p>When preparing for the AWS Developer Exam, the official AWS documentation is a good place to start. The AWS Developer Guide is included, as well as a variety of other resources such as tutorials, code samples and instructions. The AWS documentation is constantly updated and is an invaluable resource for understanding the platform's various services and features.</p>
<p>You can find more learning material within the link provided above.</p>
<h1 id="heading-aws-training-and-certificationhttpswwwawstraining"><a target="_blank" href="https://www.aws.training/">AWS Training and Certification</a></h1>
<p>Aside from the official documentation, AWS provides a number of training and certification programs to help you prepare for the exam. Online courses, instructor-led training, and even practice exams are examples. I found the online courses to be especially beneficial because they provided a structured learning experience while also allowing me to learn at my own pace. Some popular courses to consider are AWS Developer: Building on AWS and AWS Certified Developer - Associate.</p>
<p>Log from <a target="_blank" href="https://www.aws.training/">here</a> and search for the course.</p>
<h1 id="heading-github-labshttpsgithubcomacloudguru-resourcescourse-aws-certified-developer-associate"><a target="_blank" href="https://github.com/ACloudGuru-Resources/course-aws-certified-developer-associate">GitHub Labs</a></h1>
<p>Exploring sample applications and code repositories is another excellent resource for preparing for the AWS Developer Exam. These can assist you in understanding how to build and deploy real-world applications on the AWS platform and are an excellent way to practice your skills.</p>
<p>I found these hands-on very useful, and I encourage you to try 'em out.</p>
<h1 id="heading-udemy-stephane-maarek-coursehttpswwwudemycomcourseaws-certified-developer-associate-dva-c01"><a target="_blank" href="https://www.udemy.com/course/aws-certified-developer-associate-dva-c01/">Udemy, Stephane Maarek Course</a></h1>
<p>Stephane is a good one, he is able to break down complex concepts into easy-to-understand pieces that are able to engage and motivate students. This course should cover everything you need to know.</p>
<p>His course is designed to cover all of the essential topics that you will need to know in order to pass the AWS Developer Exam with flying colors. From an in-depth look at the AWS services to hands-on labs and practical exercises, this course will provide you with the comprehensive knowledge and skills required to succeed on the exam.</p>
<h1 id="heading-practice-tests-neal-davishttpswwwudemycomcourseaws-developer-associate-practice-exams"><a target="_blank" href="https://www.udemy.com/course/aws-developer-associate-practice-exams/">Practice Tests, Neal Davis</a></h1>
<p>Finally, don't underestimate the value of practice exams and mock tests in your preparation process. These can help you gauge your progress and identify areas where you may need to focus more attention. The AWS Certified Developer Practice tests from Neal Davis is great option.</p>
<h1 id="heading-conclude">Conclude</h1>
<p>Ultimately, passing the AWS Developer Exam necessitates a thorough understanding of the AWS platform as well as how to develop and maintain applications on it. You can give yourself the best chance of success on the exam by using the resources listed above.</p>
<p><strong>Related:</strong></p>
<p><a target="_blank" href="https://blog.yahya-abulhaj.dev/aws-certified-cloud-practitioner-certification">Resources for AWS Cloud Practitioner</a></p>
<details> <summary>Subscribe to my newsletter to be notified whenever I publish useful content </summary>

<a target="_blank" href="https://blog.yahya-abulhaj.dev/newsletter"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1673443688288/c14679db-a1b6-4a54-a0ea-6d999dbc980f.png" /></a>

</details>

]]></content:encoded></item><item><title><![CDATA[Quickstart Ruby On Rails💎]]></title><description><![CDATA[Introduction
Whether you are a beginner looking to learn your first programming language, or an experienced developer looking to add Ruby to your toolkit, this post will give you the knowledge you need to get started. So let's dive in and learn how t...]]></description><link>https://blog.yahya-abulhaj.dev/quickstart-ruby-on-rails</link><guid isPermaLink="true">https://blog.yahya-abulhaj.dev/quickstart-ruby-on-rails</guid><category><![CDATA[devTime]]></category><category><![CDATA[Developer]]></category><category><![CDATA[building]]></category><category><![CDATA[Ruby]]></category><category><![CDATA[Ruby on Rails]]></category><dc:creator><![CDATA[Yahya Abulhaj]]></dc:creator><pubDate>Fri, 06 Jan 2023 15:14:29 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1673018538764/e3eb2ebe-df5f-46d6-81a4-692bd13dc79b.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-introduction">Introduction</h1>
<p>Whether you are a beginner looking to learn your first programming language, or an experienced developer looking to add Ruby to your toolkit, this post will give you the knowledge you need to get started. So let's dive in and learn how to use Ruby!</p>
<p>Let's explain 2 critical points:</p>
<ul>
<li><p>Ruby is a programming language</p>
</li>
<li><p>Ruby on Rails also RoR is a framework that simply provides you with more tools to excel with Ruby developement!</p>
</li>
</ul>
<p>To start building a web application with Ruby on Rails, you will need to do the following:</p>
<p>Install Ruby and Rails: You will need to have the <strong>Ruby</strong> programming language and <strong>the Rails</strong> web development framework installed on your machine. You can install them using a package manager such as rbenv or rvm, or you can download and install them manually.</p>
<h2 id="heading-install-ruby">Install Ruby</h2>
<ul>
<li>For windows, download the <a target="_blank" href="https://rubyinstaller.org/">installer</a> check this command in your terminal once finished, if returned the version, done.</li>
</ul>
<pre><code class="lang-bash">ruby -v
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1673019316766/fcdd6f63-d399-46e9-acc5-740f9ccf153e.png" alt class="image--center mx-auto" /></p>
<ul>
<li>for Linux refer <a target="_blank" href="https://www.ruby-lang.org/en/documentation/installation/">here</a></li>
</ul>
<h2 id="heading-install-rails">Install Rails</h2>
<p>To start building an app with Ruby on Rails, you will need to install Rails itself. You can do this by running the following command in your terminal:</p>
<pre><code class="lang-bash">gem install rails
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1673019334371/16601d05-e5e2-4182-8853-5322f6ef1aa1.png" alt class="image--center mx-auto" /></p>
<p>This will install Rails and all of the dependencies needed to build a Rails app.</p>
<p>Once Rails is installed, you can create a new Rails app by running the following command:</p>
<pre><code class="lang-bash">rails new myapp
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1673019354526/ff06bd70-5c23-4b00-9ce0-d4eac05de360.png" alt class="image--center mx-auto" /></p>
<p>This will create a new directory called myapp with the basic structure of a Rails app and it looks something like this:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1673020354862/447612eb-42d0-4581-8d17-fd303132cead.png" alt class="image--center mx-auto" /></p>
<p>To start the Rails development server, navigate to the <code>myapp</code> directory and run the following command:</p>
<pre><code class="lang-bash"><span class="hljs-built_in">cd</span> myapp
rails server
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1673085803496/30e63c2b-2c27-402d-a0b9-c582e88f9583.png" alt class="image--center mx-auto" /></p>
<p>This will start the Rails development server, and you can view your app by visiting http://localhost:3000 in your web browser.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1673085814329/4ff1e967-ab6b-44f5-a3dc-2f59f0e398b8.png" alt class="image--center mx-auto" /></p>
<p>You can then start building your app by following the steps in the Ruby on Rails tutorial; simply click on the logo in the middle and it will direct you to the tuto where it will guide you through the process of building a complete Rails app from start to finish.</p>
<h2 id="heading-good-job-whats-next">Good job, what's next?</h2>
<p>Ruby is the driving force behind websites like Twitter. There's a lot more to it than that. You can investigate the following:</p>
<ul>
<li>Set up the database: Rails uses a database to store application data. By default, it uses SQLite, but you can also use other databases such as MySQL or PostgreSQL. You will need to set up your database and configure your Rails application to use it.</li>
</ul>
<pre><code class="lang-bash">rails db:migrate
</code></pre>
<ul>
<li><p>Define your models and controllers: In Rails, models represent the data in your application and controllers handle incoming requests and determine what to do with them. You will need to define your models and controllers and specify how they should interact with your database and views.</p>
</li>
<li><p>Create your views: Views are the user-facing components of your application. They define the layout and content that will be displayed to users. You can create views using HTML, CSS, and the Rails template language.</p>
<p>  You can achieve the above by writing this command:</p>
<pre><code class="lang-bash">  rails generate scaffold post title:string content:text
</code></pre>
</li>
</ul>
<p>Our new app is now live at /posts.</p>
<p>Go further to Test and debug your application, as you are building you will want to ensure that it is functioning correctly. You can use tools such as the Rails console and the debugger to test and debug your application.</p>
<p>Once all ready, deploy your application, go ahead deploy it to a web server!</p>
<p>There are many options for hosting Rails applications, including hosting providers such as Azure, Heroku or AWS among MANY OTHERS!</p>
]]></content:encoded></item><item><title><![CDATA[Mastering Python and Bash for Next-Level Automation]]></title><description><![CDATA[Description
You should be able to identify the following points by the end of this article:

Describe Bourne-Shell, Bourne-Again Shell, and Programming Language Scripting.

Capable of installing and writing scripts in Bourne-Again Shell on Linux, mac...]]></description><link>https://blog.yahya-abulhaj.dev/mastering-python-and-bash-for-next-level-automation</link><guid isPermaLink="true">https://blog.yahya-abulhaj.dev/mastering-python-and-bash-for-next-level-automation</guid><category><![CDATA[automation]]></category><category><![CDATA[Bash]]></category><category><![CDATA[Python]]></category><category><![CDATA[Developer]]></category><category><![CDATA[Devops]]></category><dc:creator><![CDATA[Yahya Abulhaj]]></dc:creator><pubDate>Fri, 23 Dec 2022 12:42:49 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1671832621012/cc6346f2-c09f-43fb-8250-7205c5d986f2.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-description">Description</h3>
<p>You should be able to identify the following points by the end of this article:</p>
<ul>
<li><p>Describe Bourne-Shell, Bourne-Again Shell, and Programming Language Scripting.</p>
</li>
<li><p>Capable of installing and writing scripts in Bourne-Again Shell on Linux, macOS and Windows-Based OS.</p>
</li>
<li><p>Capable of working with Python including, installation, writing code and execution.</p>
</li>
</ul>
<h1 id="heading-a-brief-history-of-the-unix-command-line">A Brief History of the Unix Command Line</h1>
<p>Automation has long been a part of computing, and Unix has played an important role in the development of automation tools and techniques.</p>
<p>One of the earliest forms of automation on Unix systems was the use of <strong>shell scripts.</strong></p>
<p>The <strong>Bourne shell</strong>, also known as the "sh" shell, was the first Unix shell that was released in 1979. Stephen Bourne created it at <strong>Bell Labs,</strong> and it quickly became the standard shell on many Unix and Linux systems.</p>
<ul>
<li><p>The Bourne shell is a command-line interface (CLI) that lets users enter commands and have them executed on a Unix or Linux system.</p>
</li>
<li><p>It can also run scripts, which are programs that contain a series of commands that are executed in order. These scripts can be used to automate tasks like system administration and data processing.</p>
</li>
</ul>
<p>Bourne shell is still used on many Unix and Linux systems today, and it is an <strong>important part of computing history</strong>.</p>
<p>From this point forward, the Bourne shell was superseded by the Bash shell, which was designed to be a more feature-rich and user-friendly alternative to the Bourne shell.</p>
<p>Let's learn more about it.</p>
<h2 id="heading-bourne-again-shell">Bourne-Again Shell</h2>
<p>The Bash, or Bourne-Again Shell, is a Unix shell and command language that was developed as an improvement over the Bourne shell by Brian Fox in the late 1980s.</p>
<p>Bash's inclusion of a large number of built-in commands and utilities was one of its key innovations. This enabled users to perform a wide range of tasks without the need to install additional software. Bash also improved the programming language by adding better control structures and the ability to define functions.</p>
<p>Along with these enhancements, Bash added support for command line editing and command history, making it easier for users to work with the shell and eventually resulting in version control in modern times.</p>
<p>Since its release, Bash has become the default shell on many Unix and Linux systems, and it is also available on other platforms such as macOS and Windows. It is still widely used today and remains a popular choice for automation and command-line work.</p>
<p>Despite its age, Bash continues to be actively developed and improved, with new versions being released periodically.</p>
<h2 id="heading-automation-with-programming-languages">Automation with Programming Languages</h2>
<p>While the Bash or Bourne-again shell, is a powerful and widely used tool for automation, it has some limitations that may make it less suitable for complex types of tasks.</p>
<p>Consequently, as computers and software evolved, a variety of programming languages that could be used for automation were developed. C, C++, Python, Ruby, and many others were among them. These languages enabled users to automate tasks in a more powerful and flexible manner than the Unix shell including:</p>
<ul>
<li><p>They provide powerful control structures such as loops and conditional statements that allow users to write more complex scripts. They also provide data types such as arrays with multiple dimensions compared to bash, lists, and dictionaries, which can be used to store and manipulate data more flexibly.</p>
</li>
<li><p>They offer a wide range of libraries and frameworks that can be used to perform a variety of tasks. These libraries and frameworks can be used to automate tasks such as web development, data analysis, and machine learning, to name just a few examples.</p>
</li>
</ul>
<p>Let's begin with Bash and progress to Python to maximize your understanding of automation!</p>
<h1 id="heading-get-started-with-bash-scripting">Get Started With Bash Scripting</h1>
<p>You don't need to know any programming languages or have any advanced skills to get started with Bash. All you need is little knowledge of the <strong>Bash shell</strong> and some <strong>basic commands of the Linux operating system</strong>.</p>
<p>Working with Bash can be explained in the simple dots below:</p>
<ul>
<li><p>Install Bash</p>
</li>
<li><p>Write Your Script</p>
</li>
<li><p>Execute Your Script</p>
</li>
</ul>
<p>Yep, that's it.</p>
<h2 id="heading-installation-process">Installation Process</h2>
<p>This section will delve into the installation of bash in your operating system.</p>
<h3 id="heading-linux-based-os">Linux-Based OS</h3>
<p>Bash is available on most Unix and Linux systems, so if you're using one of these, you've probably already got it.</p>
<ul>
<li>You do not have Linux? <a target="_blank" href="https://blog.yahya-abulhaj.dev/containers-docker-or-what-exactly-is-that#heading-why-not-begin-with-vms-first">Try 1 for free!</a></li>
</ul>
<p>Open a terminal and type the following command to see if Bash is installed on your system:</p>
<pre><code class="lang-bash">bash --version
</code></pre>
<p>If Bash is installed, the version number should be displayed. If Bash is not already installed, you must install it before you can use it.</p>
<p>The process for installing Bash on a Linux system will vary depending on the distribution you are using. Here are some general instructions that should work on most Linux distributions:</p>
<p>1. Open a terminal and enter the following command:</p>
<pre><code class="lang-bash">sudo apt-get install bash
</code></pre>
<p>This command will install Bash on your system using the apt package manager.</p>
<p>2. If you are using a different package manager, such as yum or pacman, you can use the appropriate command to install Bash. For example, on a system using yum, you can use the following command:</p>
<pre><code class="lang-bash">sudo yum install bash
</code></pre>
<p>On a system using pacman, you can use the following command:</p>
<pre><code class="lang-bash">sudo pacman -S bash
</code></pre>
<p>3. Once the installation is complete, you can start using Bash by opening a terminal and entering Bash commands. To open a terminal, you can click on the terminal icon in the application launcher or press Ctrl+Alt+T.</p>
<p>Bash should now be installed on your system, and you should be able to use it to run Bash scripts and commands.</p>
<h3 id="heading-macos">macOS</h3>
<p>Bash is not installed by default on macOS, but it can be added using the Homebrew package manager. To use Homebrew to install Bash, first <a target="_blank" href="https://brew.sh/">install Homebrew</a></p>
<p>Then, in a terminal, type the following command:</p>
<pre><code class="lang-bash">brew install bash
</code></pre>
<h3 id="heading-windows-based-os">Windows-Based OS</h3>
<p>To install Bash on Windows, you must first install the Windows Subsystem for Linux (WSL), which is a compatibility layer that allows Linux applications to run on Windows. The following are the steps for installing Bash on Windows using WSL:</p>
<p>1: Open the Start menu and search for "Turn Windows features on or off".</p>
<p>2: In the Windows Features dialog, scroll down to the "Windows Subsystem for Linux" option and select the checkbox next to it.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1671790140883/ba86a75e-053c-44c8-9e08-fb94d676e26f.png" alt class="image--center mx-auto" /></p>
<p>3: Click the <strong>"OK"</strong> button to enable the WSL feature.</p>
<p>4: Restart your computer when prompted.</p>
<p>5: After the restart, open the Microsoft Store and search for "Linux".</p>
<p>6: From the search results, select a Linux distribution, such as Ubuntu, and click the "Get" button to install it.</p>
<p>7: Wait for the Linux distribution to be installed. This may take a few minutes.</p>
<p>8: Once the installation is complete, click the "Launch" button to open the Linux terminal.</p>
<p>9: Follow the on-screen instructions to set up your Linux distribution and create a user account.</p>
<h2 id="heading-writing-your-first-bash-script">Writing Your First Bash Script</h2>
<p>You can write Bash scripts, which are programs that contain a series of commands that are executed in sequence, in addition to manually entering commands in the terminal.</p>
<p>To create a Bash script, open a text editor and create a file with the <code>.sh</code> extension. Create a file called <code>myscript.sh</code> as an example.</p>
<p>You must include a shebang line at the top of the script, which tells the system which interpreter to use to execute the script. The shebang line should look something like this:</p>
<pre><code class="lang-Bash"><span class="hljs-meta">#!/usr/bin/env bash</span>
</code></pre>
<p><strong>Or</strong></p>
<pre><code class="lang-Bash"><span class="hljs-meta">#!/usr/bin/bash</span>
</code></pre>
<ul>
<li>We can use either of them to run commands in shell scripts written in the Bash shell or any other shell. When it comes to security, <code>#!/usr/bin/bash</code> is recommended, while <code>#!/usr/bin/env</code> bash is recommended for portability.</li>
</ul>
<p>You can enter any Bash commands after the shebang line that you want to be executed when the script is run. For instance, you could write a script that creates a directory and copies some files.</p>
<p>Let's do it right away! Here is the required script:</p>
<pre><code class="lang-Bash"><span class="hljs-meta">#!/usr/bin/env bash</span>

<span class="hljs-comment"># Create a new directory called Yaya-Life-Changing-Project</span>
mkdir Yaya-Life-Changing-Project

<span class="hljs-comment"># Copy files from the current directory to the new created directory above</span>
cp * Yaya-Life-Changing-Project/

<span class="hljs-comment"># Print a message indicating the files have been copied</span>
<span class="hljs-built_in">echo</span> <span class="hljs-string">"Files copied to Yaya-Life-Changing-Project"</span>
</code></pre>
<p>This will execute the script, creating a new directory called <code>Yaya-Life-Changing-Project</code> in the current directory and copying all files from the current directory to the <code>Yaya-Life-Changing-Project</code> directory. In addition, the script will print a message indicating that the files have been copied.</p>
<p>To use this script, you will need to save it to a file with the .sh extension and make it executable. You can do this by entering the following commands in a terminal:</p>
<pre><code class="lang-Bash">chmod +x script.sh
./script.sh
</code></pre>
<p>1. The first command, we just tell it, "Hey computer, change the mode of this file to executable so we can run it!"</p>
<p>2. Second, this is how we launch Bash scripts to start the automation!</p>
<p>You can modify the script to suit your needs. For instance, you can change the name of the directory or specify a different set of files to be copied. You can also add commands to the script to perform additional tasks, such as deleting files or creating new directories.</p>
<h3 id="heading-expanding-the-boundaries">Expanding the boundaries</h3>
<p>Based on this basis, we can use the analogy to conclude that every command we issue to the command line interface is essentially a script that performs a specific task! Amazing, the computer revolution basically.</p>
<p>Simplify complex use cases with this proven bash workflow!</p>
<p>Congratulations on completing your first steps in using <strong>Bash for automation</strong>! <strong>Installing Bash¹</strong> and <strong>learning how to use it</strong>² is an important foundation for further exploration into the world of computers.</p>
<p><strong>A</strong>re you READY for more? It is time to move forward and experiment with automation using a programming language such as the well-known Python. I'm sure you do!</p>
<h1 id="heading-python-automation">Python Automation</h1>
<p><strong>P</strong>ython is the easiest language to learn; even if you have no prior coding experience, you can learn it quickly thanks to extensive open-source tutorials and documentation. As a DevOps, you must be familiar with coding. So <strong>Python</strong> will be an excellent choice for you.</p>
<p><strong>P</strong>ython is a powerful programming language that places a strong emphasis on readability. It is ideal for beginners given that it is simple and intuitive, but it is also used by professionals in fields such as data science, machine learning, web development and, in our case, <strong>DevOps for automation</strong>.</p>
<p>Learn the basics of Python, before you can start automating tasks. This includes learning how to write and run basic Python programs, how to use variables and data types, and how to use loops and control statements.</p>
<ul>
<li><a target="_blank" href="https://www.youtube.com/watch?v=t8pPdKYpowI&amp;ab_channel=TechWorldwithNana">Nana's 5h30 Python course</a> is your best bet. She is astoundingly good at providing the necessary building blocks in a dish for you.</li>
</ul>
<p><strong>Now</strong>, that you have a basic understanding of Python and are ready to move on to the automation phase, let's get started with some Python use cases.</p>
<h2 id="heading-exploring-the-role-of-python-in-automation">Exploring the Role of Python in Automation</h2>
<p>The following are some examples of Python-based automation tasks:</p>
<p>1- <strong>Web scraping:</strong> Python can be used to extract data from websites and save it in a usable format.</p>
<p>2- <strong>Automating repetitive tasks:</strong> Python's ability to execute repetitive tasks quickly and accurately makes it a good choice for automating tasks that would otherwise be time-consuming to do manually.</p>
<p>3- <strong>System administration:</strong> Python can be used to automate various system administration tasks, such as creating and managing user accounts, managing servers, and backing up data.</p>
<p>4- <strong>Testing:</strong> Python can be used to write automated tests for web applications and other software to ensure that they are working correctly.</p>
<p>5- <strong>Data processing:</strong> Python's powerful data manipulation libraries, such as Pandas, make it a good choice for processing and analyzing large datasets.</p>
<p>6- <strong>Machine learning:</strong> Python has a number of powerful libraries for machine learning, such as scikit-learn and TensorFlow, which can be used to automate tasks related to training and evaluating machine learning models.</p>
<p>7- <strong>Automating tasks in scientific research:</strong> Python's scientific libraries, such as NumPy and SciPy, make it a good choice for automating tasks in scientific research, such as data analysis and visualization.</p>
<h2 id="heading-python-in-automation-workflows">Python in Automation Workflows</h2>
<p>Python offers an efficient way to automate mundane and repetitive processes. Let's go over the basics of how to start automating tasks with this tool.</p>
<p>1- <strong>Install Python:</strong> The first step to using Python for automation is to install it on your computer.</p>
<p>2- <strong>Choose an editor:</strong> After installing Python, you will need a text editor to write your code. There are many options to choose from, such as IDLE (the built-in Python editor), PyCharm, or Visual Studio Code. Choose the one that you are most comfortable with and install it on your system.</p>
<p>3- <strong>Decide on a task to automate:</strong> Once you have a basic understanding of Python, you can start thinking about which tasks you want to automate. Some common tasks that can be automated with Python include data processing, web scraping, and automating repetitive tasks. Consider what tasks you do regularly that could be automated, and think about how you could use Python to accomplish them.</p>
<p>4- <strong>Write the code:</strong> Once you have identified a task to automate, you can start writing the code to accomplish it. Depending on the task, this may involve using Python libraries and modules such as os, subprocess, or requests. You can also use functions and classes to organize your code and make it more reusable.</p>
<p>5- <strong>Test and debug your code:</strong> Before you can use your code for automation, you will need to test it to make sure it is working correctly. You can use print statements and debugging tools to help identify and fix any issues.</p>
<p>6- <strong>Set up a schedule:</strong> Once your code is working correctly, you can set up a schedule to run it automatically. This can be done using tools like cron on Unix-like systems or the Task Scheduler on Windows. You can also use third-party tools like Zapier to automate tasks across different platforms.</p>
<h2 id="heading-execute-automation-with-python">Execute Automation with Python</h2>
<p><strong>Step 1:</strong> Install <a target="_blank" href="https://www.python.org/downloads/">Python</a>, Once you have downloaded the installer, run it to install Python on your system.</p>
<p><strong>Step 2:</strong> Install <a target="_blank" href="https://code.visualstudio.com/download">Editor</a></p>
<p><strong>Step 3:</strong> Open the Editor and write this Python script for automating the process of creating a new folder and saving a text file containing the current date and time:</p>
<pre><code class="lang-Python"><span class="hljs-keyword">import</span> os
<span class="hljs-keyword">import</span> datetime

<span class="hljs-comment"># Get the current date and time</span>
now = datetime.datetime.now()

<span class="hljs-comment"># Create a new folder with the current date and time as the name</span>
folder_name = now.strftime(<span class="hljs-string">"%Y-%m-%d_%H-%M-%S"</span>)
os.mkdir(folder_name)

<span class="hljs-comment"># Save a text file with the current date and time inside the new folder</span>
file_name = <span class="hljs-string">"timestamp.txt"</span>
file_path = os.path.join(folder_name, file_name)
<span class="hljs-keyword">with</span> open(file_path, <span class="hljs-string">"w"</span>) <span class="hljs-keyword">as</span> f:
    f.write(now.strftime(<span class="hljs-string">"%Y-%m-%d %H:%M:%S"</span>))

print(<span class="hljs-string">"Folder and text file created successfully!"</span>)
</code></pre>
<p><strong>Step 4:</strong> To execute this script, save it with a <code>.py</code> file extension (e.g. <code>automation.py</code>) and run it using the Python interpreter. For example, if you are using the command line, you can navigate to the directory where you saved the script and run the following command:</p>
<pre><code class="lang-bash">python automation.py
</code></pre>
<p>This will create a new folder with the current date and time as the name and save a text file with the same name inside the folder. The script can then be customized to meet your specific automation requirements by adding or modifying the code as needed.</p>
<p>That's all there is to Python, right? Yes! Great work</p>
<p>You can now try more complex scenarios with Python like:</p>
<ul>
<li><p><strong>I</strong>nstall the cloud packages with which you want to interact and perform cloud automation.</p>
</li>
<li><p><strong>C</strong>reate Scheduled Tasks and handle Errors</p>
</li>
<li><p><strong>M</strong>onitor Applications</p>
</li>
</ul>
<h1 id="heading-to-wrap-things-up">To Wrap Things Up</h1>
<p>We began by stating the progression of computing from the simplicity of the shell to the enhanced capabilities of bash, and finally to the versatility and power of Python, and we did write our Bash and Python scripts and executed them to do the required automation!</p>
<p>Both Bash and Python are powerful tools for automation, and the best choice will depend on the specific needs of your task. Bash is a good choice for simple tasks that can be performed using the built-in commands and utilities, while Python is a better choice for more complex tasks that require a full-featured programming language.</p>
<p>Automation is a key aspect of DevOps that helps optimize various processes in the software development lifecycle. <strong>Adopt DevOps!</strong></p>
<h2 id="heading-foundation-to-more">Foundation to more</h2>
<p>You've now established a solid foundation in automation, there's plenty of room for you to advance your knowledge and delve deeper into other technologies.</p>
<p>Consider checking one of these resources to learn more and broaden your Automation Skills:</p>
<ul>
<li><p>Start Automation with Powershell.</p>
</li>
<li><p>Automate the provisioning of your infrastructure with Terraform, AWS CloudFormation if you are using AWS infra, or ARM if you are using Azure.</p>
</li>
<li><p>Automate the configuration management of your infrastructure with Ansible, Chef &amp; Puppet</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Monitoring Made Easy with Prometheus]]></title><description><![CDATA[Site Reliability Engineering
Site reliability engineering (SRE) is a discipline that combines software engineering and operations to ensure the reliability and scalability of a system. Google first applied it in 2003 to enhance the reliability of the...]]></description><link>https://blog.yahya-abulhaj.dev/monitoring-made-easy-with-prometheus</link><guid isPermaLink="true">https://blog.yahya-abulhaj.dev/monitoring-made-easy-with-prometheus</guid><category><![CDATA[SRE]]></category><category><![CDATA[Developer]]></category><category><![CDATA[Devops]]></category><category><![CDATA[monitoring]]></category><category><![CDATA[awareness]]></category><dc:creator><![CDATA[Yahya Abulhaj]]></dc:creator><pubDate>Thu, 22 Dec 2022 09:20:52 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1671700822179/0Cpigk8bX.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-site-reliability-engineering">Site Reliability Engineering</h1>
<p>Site reliability engineering (SRE) is a discipline that combines software engineering and operations to ensure the reliability and scalability of a system. Google first applied it in 2003 to enhance the reliability of the company's systems and services.</p>
<p>At the time, Google's systems were rapidly expanding, and the company was facing increasing challenges in maintaining their dependability. To address this, Google formed a team of engineers in charge of both developing and operating the systems. Site reliability engineers (SREs) were the title given to these engineers.</p>
<p>Google's SRE team was primarily in charge of:</p>
<ul>
<li><strong>M</strong>onitoring the systems </li>
<li><strong>A</strong>utomating tasks</li>
<li><strong>R</strong>esponding to incidents</li>
</ul>
<p>They also worked to <strong>continuously improve</strong> the systems' reliability and scalability by updating the architecture and introducing new tools and technologies. </p>
<p>SRE has gained widespread acclaim in the tech industry since its inception. Many businesses now have SRE teams in place to ensure the reliability of their systems and services. Other disciplines, such as site reliability architecture (SRA) and site reliability management, have been inspired by SRE (SRM).</p>
<p>I recommend this Google resource for more on SRE: <a target="_blank" href="https://sre.google/">https://sre.google/</a></p>
<h2 id="heading-sre-core-values">SRE, Core Values</h2>
<p>The primary goal of SRE is to use engineering principles to improve the performance of a system's operations. This involves a variety of approaches and techniques, all of which are designed to ensure that the system is running efficiently and effectively. </p>
<p>Some of the key principles and practices of SRE include the following:</p>
<ul>
<li><p><strong>Automation is key:</strong> SRE teams use automation to perform tasks that are repetitive, error-prone, or time-consuming. This allows them to focus on more important tasks and helps to reduce the risk of human error.</p>
</li>
<li><p><strong>Error budgets:</strong> SRE teams allocate a certain percentage of their time to proactive tasks such as improving the system's reliability, and the rest of the time is reserved for reactive tasks such as responding to issues. This is known as an error budget, and it helps the team prioritize tasks and ensure that the system remains reliable over time.</p>
</li>
<li><p><strong>Use of data:</strong> SRE teams rely heavily on data to understand the performance of the system and identify patterns or trends that may indicate a problem. They use tools such as application performance monitoring (APM) tools, infrastructure monitoring tools, and log analysis tools to collect and analyze data.</p>
</li>
<li><p><strong>Continuous improvement:</strong> SRE teams are focused on continuously improving the reliability and scalability of the system. This can involve implementing changes to the system's architecture, introducing new tools and technologies, or redesigning processes to make them more efficient.</p>
</li>
<li><p><strong>Reliability is a feature:</strong> SRE teams view reliability as a critical feature of the system, and they prioritize it accordingly. They use a variety of <strong>tools and techniques</strong> to <strong>monitor the system</strong> and detect issues, and they take action to prevent outages and improve the overall reliability of the system.</p>
</li>
</ul>
<p><strong>Prometheus</strong>, the open source project from the Cloud Native Computing Foundation (CNCF), is widely recognized as one of the top monitoring systems available. With its powerful features and open-source nature, it is a popular choice among professionals looking to improve their monitoring practices. So, if you're ready to get started with Prometheus and take your monitoring efforts to the next level, let's get started!</p>
<h1 id="heading-get-to-know-promethus">Get to Know Promethus</h1>
<p><strong>P</strong>rometheus is a time series database  monitoring system, Yes, once again, the result of an open-source-driven community. The development of Prometheus has been heavily influenced by the community, and it continues to be an actively developed and supported project.</p>
<p><strong>SoundCloud engineers</strong> created Prometheus in 2012 as a way to monitor the performance of their systems and services. It gained popularity quickly and was adopted by other organizations. The CNCF approved it as a project in 2015, and it has since been actively developed and maintained by a large community of users and contributors.</p>
<p><strong>P</strong>rometheus development is guided by a set of principles that prioritize simplicity, robustness, and usability. It is intended to be scalable and capable of handling large amounts of data as well as a high volume of queries. It also has a set of integrations with other tools and systems, making it simple to use in a variety of settings.</p>
<p>Let us explain what makes it a worthwhile consideration!</p>
<h2 id="heading-features-for-your-note">Features For Your Note</h2>
<p>Prometheus has several features that make it an appealing choice, incl:</p>
<ul>
<li><p><strong>Flexible query language:</strong> Prometheus has a powerful query language that allows users to define custom metrics and alerts based on their specific needs.</p>
</li>
<li><p><strong>Time series database:</strong> Prometheus stores metrics in a time series database, which allows users to view and analyze the data over time to understand trends and identify patterns or anomalies.</p>
</li>
<li><p><strong>Scraping:</strong> Prometheus can scrape metrics from target systems, which means it can periodically retrieve metrics from other systems and store them in its time series database.</p>
</li>
<li><p><strong>Alerting:</strong> Prometheus has built-in alerting capabilities that allow users to define alert rules based on metric thresholds or other conditions. When an alert is triggered, it can send notifications to the user or trigger an automatic response.</p>
</li>
<li><p><strong>Integrations:</strong> Prometheus has a rich set of integrations with other tools and systems, which makes it easy to use in a variety of environments. It is often used in conjunction with tools such as <strong>Grafana</strong> and <strong>Kubernetes</strong>.</p>
</li>
<li><p><strong>Scalability:</strong> Prometheus is designed to be scalable and can handle large amounts of data and a high volume of queries.</p>
</li>
</ul>
<h2 id="heading-workflow-prior-to-the-jump">Workflow Prior To The Jump</h2>
<p>In order to effectively implement this tool and ensure a smooth workflow, I will provide a detailed explanation of the process. Then, we will move forward and complete each step in a step-by-step manner, carefully following the guidelines and paying close attention to detail in order to achieve the desired results!</p>
<p>1- <strong>Install Prometheus:</strong> You can install Prometheus on your own server or use a managed service such as Prometheus as a Service.</p>
<p>2- <strong>Configure Prometheus:</strong> After installing Prometheus, you will need to configure it to collect metrics from the target systems and applications that you want to monitor. You can do this using configuration files and command-line flags.</p>
<p>3- <strong>Set up targets:</strong> To collect metrics, Prometheus needs to know which systems and applications to scrape for data. You can set up targets using configuration files or the Prometheus web interface.</p>
<p>4- <strong>Set up alerts:</strong> Prometheus includes a powerful alerting system that allows you to set up rules and notifications for any kind of behavior or anomaly. You can set up alerts using configuration files or the Prometheus web interface.</p>
<p>5- <strong>Visualize and analyze data:</strong> Prometheus includes a flexible query language and a range of visualization tools that allow you to analyze and understand your metrics data. You can use these tools to create graphs, dashboards, and alerts.</p>
<h1 id="heading-the-jump">The Jump</h1>
<p>The step-by-step instructions provided below will help you effectively get started with the Prometheus system. These steps will walk you through the process of installing and configuring Prometheus, ensuring that you can use the tool once it is up and running.</p>
<p>Although I provided instructions for both Windows and Linux, you should consider doing this work in a linux-based system. You can do it right now by trying VMs for free from this <a target="_blank" href="https://blog.yahya-abulhaj.dev/containers-docker-or-what-exactly-is-that#heading-virtual-machines">link!</a></p>
<ul>
<li>Linux powers 95% of the servers that host the world's top one million domains.</li>
</ul>
<h2 id="heading-linux-based-os">Linux-Based OS</h2>
<p>1- Download the latest release of Prometheus from the <a target="_blank" href="https://prometheus.io/download/">official Prometheus website</a>. You can either download a pre-built binary or build Prometheus from source.</p>
<p>2- Extract the downloaded archive and navigate to the directory containing the Prometheus executable.</p>
<pre><code>tar xvfz prometheus-*.tar.gz
cd prometheus-*
</code></pre><p>3- Run the Prometheus binary:</p>
<pre><code>./prometheus
</code></pre><h2 id="heading-windows-based-os">Windows-Based OS</h2>
<p>The initial step is same, which is to install from the provided link.</p>
<p>2- Extract the downloaded archive and navigate to the directory using the command prompt:</p>
<pre><code>cd C:\path\to\prometheus-*
</code></pre><p>3- Run the Prometheus binary:</p>
<pre><code>prometheus.exe
</code></pre><h2 id="heading-create-a-configuration-file-for-prometheus">Create a configuration file for Prometheus.</h2>
<p>You can use the <code>prometheus.yml.example file</code> as a starting point and customize it to suit your needs. </p>
<p>Let's create yours just right now! </p>
<p>You will need to create a<code>.yml</code>  file that specifies the configuration options for your Prometheus server. Here are guidelines for creating a configuration file for Prometheus:</p>
<p>1- Begin the file with <code>global</code>  and <code>scrape_configs</code>  blocks. The <code>global</code>  block allows you to specify global configuration options that apply to all scrape jobs, while the <code>scrape_configs</code>  block specifies individual scrape jobs and the targets they should scrape.</p>
<p>2- In the <code>global block</code>, you can specify options such as the external labels that should be applied to all metrics, the retention period for data, and the frequency at which the Prometheus server should scrape targets.</p>
<p>3- In the <code>scrape_configs</code> block, you can specify individual scrape jobs using the <code>- job_name</code> option. For each scrape job, you will need to specify the targets to scrape using the <code>static_configs</code> or `file_sd_configsv options. You can also specify additional options such as the scrape interval and the metrics path.</p>
<p>4- Save the file with a .yml extension and use the <code>--config.file</code> flag to specify the path to the configuration file when starting the Prometheus server.</p>
<p>Here is an example of a simple Prometheus configuration file:</p>
<pre><code><span class="hljs-built_in">global</span>:
  external_labels:
    env: production
  <span class="hljs-attr">retention</span>: <span class="hljs-number">90</span>d
  <span class="hljs-attr">scrape_interval</span>: <span class="hljs-number">15</span>s

<span class="hljs-attr">scrape_configs</span>:
  - job_name: <span class="hljs-string">'prometheus'</span>
    <span class="hljs-attr">static_configs</span>:
      - targets: [<span class="hljs-string">'localhost:9090'</span>]

  - job_name: <span class="hljs-string">'node_exporter'</span>
    <span class="hljs-attr">static_configs</span>:
      - targets: [<span class="hljs-string">'localhost:9100'</span>]
</code></pre><p>This configuration file specifies two scrape jobs: one for the Prometheus server itself and one for the node exporter. It also specifies a global retention period of 90 days and a scrape interval of 15 seconds.</p>
<p>5- Start the Prometheus server using the following command:</p>
<pre><code> ./prometheus --config.file=<span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">path</span> <span class="hljs-attr">to</span> <span class="hljs-attr">your</span> <span class="hljs-attr">config</span> <span class="hljs-attr">file</span>&gt;</span></span>
</code></pre><p>for Windows, instead of <code>./prometheus</code> use <code>prometheus.exe</code> <br /> 
Example:</p>
<pre><code>prometheus.exe --config.file=prometheus.yml
</code></pre><p>That's it! GreatJob. You can verify that Prometheus is running by visiting http://localhost:9090 in your web browser. The Prometheus UI should now be accessible.</p>
<p>By default, Prometheus will listen on port 9090 for incoming metrics. You can use the <code>--web.listen-address</code> flag to specify a different port or IP address.</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Prometheus as a service</td><td>Solution</td></tr>
</thead>
<tbody>
<tr>
<td><strong>Windows</strong></td><td>use the 'sc' utility ex: <br /><code>sc create Prometheus binPath= "C:\path\to\prometheus.exe"</code></td></tr>
<tr>
<td><strong>Linux</strong></td><td>Use process manager such as <strong>Systemd</strong> or <strong>Upstart</strong></td></tr>
</tbody>
</table>
</div><h2 id="heading-good-step-ahead">Good Step Ahead!</h2>
<p>You can now start your monitoring Journey!
Some common use cases for Prometheus include monitoring the performance of servers, tracking the health of applications, and monitoring the usage of resources such as CPU, memory, and disk space. You can gain valuable insights into the performance and health of your systems and be better prepared to handle any issues that may arise.</p>
<p>At this level, you can proceed doing these steps:</p>
<ul>
<li>Set up alerts and create Alert rules.</li>
<li>Visualize and analyze data.</li>
<li>Monitor Third party Applications</li>
<li>Collect Metrics </li>
</ul>
<p>By following the steps outlined in this article, you should now have a fully functional Prometheus setup that is capable of collecting and visualizing metrics from your infrastructure. Well done!</p>
<h1 id="heading-synopsis">Synopsis</h1>
<p>While <strong>S</strong>RE and <strong>D</strong>evOps have different focuses, they often overlap in practice and can be complementary to each other.  SRE teams may use DevOps practices such as continuous delivery and automation to improve the reliability of the system. Similarly, DevOps teams may adopt SRE principles such as error budgets and monitoring to ensure the reliability and performance of the system.</p>
<p>The purpose behind writing this, don't limit yourself to a specific job role; be curious and strive to learn as much as you can in order to provide value to your team and organization. and eventually the world.</p>
<p>I hope you've enjoyed learning about SRE, which I find personally very rewarding. It has been a pleasure to share my knowledge and experience with you today, and I hope you now have a better understanding of what SRE is and how it can be used in practice. With that, I believe we have covered great topics, so I will call our session to a close. Thank you for your time and consideration; I hope you will continue to investigate and learn more about SRE and DevOps in the future.</p>
]]></content:encoded></item><item><title><![CDATA[Ansible: A Practical Guide to Configuration Management]]></title><description><![CDATA[Description
You should be able to identify the following points at the ending of this technical article:

Describe Infrastructure as Code.
Interpretation of configuration management and the Ansible tool.
Capable of working with Ansible to automate yo...]]></description><link>https://blog.yahya-abulhaj.dev/ansible-a-practical-guide-to-configuration-management</link><guid isPermaLink="true">https://blog.yahya-abulhaj.dev/ansible-a-practical-guide-to-configuration-management</guid><category><![CDATA[Devops]]></category><category><![CDATA[Developer]]></category><category><![CDATA[infrastructure]]></category><category><![CDATA[server]]></category><category><![CDATA[ansible]]></category><dc:creator><![CDATA[Yahya Abulhaj]]></dc:creator><pubDate>Wed, 21 Dec 2022 11:02:40 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1671620501534/kcHIAcFIA.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-description">Description</h2>
<p>You should be able to identify the following points at the ending of this technical article:</p>
<ul>
<li>Describe Infrastructure as Code.</li>
<li>Interpretation of configuration management and the Ansible tool.</li>
<li>Capable of working with Ansible to automate your infrastructure, including installation, playbook creation, inventory management, and execution.</li>
</ul>
<h1 id="heading-tracing-the-roots">Tracing the Roots</h1>
<p>The concept of configuration management can be traced back to the 1950s, when it was used in the aerospace industry to manage the complex systems and components used in aircraft and missiles. Configuration management principles were further developed and applied in the software industry in the 1960s, as a way to manage the various components and dependencies of software systems.</p>
<p>This practice became more widely recognized as a critical practice in IT in the 1990s, and a number of commercial configuration management tools and services were developed. </p>
<p>Last but not least, the emergence of agile software development and DevOps practices in the 2000s led to a shift towards more automated and continuous approaches to configuration management, including the adoption of tools and practices of infrastructure as code (IaC).</p>
<h1 id="heading-decoding-infrastructure-as-code">Decoding Infrastructure as code</h1>
<p>Infrastructure as code is a practice that allows you to <strong>provision¹</strong> and <strong>manage²</strong> your infrastructure using code and automated tools, rather than manual processes. It enables you to define and manage your infrastructure in a version-controlled, repeatable, and predictable way.</p>
<p>There are two main aspects of IaC:</p>
<p>1- <strong>Infrastructure provisioning:</strong> The process of setting up and configuring the various hardware and software components that comprise your infrastructure. This includes tasks like initializing your cloud resources or deploying servers, networking equipment, and storage devices as well as installing and configuring operating systems, applications, and services.</p>
<p>You can automate the provisioning of your infrastructure using code and tools such as </p>
<ul>
<li>Terraform, operates in Multi-Cloud Environments</li>
<li>CloudFormation, IaC AWS</li>
<li>ARM Templates, IaC Microsoft</li>
</ul>
<p>This allows you to define the desired state of your infrastructure in code, and then use the above automation tools to provision the infrastructure according to the initial specification.</p>
<p>2- <strong>Configuration Management:</strong> the process of maintaining the configuration of your infrastructure and applications over time. This includes tasks such as applying software updates, modifying system and application configurations, and ensuring that the infrastructure is running smoothly and efficiently.</p>
<p>You can automate the configuration management of your infrastructure using code and tools such as</p>
<ul>
<li>Ansible</li>
<li>Chef </li>
<li>Puppet</li>
</ul>
<p>This enables you to define infrastructure and applications in code and then use the above automated tools to keep track of ur infrastructure and ensure that the app is configured as required.</p>
<p>Since we've already covered Terraform, today's article will go over the power of configuration management using one of the well-known, Ansible.</p>
<p>Let's start by asking the question below.</p>
<h2 id="heading-why-configuration-management-matters">Why Configuration Management Matters ?</h2>
<ul>
<li><p>Correct configuration management is required for any infrastructure to run smoothly. It contributes to the infrastructure's optimization for performance, availability, and security.</p>
</li>
<li><p>Proper configuration management lowers the risk of errors and downtime by allowing you to identify and resolve issues before they become major issues. This can help to improve the infrastructure's reliability and availability, as well as the overall customer experience.</p>
</li>
</ul>
<p><strong>Furthermore,</strong> configuration management is critical for adhering to industry standards and regulations. Systems that are properly configured can help to ensure that the infrastructure meets the necessary requirements for data protection, privacy, and other regulatory compliance issues.</p>
<h1 id="heading-ansible-configuration-management">Ansible Configuration Management</h1>
<p>Automation and configuration management are critical components of modern infrastructure and operations.</p>
<p>Ansible is an open-source configuration management and automation tool that allows you to automate infrastructure and application deployment, configuration, and management. It defines the desired state of your infrastructure and applications using simple, human-readable YAML files, and then uses those files to automatically configure and manage the systems and services.</p>
<p>Ansible is popular because it is simple to use, has a large and active user and developer community, and is highly flexible and extensible. It can be used to automate a wide range of tasks, including software installation and configuration, system and application configuration management, and application and service deployment.</p>
<h2 id="heading-gains-andamp-perks">Gains &amp; Perks</h2>
<p>Ansible has several advantages for management configuration and automation, which is why I chose it as our primary tool for this technical article.</p>
<ul>
<li><p><strong>Simplicity:</strong> Ansible is easy to use and requires little to no coding knowledge. Its simple, human-readable <strong>YAML syntax</strong> makes it easy to understand and work with, even for those with little experience in programming or automation.</p>
</li>
<li><p><strong>Flexibility:</strong> Ansible is highly flexible and can be used to automate a wide range of tasks across a variety of environments, including cloud, virtualization, and on-premises systems.</p>
</li>
<li><p><strong>Scalability:</strong> Ansible can be used to manage large, complex infrastructure environments with ease. It has support for parallel execution of tasks, which allows you to scale your automation efforts to meet the needs of your infrastructure.</p>
</li>
<li><p><strong>Strong Community:</strong> Ansible has a large and active community of users and developers, which means there is a wealth of knowledge and resources available to help you get started and troubleshoot any issues you may encounter.</p>
</li>
<li><p><strong>Extensibility:</strong> Ansible is highly extensible and can be integrated with a wide range of tools and services, such as cloud platforms, monitoring systems, and ticketing systems. This allows you to customize your automation efforts to meet the specific needs of your organization.</p>
</li>
</ul>
<h2 id="heading-mechanism">Mechanism</h2>
<p>Ansible communicates with your infrastructure and applications via secure SSH connections and API calls. It employs a simple, push-based architecture, which means that the desired configurations and updates are pushed to the target systems and services rather than pulled.</p>
<p>Ansible defines the desired state of the infrastructure and applications using a series of YAML files known as playbooks. The ansible-playbook command is used to execute these playbooks on the target systems, and the changes are applied automatically.</p>
<p>Ansible also includes a number of pre-built modules that can be used to automate a wide range of tasks, including installing and configuring software, managing system and application configurations, and deploying applications and services. These modules can be used to create custom playbooks that are tailored to your specific needs.</p>
<h1 id="heading-a-complete-walkthrough-with-ansible">A Complete Walkthrough with Ansible</h1>
<p>Ansible is a configuration management tool that allows you to automate infrastructure and application deployment and configuration. It functions by connecting to your servers and running tasks on them.</p>
<p>Let's go over some of the key components you should be aware of before you begin using the tool.</p>
<p>1- <strong>Inventory:</strong> This is a list of servers that you want to manage with Ansible. It can be a simple text file or a more complex dynamic inventory.</p>
<p>2- <strong>Playbooks:</strong> These are files that define the tasks that you want ansible to execute on your servers. They are written in YAML and are organized into a series of plays, each of which defines a set of tasks to be executed on a specific group of servers.</p>
<p>3- <strong>Modules:</strong> These are small programs that are used by ansible to perform specific tasks on your servers. Ansible comes with a large number of built-in modules that cover a wide range of common tasks, such as installing packages, copying files, and creating users.</p>
<h2 id="heading-the-execution-with-ansible">The Execution with Ansible</h2>
<p>To get started with ansible, you will need to have the following components in place:</p>
<ul>
<li><p>A Linux system with ansible installed. You can install ansible on most major Linux distributions using the package manager. Alternatively, you can install it from source or use a standalone installer.</p>
</li>
<li><p>A list of servers that you want to manage with ansible. This can be a simple text file with a list of hostnames or IP addresses, or a more complex dynamic inventory that retrieves information about your servers from a remote source.</p>
</li>
<li><p>A user account with SSH access to the servers in your inventory. Ansible uses SSH to connect to and manage your servers, so you will need a user account with the necessary permissions.</p>
</li>
</ul>
<p>Once these components are in place, you can proceed automating your infrastructure and applications.</p>
<p>0- Install Ansible <br />
1- Create an inventory file<br />
2- Write a playbook<br />
3- Execute the playbook</p>
<h3 id="heading-installation-on-different-os">Installation on different OS</h3>
<p>Depending on your operating system, I will try to include the necessary requirements. The following are the steps for installing Ansible on various operating systems</p>
<h4 id="heading-debianubuntu">Debian/Ubuntu</h4>
<p>1- Update the package manager index:</p>
<pre><code>sudo apt update
</code></pre><p>2- Install the software-properties-common package, which includes the add-apt-repository command:</p>
<pre><code>sudo apt install software-properties-common
</code></pre><p>3- Add the Ansible repository to your system:</p>
<pre><code>sudo add-apt-repository ppa:ansible/ansible
</code></pre><p>4- Update the package manager index again:</p>
<pre><code>sudo apt update
</code></pre><p>5- Install Ansible:</p>
<pre><code>sudo apt install ansible
</code></pre><h4 id="heading-centosrhel">CentOS/RHEL</h4>
<p>Install the EPEL (Extra Packages for Enterprise Linux) repository, which includes Ansible:</p>
<pre><code>sudo yum install epel-release
</code></pre><p>Install Ansible:</p>
<pre><code>sudo yum install ansible
</code></pre><h4 id="heading-fedora">Fedora</h4>
<p>Install the EPEL repository, which includes Ansible:</p>
<pre><code>sudo dnf install epel-release
</code></pre><p>Install Ansible:</p>
<pre><code>sudo dnf install ansible
</code></pre><h4 id="heading-macos">MacOS</h4>
<ul>
<li>To install Ansible on macOS, you can use the pip package manager, which is included with Python. </li>
</ul>
<pre><code>pip3 install ansible
</code></pre><ul>
<li>If you prefer to install Ansible using the brew package manager, you can do so by running the following command:</li>
</ul>
<pre><code>brew install ansible
</code></pre><p>This will install the latest version of Ansible available in the Homebrew package repository.</p>
<ul>
<li>You can also install Ansible from the official Ansible release page on GitHub. To do this, download the desired release as a tar archive, extract the archive, and then run the <code>setup.py</code> script to install Ansible.</li>
</ul>
<pre><code class="lang-py">tar -xf ansible-X.Y.Z.tar.gz
cd ansible-X.Y.Z
python setup.py install
</code></pre>
<h4 id="heading-windows">Windows</h4>
<ul>
<li><p>Install the Windows Subsystem for Linux (WSL) by following the instructions  <a target="_blank" href="https://docs.microsoft.com/en-us/windows/wsl/install-win10">at</a>.</p>
</li>
<li><p>Once WSL is installed, follow the instructions for your desired Linux distribution (e.g. Debian/Ubuntu, CentOS/RHEL, Fedora) to install Ansible that are mentioned above.</p>
</li>
</ul>
<h3 id="heading-automate-your-infrastructure">Automate Your Infrastructure</h3>
<p>Once Installed, action time, you first create an inventory of your servers and write one or more playbooks to define the tasks that you want to run. You can then use the ansible command-line tool to execute the playbooks and apply the desired configuration to your servers.</p>
<p>Let's start by defining our servers. An inventory file is a plain text file that specifies the hosts that Ansible will manage. Here is an example of an inventory file:</p>
<pre><code># Declare the group <span class="hljs-keyword">of</span> servers that we want to manage
[webservers]
server1.example.com
server2.example.com

# Declare another group <span class="hljs-keyword">of</span> servers
[database]
db1.example.com
db2.example.com

# Declare a group <span class="hljs-keyword">of</span> servers and specify variables <span class="hljs-keyword">for</span> each server
[appserver:vars]
app1.example.com ansible_ssh_user=appuser ansible_ssh_private_key_file=<span class="hljs-regexp">/path/</span>to/private/key
app2.example.com ansible_ssh_user=appuser ansible_ssh_private_key_file=<span class="hljs-regexp">/path/</span>to/private/key
</code></pre><p>In this example, there are three groups of servers: <code>webservers</code>, <code>databasev, and</code>appserver` .<br />Each group is specified by a name in square brackets (e.g. [webservers] ). The servers in each group are listed on separate lines.</p>
<p>The <code>appserver</code> group also includes variables that will be used when connecting to the servers in that group. In this case, the <code>ansible_ssh_user</code> and <code>ansible_ssh_private_key_file</code> variables specify the user to log in as and the path to the private key file, respectively.</p>
<p>This is just a basic example, and an inventory file can be much more complex, depending on your needs. For example, you can specify variables for groups or individual servers, nest groups within groups, and use patterns to define groups of servers. You can also specify multiple inventory files and combine them using the <code>-i</code> option when running Ansible commands.</p>
<p>Now <strong>playbook time</strong>, to install the Apache web server on a group of servers, you could create a playbook like this:</p>
<pre><code class="lang-YAML"><span class="hljs-bullet">-</span> <span class="hljs-attr">hosts:</span> <span class="hljs-string">webservers</span>
  <span class="hljs-attr">tasks:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Install</span> <span class="hljs-string">Apache</span>
    <span class="hljs-attr">yum:</span>
      <span class="hljs-attr">name:</span> <span class="hljs-string">httpd</span>
      <span class="hljs-attr">state:</span> <span class="hljs-string">present</span>
</code></pre>
<p>This playbook consists of a single play that targets the inventory's "webservers" group. The play has a single task that installs the Apache web server package using the yum module.</p>
<p>To run this playbook, you would use the ansible-playbook command, like this:</p>
<pre><code>ansible-playbook -i inventory.txt webserver.yml
</code></pre><p>This would run the playbook on each of the servers in the inventory file, installing Apache on each of them. Good job!</p>
<p>Continue learning Ansible and mastering playbooks with <strong>Spacelift</strong>'s <a target="_blank" href="https://spacelift.io/blog/ansible-tutorial">tutorial</a>!</p>
<p>Ansible can also be used to manage users, install software, and deploy applications, among other things. More information and examples can be found in the Ansible <a target="_blank" href="https://docs.ansible.com/">documentation</a> </p>
<p>I suggest the <strong>Red Hat</strong> documentation as well. RedHat provides support and training for ansible, and offers a range of ansible-based products and services that are designed to help organizations automate and manage their infrastructure and applications. These include the Red Hat Ansible Tower platform, which provides a graphical interface and additional tools for managing and orchestrating ansible tasks.</p>
<p>You may like <a target="_blank" href="https://ansible.ai/">this!</a></p>
<h1 id="heading-the-takeaway">The Takeaway</h1>
<p>That's it, guys! We covered a lot of great topics, starting with the infrastructure as code and focusing on configuration management, as well as playing with one tool, Ansible, of many!</p>
<p>Today, configuration management is a key aspect of DevOps, as it helps organizations to maintain consistent and predictable environments for their applications. By automating the configuration of systems and applications, organizations can ensure that their environments are consistently configured, reducing the risk of errors and downtime.</p>
<p>Further, It is expected that automation tools like Ansible will continue to be important in the field of DevOps. As organizations increasingly adopt cloud-native technologies and agile methodologies for software development, there will be an increased need for automation and consistency in their environments. <strong>Adopt DevOps.</strong></p>
]]></content:encoded></item><item><title><![CDATA[Unleashing the Power of Cloud-Native Technologies]]></title><description><![CDATA[Overview
Cloud native is a term that refers to the design and development of applications and services that are optimized for deployment in cloud computing environments. These applications and services are built using cloud-native technologies and pr...]]></description><link>https://blog.yahya-abulhaj.dev/unleashing-the-power-of-cloud-native-technologies</link><guid isPermaLink="true">https://blog.yahya-abulhaj.dev/unleashing-the-power-of-cloud-native-technologies</guid><category><![CDATA[Cloud]]></category><category><![CDATA[Future]]></category><category><![CDATA[Developer]]></category><category><![CDATA[software development]]></category><category><![CDATA[General Programming]]></category><dc:creator><![CDATA[Yahya Abulhaj]]></dc:creator><pubDate>Tue, 20 Dec 2022 09:18:44 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1671527847921/kAd0JzReQ.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-overview">Overview</h2>
<p>Cloud native is a term that refers to the design and development of applications and services that are optimized for deployment in cloud computing environments. These applications and services are built using cloud-native technologies and practices, which focus on leveraging the capabilities of the cloud to deliver enhanced scalability, reliability, and performance.</p>
<h1 id="heading-the-evolution-of-cloud-native">The Evolution Of Cloud-Native</h1>
<p>The term "cloud native" originated in the early days of cloud computing, when businesses began to recognize the potential benefits of deploying applications and services in the cloud. Early cloud computing adopters focused on using the cloud to offload specific types of workloads, such as batch processing and storage, and to benefit from the cloud infrastructure.</p>
<p>As the popularity of cloud computing grew, it became clear that there were additional gains to be made from designing and developing applications specifically for cloud deployment. As a result, cloud-native architectures emerged.</p>
<h2 id="heading-cloud-native-computing-foundation">Cloud Native Computing Foundation</h2>
<p>It's also good enough to justify mentioning Cloud Native Computing Foundation, the nonprofit organization that was created to advance the development and adoption of cloud-native technologies. CNCF is home to several open-source projects aimed at enabling cloud-native practices, such as <strong>Kubernetes</strong>, <strong>Prometheus</strong>, and <strong>Envoy</strong>.</p>
<p>CNCF promotes the use of cloud-native technologies and practices through a variety of initiatives such as education and training programs, industry events and conferences, and community building initiatives. CNCF is also in charge of the creation and upkeep of the Cloud Native Landscape, a comprehensive guide to the cloud-native ecosystem.</p>
<h1 id="heading-attributes-of-cloud-native-applications">Attributes Of Cloud-Native Applications</h1>
<p>Microservices, containerization, and continuous integration and delivery (CI/CD) practices distinguish cloud-native architectures.  Let's discuss each below.</p>
<h2 id="heading-cloud-native-andamp-services">Cloud-Native &amp; µServices</h2>
<p>Cloud-native applications uses  the microservices architecture. This involves breaking down a large, monolithic application into smaller, independent services that can be developed, deployed, and managed separately. Each service is designed to perform a specific function and communicates with other services through well-defined APIs. This modular approach allows for greater flexibility and scalability, as individual services can be scaled up or down independently based on demand. It also allows for faster development and deployment cycles, as changes can be made to individual services without the need to rebuild and redeploy the entire application.</p>
<h2 id="heading-cloud-native-andamp-containers">Cloud-Native &amp; Containers</h2>
<p>Another key aspect of cloud-native applications is their use of containerization. This involves packaging an application and its dependencies into a container that can be easily deployed and run in any cloud environment. Containers provide a number of benefits, including improved portability, ease of deployment, and resource efficiency. They allow developers to create self-contained environments that include everything an application needs to run, including code, libraries, and runtime environments. This makes it easier to deploy and run applications in different environments, and ensures that applications will behave consistently regardless of where they are deployed.</p>
<h2 id="heading-cloud-native-andamp-devops">Cloud-Native &amp; DevOps</h2>
<p>Continuous integration and delivery (CI/CD) practices are also used in cloud-native applications. This entails using a variety of tools and processes to automatically build, test, and deploy code changes as they are made. CI/CD enables more frequent and faster updates, as well as a more agile development process. It also contributes to the assurance that code changes are tested and deployed in a controlled and reliable manner, lowering the risk of errors and downtime.</p>
<h2 id="heading-the-advantages-of-cloud-native-technologies">The Advantages of Cloud-Native Technologies</h2>
<p>Overall, the adoption of cloud-native approaches offers a number of benefits for organizations:</p>
<p>1- <strong>Enhanced scalability:</strong> Cloud-native architectures allow applications to be easily scaled up or down based on demand, leveraging the capabilities of the cloud to deliver the required level of performance.</p>
<p>2- <strong>Improved reliability:</strong> Cloud-native are designed to be highly available and resilient, using techniques such as redundancy and self-healing to ensure that applications can continue to operate even in the face of failures.</p>
<p>3- <strong>Faster development and deployment cycles:</strong> The use of microservices and continuous integration and delivery (CI/CD) practices allows for faster development and deployment of code changes, enabling organizations to more quickly respond to changing business needs.</p>
<p>4- <strong>Greater flexibility:</strong> The use of microservices and containerization allows for greater flexibility in how applications are developed and deployed, making it easier to change and adapt applications over time.</p>
<p>5- <strong>Improved portability:</strong> <strong>Containers</strong> make it easier to deploy and run applications in different environments, improving portability and reducing the risk of vendor lock-in.</p>
<p>6- <strong>Resource efficiency:</strong> Containers are resource efficient, allowing organizations to make more efficient use of their compute and storage resources.</p>
<p>7- <strong>Reduced costs:</strong> Cloud-native architectures can help organizations reduce costs by leveraging the pay-as-you-go pricing model of cloud services and by making more efficient use of resources.</p>
<p>8- <strong>Improved security:</strong> Cloud-native architectures can help improve security by using techniques such as isolation and least privilege to reduce the attack surface and minimize the risk of security breaches.</p>
<h1 id="heading-the-cloud-native-mindset">The Cloud-Native Mindset</h1>
<p>Cloud-native approaches, on the other hand, necessitate a mindset shift as well as the adoption of new technologies and practices. This is a significant undertaking, and organizations thinking about shifting to cloud-native approaches should carefully consider the potential benefits and challenges before making a decision.</p>
<p>This include: </p>
<ul>
<li>Consider the skills and expertise of the development team.</li>
<li>Training and upskilling current employees.</li>
<li>Adopting new technologies and tools.</li>
<li>Rethinking traditional software development processes.</li>
<li>Evaluating the potential impact on existing IT infrastructure and processes.</li>
</ul>
<p>To successfully adopt a cloud-native mindset, organizations need to be willing to embrace change and to be open to new approaches to software development. </p>
<h1 id="heading-bringing-it-all-together">Bringing it All Together</h1>
<p>Cloud-native approaches offer a range of benefits for organizations looking to optimize their applications and services for deployment in the cloud. While the adoption of these approaches can involve significant challenges, the benefits they offer can make them well worth the effort for organizations looking to stay competitive in today's fast-paced business environment.</p>
<p>In conclusion, today, Cloud Native is a well-established approach to software development, with a growing number of organizations adopting its technologies and practices. The adoption of cloud-native approaches is driven by the need to quickly adapt to changing business needs and to take advantage of the capabilities offered by cloud computing environments. As a result, cloud native is increasingly becoming the de facto standard for building and deploying applications in the cloud.</p>
<h4 id="heading-related">Related</h4>
<ul>
<li><a target="_blank" href="https://blog.yahya-abulhaj.dev/lets-explain-a-pipeline">Let's Explain a Pipeline</a></li>
<li><a target="_blank" href="https://blog.yahya-abulhaj.dev/yaml-aint-markup-language">YAML Ain’t Markup Language</a></li>
<li><a target="_blank" href="https://blog.yahya-abulhaj.dev/kubernetes-the-containers-orchestration-engine">KUBERNETES | The Containers Orchestration Engine</a></li>
<li><a target="_blank" href="https://blog.yahya-abulhaj.dev/helm-the-essential-package-manager-for-kubernetes">HELM | The Essential Package Manager for Kubernetes</a></li>
</ul>
]]></content:encoded></item><item><title><![CDATA[HELM |  The Essential Package Manager for Kubernetes]]></title><description><![CDATA[A Brief Timeline
If you're working with Kubernetes, you know that it can be challenging to manage and deploy applications on your cluster. Helm is a package manager for Kubernetes that makes it easy to manage and deploy complex applications.

But, i ...]]></description><link>https://blog.yahya-abulhaj.dev/helm-the-essential-package-manager-for-kubernetes</link><guid isPermaLink="true">https://blog.yahya-abulhaj.dev/helm-the-essential-package-manager-for-kubernetes</guid><category><![CDATA[Helm]]></category><category><![CDATA[Devops]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[Docker]]></category><category><![CDATA[values]]></category><dc:creator><![CDATA[Yahya Abulhaj]]></dc:creator><pubDate>Mon, 19 Dec 2022 12:22:08 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1671451609916/dU1mJ3eI1.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-a-brief-timeline">A Brief Timeline</h1>
<p>If you're working with Kubernetes, you know that it can be challenging to manage and deploy applications on your cluster. <strong>Helm</strong> is a package manager for Kubernetes that makes it easy to manage and deploy complex applications.</p>
<ul>
<li>But, i don't know Kubernetes? <a target="_blank" href="https://blog.yahya-abulhaj.dev/kubernetes-the-containers-orchestration-engine">Break</a></li>
</ul>
<p>Helm was originally developed by Deis, a company that provided a platform for deploying and managing applications on Kubernetes. The first version of Helm was released in 2015, and it quickly gained popularity as a tool for managing applications on Kubernetes clusters.</p>
<p>In 2017, Helm was donated to the <strong>Cloud Native Computing Foundation (CNCF)</strong> and became an incubator project. Since then, Helm has continued to evolve and improve, with the release of Helm 2 in 2017 and Helm 3 in 2020.</p>
<h2 id="heading-managing-dependencies-in-software-development">Managing Dependencies in Software Development</h2>
<p>Package managers are important tool in the software development process. They automate the process of installing, upgrading, and managing the dependencies needed by an application. This is particularly useful for large and complex projects, as it ensures that the correct versions of dependencies are installed and available to the application at runtime. </p>
<p>Some common examples of package managers include <strong>npm</strong>, which is a package manager for JavaScript that is commonly used to manage the dependencies of Node.js applications,  <strong>pip</strong> , which is a package manager for Python that is used to manage the dependencies of Python applications and back to <strong>apt</strong> and <strong>yum</strong> for Linux.</p>
<h2 id="heading-understanding-helm">Understanding Helm</h2>
<p>Helm was designed to be a package manager for <strong>Kubernetes</strong>, similar to package managers like <strong>apt</strong> and <strong>yum</strong> in the Linux world. It allows you to install and manage applications on your Kubernetes cluster using a common set of commands, and it provides versioning and rollback capabilities to help you manage the lifecycle of your applications.</p>
<p>Helm is an open-source tool that helps you manage and deploy applications on your Kubernetes cluster. It allows you to define, install, and upgrade complex Kubernetes applications, known as Helm charts. A Helm chart is a collection of files that describe how to deploy an application on Kubernetes. It includes all the necessary Kubernetes resources to run the application, such as Deployments, Services, and Ingresses. Helm charts are written in YAML and are organized into a directory structure that includes a Chart.yaml file and templates for each of the Kubernetes resources.</p>
<h2 id="heading-benefits-of-using-helm">Benefits of Using Helm</h2>
<p>There are several advantages to using Helm, and I'll list a few of them below.</p>
<p>1- <strong>Define your application as code:</strong> By using Helm charts, you can define your application as code, making it easier to version control and collaborate with your team.</p>
<p>2- <strong>Consistent deployments:</strong> Helm makes it easy to deploy applications consistently across different environments, such as development, staging, and production.</p>
<p>3- <strong>Streamlined updates:</strong> With Helm, you can easily upgrade your applications by updating the chart's version and applying any necessary changes.</p>
<p>4- <strong>Community support:</strong> Helm is an active open-source project with a large community of contributors and users.</p>
<h1 id="heading-mechanism-to-get-you-started">Mechanism to get you started</h1>
<p>To use Helm, you first need to install it on your local machine and on your Kubernetes cluster. Once installed, you can search for and install charts from the official Helm repository, or you can create and publish your own charts.</p>
<p>To create your own chart, you can use the <code>helm create</code> command, which will generate the basic directory structure and files for you. Then, you can edit the <code>Chart.yaml</code> file to specify the chart's name, version, and dependencies. In the templates directory, you can define the Kubernetes resources that make up your application.</p>
<p>Once your chart is complete, you can use the <code>helm package</code> command to create a package, or "tarball," of your chart that can be easily shared and deployed. You can then use the<code>helm install</code> command to deploy your chart to your Kubernetes cluster.</p>
<p>To upgrade an existing installation, you can use the <code>helm upgrade</code> command, which allows you to update the chart's version and apply any necessary changes to your Kubernetes resources.</p>
<h2 id="heading-installation">Installation</h2>
<p>To install Helm, you will need to have access to a Kubernetes cluster and have the <code>kubectl</code> command-line tool installed on your local machine.</p>
<p>1- First, download the Helm binary from the official website: https://helm.sh/docs/intro/install/</p>
<p>2- Extract the Helm binary and move it to a directory in your PATH, such as </p>
<pre><code>/usr/local/bin/
</code></pre><pre><code>tar xvfz helm-v3<span class="hljs-number">.4</span><span class="hljs-number">.1</span>-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm
</code></pre><p>3- Initialize Helm by installing Tiller, the server-side component of Helm, on your Kubernetes cluster:</p>
<pre><code>helm init
</code></pre><p>4- Wait for Tiller to be deployed and ready by running the following command:</p>
<pre><code>kubectl --namespace kube-system wait deploy/tiller-deploy --<span class="hljs-keyword">for</span>=condition=available
</code></pre><p>5- Verify that Helm is installed and working correctly by listing the available charts:</p>
<pre><code>helm search
</code></pre><p>That's it! You have now installed Helm and are ready to start using it to manage and deploy applications on your Kubernetes cluster.</p>
<h2 id="heading-helm-chart-the-dive">Helm Chart, The Dive</h2>
<p>Helm charts are a way to package and deploy applications to a Kubernetes cluster. They contain all the information needed to create and manage the desired application, including the configuration and dependencies for the application, as well as the Kubernetes resources required to run it.</p>
<p>Charts are written in a declarative language using  the great YAML, which allows you to specify the desired state of your application. This means that you can describe the desired state of your application in a chart, and Helm will take care of creating and updating the necessary Kubernetes resources to achieve that state.</p>
<p>Charts can be customized using values, which allow you to tailor the resources in the chart to your specific needs. For example, you might want to customize the number of replicas for a Deployment, or the port that a Service exposes. You can specify these values in a separate file or pass them in at the command line when you install or upgrade the chart.</p>
<p>Here is an example of a simple Helm chart for deploying a basic web application on Kubernetes:</p>
<pre><code class="lang-YAML"><span class="hljs-comment"># Chart.yaml</span>

<span class="hljs-attr">name:</span> <span class="hljs-string">my-web-app</span>
<span class="hljs-attr">version:</span> <span class="hljs-number">0.1</span><span class="hljs-number">.0</span>
<span class="hljs-attr">description:</span> <span class="hljs-string">A</span> <span class="hljs-string">simple</span> <span class="hljs-string">web</span> <span class="hljs-string">application</span>

<span class="hljs-comment"># templates/deployment.yaml</span>

<span class="hljs-attr">apiVersion:</span> <span class="hljs-string">apps/v1</span>
<span class="hljs-attr">kind:</span> <span class="hljs-string">Deployment</span>
<span class="hljs-attr">metadata:</span>
  <span class="hljs-attr">name:</span> <span class="hljs-string">my-web-app</span>
<span class="hljs-attr">spec:</span>
  <span class="hljs-attr">replicas:</span> <span class="hljs-number">1</span>
  <span class="hljs-attr">selector:</span>
    <span class="hljs-attr">matchLabels:</span>
      <span class="hljs-attr">app:</span> <span class="hljs-string">my-web-app</span>
  <span class="hljs-attr">template:</span>
    <span class="hljs-attr">metadata:</span>
      <span class="hljs-attr">labels:</span>
        <span class="hljs-attr">app:</span> <span class="hljs-string">my-web-app</span>
    <span class="hljs-attr">spec:</span>
      <span class="hljs-attr">containers:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">my-web-app</span>
        <span class="hljs-attr">image:</span> <span class="hljs-string">nginx:latest</span>
        <span class="hljs-attr">ports:</span>
        <span class="hljs-bullet">-</span> <span class="hljs-attr">containerPort:</span> <span class="hljs-number">80</span>

<span class="hljs-comment"># templates/service.yaml</span>

<span class="hljs-attr">apiVersion:</span> <span class="hljs-string">v1</span>
<span class="hljs-attr">kind:</span> <span class="hljs-string">Service</span>
<span class="hljs-attr">metadata:</span>
  <span class="hljs-attr">name:</span> <span class="hljs-string">my-web-app</span>
<span class="hljs-attr">spec:</span>
  <span class="hljs-attr">type:</span> <span class="hljs-string">LoadBalancer</span>
  <span class="hljs-attr">ports:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-attr">port:</span> <span class="hljs-number">80</span>
    <span class="hljs-attr">protocol:</span> <span class="hljs-string">TCP</span>
    <span class="hljs-attr">targetPort:</span> <span class="hljs-number">80</span>
  <span class="hljs-attr">selector:</span>
    <span class="hljs-attr">app:</span> <span class="hljs-string">my-web-app</span>
</code></pre>
<p>This Helm chart defines a Deployment and a Service for a basic web application running on NGINX. The Deployment manages a single replica of the NGINX container, and the Service exposes it to the outside world via a LoadBalancer.</p>
<p>To use this chart, you can package it into a tarball and install it on your Kubernetes cluster using the <code>helm install</code> command:</p>
<pre><code>helm package my-web-app
helm install my-web-app<span class="hljs-number">-0.1</span><span class="hljs-number">.0</span>.tgz
</code></pre><p>You can then check the status of your Deployment and Service using the <code>kubectl</code> command-line tool:</p>
<pre><code>kubectl get deployment my-web-app
kubectl get service my-web-app
</code></pre><p>To upgrade your application, you can simply package and install a new version of the chart using the <code>helm upgrade</code> command:</p>
<pre><code>helm package my-web-app
helm upgrade my-web-app my-web-app<span class="hljs-number">-0.2</span><span class="hljs-number">.0</span>.tgz
</code></pre><p>That's a basic example of how to use a Helm chart to deploy an application on Kubernetes. </p>
<p>Winding this up, Helm charts are a convenient and standardized way to manage and deploy applications to Kubernetes. They allow you to define your application in a declarative way, and use <strong>Helm to handle the details of creating and managing the necessary Kubernetes resources</strong>.</p>
<p>For more information, you can refer to the amazing Helm documentation <a target="_blank" href="https://helm.sh/docs/">here</a></p>
<h1 id="heading-to-wrap-up">To wrap up</h1>
<p>On-DevOps, Helm can be used as a tool to automate the deployment and management of applications on a Kubernetes cluster. With Helm charts to define the desired state of an application, developers can version and manage the application in a reliable and reproducible way, and use Helm to automate the process of deploying and updating the application on the cluster. Moreover, this help organizations to speed up their software delivery process and improve the reliability of their applications.</p>
<p>In summary, Helm is a powerful tool for managing and deploying applications on Kubernetes. It makes it easy to define your application as code, and to deploy and upgrade it consistently across different environments. If you're not already using Helm, i highly recommend giving it a try!</p>
]]></content:encoded></item><item><title><![CDATA[YAML Ain’t Markup Language]]></title><description><![CDATA[History
YAML, which stands for "YAML Ain't Markup Language," is a data serialization language that was first released in 2001. It was developed by Clark Evans and Ingy döt Net, with the goal of creating a human-readable language that could be used fo...]]></description><link>https://blog.yahya-abulhaj.dev/yaml-aint-markup-language</link><guid isPermaLink="true">https://blog.yahya-abulhaj.dev/yaml-aint-markup-language</guid><category><![CDATA[YAML]]></category><category><![CDATA[Developer]]></category><category><![CDATA[Devops]]></category><category><![CDATA[Pipeline]]></category><category><![CDATA[Cloud]]></category><dc:creator><![CDATA[Yahya Abulhaj]]></dc:creator><pubDate>Sun, 18 Dec 2022 10:39:35 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1671359968348/TdCQ814Ux.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-history">History</h1>
<p>YAML, which stands for "YAML Ain't Markup Language," is a data serialization language that was first released in 2001. It was developed by Clark Evans and Ingy döt Net, with the goal of creating a human-readable language that could be used for storing and exchanging data.</p>
<p>Since its inception, YAML has become a popular choice for storing configuration files and data for a wide range of applications. Its simple syntax and ability to handle a variety of data types make it easy to read and write, and it has become a common alternative to other data serialization languages such as JSON and XML.</p>
<p>YAML has undergone several revisions since its initial release, with the most recent version, YAML 1.2, being released in 2009. Today, it is used in a variety of applications, including cloud infrastructure, continuous integration and delivery tools, and configuration management systems.</p>
<h2 id="heading-advantages-of-using-yaml">Advantages of Using YAML</h2>
<p>One of the main benefits of YAML is its simplicity. It uses indentation to denote structure, making it easy for humans to read and write.</p>
<p>These are advantages i made for you to using YAML that you may want to know:</p>
<p>1- <strong>Flexible:</strong> YAML can handle a wide range of data types, including strings, integers, floats, and Booleans. This makes it suitable for storing a variety of data, including simple key-value pairs and more complex data structures.</p>
<p>2- <strong>Easy to parse:</strong> YAML is easy for computers to parse, making it efficient to use in applications. This is especially useful when working with large data sets or when you need to parse the data quickly.</p>
<p>3- <strong>Compatible with other languages:</strong> YAML is compatible with a wide range of programming languages, making it easy to use in a variety of applications.</p>
<h2 id="heading-basic-syntax">Basic Syntax</h2>
<p>YAML files consist of a series of key-value pairs, with the key on the left and the value on the right. Keys are separated from values by a colon, and multiple key-value pairs are separated by dashes.</p>
<p>Here is an example of a simple YAML file:</p>
<pre><code class="lang-YAML">
<span class="hljs-attr">name:</span> <span class="hljs-string">Yahya</span> 
<span class="hljs-attr">age:</span> <span class="hljs-number">21</span>
<span class="hljs-attr">location:</span> <span class="hljs-string">Cloud</span>
</code></pre>
<p>As you can see, the key-value pairs are easy to read and understand.</p>
<p>YAML also supports arrays and lists, which can be denoted using square brackets or by using the <code>-</code> character.</p>
<p>Here is an example of an array in YAML:</p>
<pre><code class="lang-YAML"><span class="hljs-attr">fruits:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">apple</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">orange</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">banana</span>
</code></pre>
<p>And here is an example of a list:</p>
<pre><code class="lang-YAML"><span class="hljs-attr">names:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">Yaya-V1</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">Yaya-V2</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">Yaya-V3</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">Yaya-Vn</span>
</code></pre>
<p>Both arrays and lists are useful for storing collections of data.</p>
<h2 id="heading-advanced-features">Advanced Features</h2>
<p>In addition to basic key-value pairs and arrays, YAML also supports more advanced features such as:</p>
<ul>
<li><p><strong>Anchors</strong>, which allow you to reuse values in your YAML file</p>
</li>
<li><p><strong>Tags</strong>, which allow you to specify the type of a value.</p>
</li>
<li><p><strong>Aliases</strong>, which allow you to create multiple references to the same node in your YAML file. This can be useful when you want to link multiple nodes together.</p>
</li>
</ul>
<p>These features can be useful for organizing and structuring your YAML data.</p>
<p>Here is an example of using anchors, tags and Aliases in YAML:</p>
<pre><code class="lang-YAML"><span class="hljs-meta">---</span>
<span class="hljs-comment"># This is an anchor</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">&amp;label</span> <span class="hljs-string">Color</span>

<span class="hljs-comment"># This is a reference to an anchor</span>
<span class="hljs-attr">colors:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-meta">*label</span>
    <span class="hljs-attr">value:</span> <span class="hljs-string">blue</span>
  <span class="hljs-bullet">-</span> <span class="hljs-meta">*label</span>
    <span class="hljs-attr">value:</span> <span class="hljs-string">green</span>
  <span class="hljs-bullet">-</span> <span class="hljs-meta">*label</span>
    <span class="hljs-attr">value:</span> <span class="hljs-string">red</span>

<span class="hljs-meta">---</span>
<span class="hljs-comment"># This is a tag</span>
<span class="hljs-attr">colors:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">&amp;color1</span> <span class="hljs-string">blue</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">&amp;color2</span> <span class="hljs-string">green</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">&amp;color3</span> <span class="hljs-string">red</span>


<span class="hljs-meta">---</span>
<span class="hljs-comment"># This is an alias</span>
<span class="hljs-string">&amp;label</span> <span class="hljs-string">Node</span>

<span class="hljs-comment"># This is a reference to an alias</span>
<span class="hljs-attr">nodes:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-meta">*label</span>
    <span class="hljs-attr">value:</span> <span class="hljs-string">Node</span> <span class="hljs-number">1</span>
  <span class="hljs-bullet">-</span> <span class="hljs-meta">*label</span>
    <span class="hljs-attr">value:</span> <span class="hljs-string">Node</span> <span class="hljs-number">2</span>
  <span class="hljs-bullet">-</span> <span class="hljs-meta">*label</span>
    <span class="hljs-attr">value:</span> <span class="hljs-string">Node</span> <span class="hljs-number">3</span>
</code></pre>
<p>The three above are advanced features of YAML that can be useful for organizing and structuring your data in a DevOps workflow. They allow you to reuse values, specify the type of a value, and link multiple nodes together, making it easier to manage and manipulate your data.</p>
<h1 id="heading-yaml-andamp-devops">YAML &amp; DevOps</h1>
<p>YAML is an essential tool for DevOps professionals. Its simplicity and flexibility make it a valuable tool for automating tasks and streamlining workflows.</p>
<p>YAML is also often used to define cloud infrastructure, such as virtual machines, load balancers, and storage. This allows for easy management and automation of cloud resources, which is an important aspect of the DevOps philosophy.</p>
<p>Here are some ways that YAML can be used in a DevOps workflow:</p>
<ul>
<li><p><strong>Configuration Management:</strong> YAML is often used to store configuration data for tools like Ansible, puppet, and chef. This allows for easy management of configuration files, and it makes it easy to automate tasks such as setting up new servers or deploying applications.</p>
</li>
<li><p><strong>Continuous Integration and Delivery:</strong> YAML is commonly used to define the steps in a continuous integration or delivery pipeline. For example, you might use YAML to define the steps for building, testing, and deploying an application. This allows for easy automation of the deployment process.</p>
</li>
<li><p><strong>Cloud Infrastructure:</strong> YAML is often used to define cloud infrastructure, such as virtual machines, load balancers, and storage. This allows for easy management and automation of cloud resources.</p>
</li>
<li><p><strong>Container Orchestration:</strong> YAML is commonly used to define the configuration of container orchestration tools like Kubernetes. This includes defining the container images to use, the number of replicas to run, and other configuration options.</p>
</li>
<li><p><strong>Continuous Monitoring:</strong> YAML is often used to define the configuration for continuous monitoring tools like Prometheus. This includes defining the metrics to collect, the alert thresholds, and other configuration options.</p>
</li>
<li><p><strong>Infrastructure as Code:</strong> YAML is commonly used in infrastructure as code tools like Terraform. These tools allow you to define your infrastructure using code, and YAML is often used as the configuration language.</p>
</li>
<li><p><strong>Log Management:</strong> YAML is sometimes used to define the configuration for log management tools like Logstash. This includes defining the logs to collect, the filters to apply, and other configuration options.</p>
</li>
</ul>
<p>YAML is a versatile tool that can be used in a wide range of DevOps scenarios to automate tasks, manage configuration, and streamline workflows. Let's try it out.</p>
<h2 id="heading-create-your-first-pipeline">Create Your First Pipeline</h2>
<p>Creating a DevOps pipeline in YAML involves defining the steps that need to be taken to build, test, and deploy your application. Here is an example of how to create a simple pipeline in YAML:</p>
<p>First, create a file called <code>pipeline.yml</code> and define the pipeline as follows:</p>
<pre><code class="lang-YAML"><span class="hljs-attr">name:</span> <span class="hljs-string">My</span> <span class="hljs-string">Pipeline</span>

<span class="hljs-comment"># Define the steps in the pipeline</span>
<span class="hljs-attr">steps:</span>
  <span class="hljs-comment"># The build step</span>
  <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Build</span>
    <span class="hljs-attr">image:</span> <span class="hljs-string">node:12</span>
    <span class="hljs-attr">commands:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">npm</span> <span class="hljs-string">install</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">npm</span> <span class="hljs-string">run</span> <span class="hljs-string">build</span>

  <span class="hljs-comment"># The test step</span>
  <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Test</span>
    <span class="hljs-attr">image:</span> <span class="hljs-string">node:12</span>
    <span class="hljs-attr">commands:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">npm</span> <span class="hljs-string">test</span>

  <span class="hljs-comment"># The deploy step</span>
  <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Deploy</span>
    <span class="hljs-attr">image:</span> <span class="hljs-string">ubuntu</span>
    <span class="hljs-attr">commands:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">ssh</span> <span class="hljs-string">user@server</span> <span class="hljs-string">"cd /path/to/app &amp;&amp; git pull &amp;&amp; npm install &amp;&amp; pm2 restart all"</span>
</code></pre>
<p>This pipeline has three steps: a <strong>build step</strong>, a <strong>test step</strong>, and a <strong>deploy step</strong>. The build step installs dependencies and runs the build script, the test step runs the test suite, and the deploy step pulls the latest code from the repository and deploys it to the server.</p>
<p>To run the pipeline, you will need a continuous integration or delivery tool that supports YAML pipelines. For example, you could use GitLab CI/CD, Azure DevOps, or GitHub Actions.</p>
<p>Once you have your pipeline defined in a <code>pipeline.yml</code> file and your continuous integration or delivery tool set up, you can trigger the pipeline by committing code changes to your repository. The tool will automatically run the pipeline and execute the steps defined in the <code>pipeline.yml</code> file.</p>
<h2 id="heading-yaml-andamp-docker">YAML &amp; Docker</h2>
<p>YAML is often used in conjunction with Docker, a containerization platform that allows you to package and deploy applications in a portable and lightweight format.</p>
<details> 
<summary>
Learn more about Docker:
</summary>

<a target="_blank" href="https://blog.yahya-abulhaj.dev/containers-docker-or-what-exactly-is-that"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1673453946443/e33ef135-f2eb-4474-b54a-ab13f2d2089d.jpeg" /></a>

</details>


<p>Here are a few ways that YAML is used with Docker:</p>
<p>1- <strong>Docker Compose:</strong> Docker Compose is a tool for defining and running multi-container Docker applications. You can use YAML to define the configuration for your Docker Compose application in a <code>docker-compose.yml</code> file. For example:</p>
<pre><code class="lang-bash">version: <span class="hljs-string">'3'</span>
services:
  web:
    build: .
    ports:
      - <span class="hljs-string">"3000:3000"</span>
  redis:
    image: redis:alpine
</code></pre>
<p>This <code>docker-compose.yml</code> file defines two services: a web service and a redis service. The web service is built from the current directory, and the redis service uses the redis image from Docker Hub.</p>
<p>2- <strong>Dockerfiles:</strong> Dockerfiles are text files that contain instructions for building a Docker image. You can use YAML to define the steps in a Dockerfile using the RUN directive. For example:</p>
<pre><code class="lang-bash">FROM node:12

<span class="hljs-comment"># Install dependencies</span>
COPY package.json .
RUN npm install

<span class="hljs-comment"># Build the app</span>
COPY . .
RUN npm run build

<span class="hljs-comment"># Run the app</span>
CMD [<span class="hljs-string">"npm"</span>, <span class="hljs-string">"start"</span>]
</code></pre>
<p>This Dockerfile defines the steps for building a Docker image for a Node.js application. It installs dependencies, builds the app, and then runs the app.</p>
<h2 id="heading-yaml-andamp-k8s">YAML &amp; K8S</h2>
<p>As mentioned in my previous blog, YAML is commonly used with Kubernetes, a container orchestration platform that allows you to deploy and manage containerized applications at scale.</p>
<details> 
<summary>
Learn more about Kubernetes:
</summary><br /><a target="_blank" href="https://blog.yahya-abulhaj.dev/kubernetes-the-containers-orchestration-engine"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1673453928963/6142ed90-047d-46d3-8f21-59d535e0f15a.jpeg" /></a>

</details>    

<p>Here are a 2 ways that YAML is used with Kubernetes:</p>
<p>1- <strong>Kubernetes Objects:</strong> Kubernetes objects are the core resources that make up a Kubernetes cluster. You can use YAML to define the configuration for these objects in a <code>.yml</code> file. For example:</p>
<pre><code class="lang-YAML"><span class="hljs-attr">apiVersion:</span> <span class="hljs-string">v1</span>
<span class="hljs-attr">kind:</span> <span class="hljs-string">Pod</span>
<span class="hljs-attr">metadata:</span>
  <span class="hljs-attr">name:</span> <span class="hljs-string">my-pod</span>
<span class="hljs-attr">spec:</span>
  <span class="hljs-attr">containers:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">my-container</span>
    <span class="hljs-attr">image:</span> <span class="hljs-string">nginx:1.15</span>
</code></pre>
<p>This <code>pod.yml</code> file defines a Kubernetes Pod object with a single container running the nginx image.</p>
<p>2- <strong>Deployment Descriptors:</strong> Deployment descriptors are used to specify the desired state of a Kubernetes deployment. You can use YAML to define the configuration for a deployment descriptor in a .yml file. For example:</p>
<pre><code class="lang-YAML"><span class="hljs-attr">apiVersion:</span> <span class="hljs-string">apps/v1</span>
<span class="hljs-attr">kind:</span> <span class="hljs-string">Deployment</span>
<span class="hljs-attr">metadata:</span>
  <span class="hljs-attr">name:</span> <span class="hljs-string">my-deployment</span>
<span class="hljs-attr">spec:</span>
  <span class="hljs-attr">replicas:</span> <span class="hljs-number">3</span>
  <span class="hljs-attr">selector:</span>
    <span class="hljs-attr">matchLabels:</span>
      <span class="hljs-attr">app:</span> <span class="hljs-string">my-app</span>
  <span class="hljs-attr">template:</span>
    <span class="hljs-attr">metadata:</span>
      <span class="hljs-attr">labels:</span>
        <span class="hljs-attr">app:</span> <span class="hljs-string">my-app</span>
    <span class="hljs-attr">spec:</span>
      <span class="hljs-attr">containers:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">my-container</span>
        <span class="hljs-attr">image:</span> <span class="hljs-string">nginx:1.15</span>
</code></pre>
<p>This <code>deployment.yml</code> file defines a Kubernetes Deployment object with three replicas of the nginx image.</p>
<h2 id="heading-yaml-andamp-ansible">YAML &amp; Ansible</h2>
<p>YAML is also used in conjunction with Ansible, a configuration management and automation tool that allows you to deploy and manage infrastructure and applications.</p>
<details> 
<summary>
Learn more about Ansible:
</summary>

<a target="_blank" href="https://blog.yahya-abulhaj.dev/ansible-a-practical-guide-to-configuration-management"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1673453956410/f73328dd-7883-4ad2-87e5-3f6cdaff58c6.jpeg" /></a>

</details>

<p>Here are a few ways that YAML is used with ansible:</p>
<p>1- <strong>Ansible Playbooks:</strong> Ansible playbooks are files that define the tasks and configuration for an ansible playbook. You can use YAML to define the structure and syntax of an ansible playbook in a <code>.yml</code> file. For example:</p>
<pre><code class="lang-YAML"><span class="hljs-meta">---</span>
<span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Install</span> <span class="hljs-string">and</span> <span class="hljs-string">configure</span> <span class="hljs-string">Apache</span>
  <span class="hljs-attr">hosts:</span> <span class="hljs-string">all</span>
  <span class="hljs-attr">become:</span> <span class="hljs-literal">true</span>
  <span class="hljs-attr">tasks:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Install</span> <span class="hljs-string">Apache</span>
    <span class="hljs-attr">yum:</span>
      <span class="hljs-attr">name:</span> <span class="hljs-string">httpd</span>
      <span class="hljs-attr">state:</span> <span class="hljs-string">present</span>
  <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Start</span> <span class="hljs-string">Apache</span>
    <span class="hljs-attr">service:</span>
      <span class="hljs-attr">name:</span> <span class="hljs-string">httpd</span>
      <span class="hljs-attr">state:</span> <span class="hljs-string">started</span>
      <span class="hljs-attr">enabled:</span> <span class="hljs-literal">true</span>
</code></pre>
<p>This <code>playbook.yml</code> file defines a playbook that installs and starts Apache on all hosts.</p>
<p>2- <strong>Ansible Inventory:</strong> Ansible inventory is a file that defines the hosts and groups in your infrastructure. You can use YAML to define the structure and syntax of an ansible inventory in a <code>.yml</code> file. For example:</p>
<pre><code class="lang-YAML"><span class="hljs-attr">all:</span>
  <span class="hljs-attr">children:</span>
    <span class="hljs-attr">webservers:</span>
      <span class="hljs-attr">hosts:</span>
        <span class="hljs-attr">web1:</span>
          <span class="hljs-attr">ansible_host:</span> <span class="hljs-number">192.0</span><span class="hljs-number">.2</span><span class="hljs-number">.10</span>
        <span class="hljs-attr">web2:</span>
          <span class="hljs-attr">ansible_host:</span> <span class="hljs-number">192.0</span><span class="hljs-number">.2</span><span class="hljs-number">.11</span>
    <span class="hljs-attr">databases:</span>
      <span class="hljs-attr">hosts:</span>
        <span class="hljs-attr">db1:</span>
          <span class="hljs-attr">ansible_host:</span> <span class="hljs-number">198.51</span><span class="hljs-number">.100</span><span class="hljs-number">.10</span>
</code></pre>
<p>This <code>inventory.yml</code> file defines two groups: webservers and databases. It also defines the hostnames and IP addresses for each host in these groups.</p>
<p>3- <strong>Define variables in ansible playbooks:</strong> You can use YAML to define variables in your ansible playbooks. This can be useful for storing and accessing data that is used throughout the playbook.</p>
<p>4- <strong>Define task parameters:</strong> You can use YAML to define the parameters for a task in an ansible playbook. This can be useful for specifying the options and arguments for a task.</p>
<p>5- <strong>Define ansible roles:</strong> Ansible roles are a way to organize and reuse ansible playbook tasks. You can use YAML to define the structure and syntax of an ansible role in a .yml file.</p>
<p>YAML is a critical tool for defining the configuration and syntax of ansible playbooks, inventory files, variables, task parameters, and roles. Its simplicity and flexibility make it a popular choice for defining the tasks and infrastructure in ansible</p>
<h1 id="heading-concluding">Concluding</h1>
<p>YAML has proven to be a valuable tool in the DevOps workflow due to its simplicity and flexibility. Its human-readable syntax and ability to handle a wide range of data types make it an ideal choice for storing configuration files and data.</p>
<p>Furthermore, as DevOps continues to evolve, it is likely that YAML will remain an important tool for automating tasks and streamlining workflows. Its compatibility with a wide range of programming languages and tools make it well-suited for use in a variety of DevOps scenarios.</p>
<h1 id="heading-a-look-at-yaml-and-beyond">A Look at YAML and Beyond</h1>
<p>The use of YAML and other technologies is ultimately about finding the right tool for the job; The key is to understand the strengths and weaknesses of each tool and choose the one that best fits your needs.</p>
<p>There are always new tools and technologies being developed, and it can be overwhelming to try to keep up with them all. However, by focusing on the core principles of simplicity, flexibility, and efficiency, you can make informed decisions about which technologies to use and how to use them effectively.</p>
<p>the goal is to find the right balance between using the right tools for the job and not getting bogged down. By keeping this philosophy in mind, <strong>Adopt DevOps</strong>, you can streamline your workflows and focus on delivering <strong>value</strong> to your clients.</p>
]]></content:encoded></item><item><title><![CDATA[KUBERNETES | The Containers Orchestration Engine]]></title><description><![CDATA[What's KUBERNETES
Kubernetes is a container orchestration system that provides basic mechanisms for deployment, maintenance, and scaling of applications. Kubernetes also known as k8s was originally designed by Google and is now maintained by the Clou...]]></description><link>https://blog.yahya-abulhaj.dev/kubernetes-the-containers-orchestration-engine</link><guid isPermaLink="true">https://blog.yahya-abulhaj.dev/kubernetes-the-containers-orchestration-engine</guid><category><![CDATA[Best_K8S_article]]></category><category><![CDATA[Devops]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[technology]]></category><dc:creator><![CDATA[Yahya Abulhaj]]></dc:creator><pubDate>Sat, 17 Dec 2022 14:30:49 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1668966576817/XgoGAT2_y.gif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-whats-kubernetes">What's KUBERNETES</h1>
<p>Kubernetes is a container orchestration system that provides basic mechanisms for deployment, maintenance, and scaling of applications. Kubernetes also known as k8s was originally designed by Google and is now maintained by the Cloud Native Computing Foundation.</p>
<p>Ensure you reviewed my previous article on <a target="_blank" href="https://blog.yahya-abulhaj.dev/containers-docker-or-what-exactly-is-that">Docker</a> to get knowledge neat.</p>
<p>Kubernetes has become popular in recent years due to its ability to manage complex deployments on top of scalable infrastructure. Many companies have started using Kubernetes to orchestrate their containerized workloads because it can help them save time and money on operations costs.</p>
<h1 id="heading-k8s-andamp-devops">K8S &amp; DevOps</h1>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1671297443052/XOgdY_-uW.png" alt class="image--center mx-auto" /></p>
<p>Kubernetes is an important tool for DevOps teams that are looking to streamline the process of deploying and managing containerized applications at scale. By automating many of the tasks associated with these processes, Kubernetes can help reduce the amount of time and effort required to manage large-scale deployments. Speed, ladies and gentlemen. Additionally, Kubernetes provides a number of features that can help ensure high availability and performance levels for applications running in production environments. <strong>Quality.</strong></p>
<p>Kubernetes is a powerful and essential tool for DevOps teams that need to deploy and manage applications at scale. It provides a consistent and reliable environment for running applications, and offers a range of tools and features that can help devops teams manage and monitor their applications effectively.</p>
<h1 id="heading-architecture">Architecture</h1>
<p>Kubernetes has a decentralized architecture that is made up of a number of components that work together to form a cluster. At a high level, the architecture of Kubernetes can be divided into two main parts: the control plane and the worker nodes.</p>
<p>The control plane is the central management component of the Kubernetes cluster. It is responsible for maintaining the desired state of the cluster and ensuring that the worker nodes are in sync with that state. The control plane consists of a number of components, including:</p>
<ul>
<li><p><strong>The Kubernetes API server:</strong> This is the central control plane for the Kubernetes cluster and is responsible for managing the state of the cluster and handling requests from clients.</p>
</li>
<li><p><strong>The etcd distributed key-value store:</strong> This stores the configuration data for the cluster and is used by the API server to store and retrieve data about the cluster.</p>
</li>
<li><p><strong>The scheduler:</strong> This component is responsible for scheduling pods (a group of one or more containers that are deployed together) onto the worker nodes.</p>
</li>
</ul>
<p>Worker nodes are the machines (either physical or virtual) that run the applications and services in the cluster. Each worker node runs a number of components, including:</p>
<ul>
<li><p><strong>The kubelet:</strong> This is a process that runs on each node and is responsible for starting, stopping, and managing the containers on that node.</p>
</li>
<li><p><strong>The kube-proxy:</strong> This is a network proxy that runs on each node and is responsible for networking and load balancing across the nodes in the cluster.</p>
</li>
<li><p><strong>Container runtime:</strong> This is the software that is responsible for running the containers on the node. Kubernetes supports a number of different container runtimes, including Docker, containerd, and CRI-O.</p>
</li>
</ul>
<p>In a typical Kubernetes deployment, there is a single control plane that manages a number of worker nodes. The control plane and the worker nodes communicate with each other through the Kubernetes API, which is exposed by the API server. Applications and services are deployed onto the worker nodes as pods, which are scheduled and managed by the control plane.</p>
<p>Overall, the architecture of Kubernetes is designed to be flexible and scalable, with a decentralized control plane that can manage a large number of worker nodes running a wide variety of applications and services.</p>
<h1 id="heading-critical-elements">Critical Elements</h1>
<p>There are many important concepts and features in Kubernetes, but some of the most crucial elements to understand are:</p>
<ul>
<li><p><strong>Pods:</strong> Pods are the basic building blocks of Kubernetes, and they represent a group of one or more containers that are deployed together. Pods are the smallest deployable units in Kubernetes and are used to host applications and services.</p>
</li>
<li><p><strong>Deployments:</strong> Deployments are used to manage the lifecycle of pods, including scaling and rolling updates. Deployments allow you to declaratively specify the desired state of your applications, and Kubernetes will ensure that the pods are running as intended.</p>
</li>
<li><p><strong>Services:</strong> Services are used to expose a set of pods to other parts of the cluster or to external clients. Services provide load balancing and service discovery for the pods they expose.</p>
</li>
<li><p><strong>Namespaces:</strong> Namespaces are used to partition resources in a Kubernetes cluster and are often used to separate different environments (e.g. production, staging, development) or teams.</p>
</li>
<li><p><strong>RBAC: Role-based access control (RBAC)</strong>: is used to control access to the Kubernetes API and resources within the cluster. RBAC allows you to specify who has access to what resources and what actions they can take.</p>
</li>
</ul>
<h2 id="heading-ways-to-install-kubernetes">Ways to install Kubernetes</h2>
<p>Installing Kubernetes can seem like a daunting task, especially if you are new to the platform. However, there are a number of ways to get started with Kubernetes, depending on your needs and the resources available to you. Here are a few options for installing Kubernetes:</p>
<p>1- <strong>Use a managed Kubernetes service:</strong> If you don't want to worry about setting up and maintaining your own Kubernetes cluster, you can use a managed Kubernetes service such as Google Kubernetes Engine (GKE), Amazon Elastic Container Service for Kubernetes (EKS), or Azure Kubernetes Service (AKS). These services provide a fully managed Kubernetes environment, allowing you to focus on building and deploying your applications.</p>
<p>2- <strong>Use a local development environment:</strong> If you want to get started with Kubernetes quickly and easily, you can use a local development environment such as minikube or Docker for Desktop. These tools allow you to run a single-node Kubernetes cluster on your local machine, making it easy to experiment with Kubernetes and develop applications without the need for additional resources.</p>
<p>3- <strong>Install Kubernetes on your own infrastructure:</strong> If you want to set up a production-grade Kubernetes cluster, you can install Kubernetes on your own infrastructure. There are a number of tools and resources available to help you do this, including the kubeadm tool and the Kubernetes documentation.</p>
<p>4- <strong>Installing Kubernetes using a package manager:</strong> Kubernetes can be installed using a package manager such as apt-get (for Debian-based systems) or yum (for Red Hat-based systems). This method is relatively straightforward and can be used to install Kubernetes on a single node or multiple nodes.</p>
<p>Regardless of which option you choose, the process of installing Kubernetes generally involves the following steps:</p>
<ul>
<li><p><strong>Install the required dependencies:</strong> Depending on the installation method you choose, you may need to install additional dependencies such as Docker, etcd, or a container runtime.</p>
</li>
<li><p><strong>Install the Kubernetes control plane components:</strong> This includes the Kubernetes API server, the etcd distributed key-value store, and the scheduler.</p>
</li>
<li><p><strong>Install the worker node components:</strong> This includes the kubelet, kube-proxy, and container runtime.</p>
</li>
<li><p><strong>Configure the cluster:</strong> This involves setting up networking, security, and other cluster-wide configurations.</p>
</li>
</ul>
<p>Installing Kubernetes can take some time and effort, but the process is well documented, and there are several resources available to help you get started. Once you have a Kubernetes cluster up and running, you can begin deploying and managing containerized applications with ease.</p>
<h1 id="heading-commands">Commands</h1>
<p>Here are some essential Kubernetes commands that you may find useful:</p>
<pre><code class="lang-plaintext">kubectl get pods: Lists all the pods in the current namespace.
kubectl describe pod &lt;pod-name&gt;: Shows detailed information about a specific pod, including its status, containers, and events.
kubectl logs &lt;pod-name&gt;: Shows the logs for a specific pod.
kubectl exec -it &lt;pod-name&gt; -- bash: Opens a shell inside a specific pod.
kubectl create -f &lt;filename&gt;: Creates a new resource based on the configuration in the specified file.
kubectl cluster-info : Understand your cluster services
kubectl apply -f &lt;filename&gt;: Updates an existing resource based on the configuration in the specified file.
kubectl delete -f &lt;filename&gt;: Deletes a resource based on the configuration in the specified file.
kubectl get secrets : Reveal your secrets
kubectl get events  : Keeping track of events
kubectl scale deployment &lt;deployment-name&gt; --replicas=3: Scales a deployment to the specified number of replicas.
kubectl rollout restart deployment &lt;deployment-name&gt;: Restarts a deployment.
</code></pre>
<p>These are just a few examples of the many commands available in Kubernetes. For a full list of commands, you can refer to the KubernetesDocs or use the kubectl --help command.</p>
<h1 id="heading-creating-a-kubernetes-deployment">Creating a Kubernetes deployment</h1>
<p>A Kubernetes deployment is a configuration file that defines a desired state for a group of pods and the policies to manage them. It is used to deploy and manage applications on a Kubernetes cluster.</p>
<p>To create a deployment in YAML, you will need to define the following elements:</p>
<p>1- <strong>The API version of the deployment object</strong>: This specifies the version of the Kubernetes API that the deployment object will use.</p>
<p>2- <strong>The kind of the deployment object</strong>: This specifies the type of object that the deployment object represents. In this case, it will be "Deployment."</p>
<p>3- <strong>The metadata of the deployment object</strong>: This includes the name of the deployment and any labels or annotations that you want to apply to it.</p>
<p>4- <strong>The spec of the deployment object</strong>: This specifies the desired state of the deployment, including the number of replicas, the container image to use, and any environment variables or command-line arguments.</p>
<p>Here is an example of a simple deployment YAML file that deploys a single pod with an NGINX container:</p>
<pre><code class="lang-YAML"><span class="hljs-attr">apiVersion:</span> <span class="hljs-string">apps/v1</span>
<span class="hljs-attr">kind:</span> <span class="hljs-string">Deployment</span>
<span class="hljs-attr">metadata:</span>
  <span class="hljs-attr">name:</span> <span class="hljs-string">nginx-deployment</span>
<span class="hljs-attr">spec:</span>
  <span class="hljs-attr">replicas:</span> <span class="hljs-number">1</span>
  <span class="hljs-attr">selector:</span>
    <span class="hljs-attr">matchLabels:</span>
      <span class="hljs-attr">app:</span> <span class="hljs-string">nginx</span>
  <span class="hljs-attr">template:</span>
    <span class="hljs-attr">metadata:</span>
      <span class="hljs-attr">labels:</span>
        <span class="hljs-attr">app:</span> <span class="hljs-string">nginx</span>
    <span class="hljs-attr">spec:</span>
      <span class="hljs-attr">containers:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">nginx</span>
        <span class="hljs-attr">image:</span> <span class="hljs-string">nginx:latest</span>
</code></pre>
<p>To create a deployment using this YAML file, you can use the <strong>kubectl apply</strong> command:</p>
<p><code>kubectl apply -f deployment.yml</code></p>
<details> 
<summary>
Are you curious about YAML?
</summary>
We created this for you. CLICK!
<a target="_blank" href="https://blog.yahya-abulhaj.dev/yaml-aint-markup-language"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1673446208363/645cee88-3cee-40e0-bd4d-9c40337eba82.jpeg" /></a>
</details>

<p>This will create a deployment with the specified configuration and deploy it to the cluster. You can use the <code>kubectl get deployments</code> command to view the status of the deployment and the <code>kubectl describe deployment</code> command to get more detailed information about the deployment.</p>
<p>It is also possible to update an existing deployment by modifying the YAML file and using the <code>kubectl apply</code> command again. This will update the deployment with the new configuration and rolling out the changes to the pods in the deployment.</p>
<p>This makes it easy to deploy and manage even large-scale applications on Kubernetes.</p>
<h2 id="heading-monitor-the-deployment">Monitor the deployment</h2>
<p>After creating a Kubernetes deployment in YAML, there are several things you can do to manage and monitor the deployment:</p>
<ul>
<li><p><strong>View the pods in the deployment:</strong> You can use the <code>kubectl get pods</code> command to view the pods in the deployment, including their status and the containers that they are running.</p>
</li>
<li><p><strong>View the logs of the pods:</strong> You can use the <code>kubectl logs</code> command to view the logs of the pods in the deployment. This can be helpful for debugging and troubleshooting issues with the deployment.</p>
</li>
<li><p><strong>Scale the deployment:</strong> You can use the <code>kubectl scale</code> command to scale the deployment up or down by increasing or decreasing the number of replicas. This can be useful for handling changes in demand or for performing maintenance tasks.</p>
</li>
<li><p><strong>Roll out updates to the deployment:</strong> You can use the <code>kubectl apply</code> command to update the deployment with new configurations or changes to the container image. This will roll out the changes to the pods in the deployment in a controlled and configurable way.</p>
</li>
<li><p><strong>Monitor the performance of the deployment:</strong> You can use tools like <strong>Kubernetes Dashboard</strong> or <strong>Prometheus</strong> to monitor the performance of the deployment, including the resource usage of the pods and the health of the containers. This can help you identify and troubleshoot issues with the deployment.</p>
</li>
</ul>
<p>There are several actions you can take after creating a Kubernetes deployment in YAML to manage and monitor the deployment and ensure that it is running smoothly.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>In conclusion, Kubernetes is a powerful and flexible open-source platform that is widely used to deploy and manage containerized applications in a distributed environment. It offers a consistent and reliable environment for running applications and simplifies the process of deploying and managing applications in a distributed environment.</p>
<p>There are several ways to install Kubernetes, including using a Kubernetes distribution, installing it using a package manager, or installing it manually. The best method for you will depend on your specific needs and preferences.</p>
<p>Once Kubernetes is installed, you can use YAML files to create and manage deployments, specifying the desired state of the deployment and the policies to manage it. You can then use a variety of tools and commands to manage and monitor the deployment, including viewing the status of the deployment, viewing the logs of the pods, scaling the deployment, rolling out updates, and monitoring the performance of the deployment.</p>
<p>Overall, Kubernetes is a powerful and essential tool for deploying and managing applications in a distributed environment, and it is worth considering for any organization that needs to deploy and manage applications at scale. <strong>Adopt DevOps.</strong></p>
<h1 id="heading-continue-to-innovate">Continue to innovate</h1>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1673446010385/cabd737b-6fd6-4589-8f40-94c263c86a84.png" alt class="image--center mx-auto" /></p>
<p>Managing multiple deployments on Kubernetes can still be a time-consuming task, especially as the number of deployments grows. It can be difficult to keep track of all the different components and resources needed for each deployment, as well as ensure that they are all properly configured and up-to-date. This is where Helm comes in. Helm is a tool that simplifies the process of deploying and managing applications on Kubernetes. This will be our next topic of discussion.</p>
<details> 
<summary>
Keep an eye out!
</summary>
<a target="_blank" href="https://blog.yahya-abulhaj.dev/helm-the-essential-package-manager-for-kubernetes"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1673453570021/4d45ea28-4bc3-4406-9e1d-e57516e8067d.jpeg" /></a>
</details>]]></content:encoded></item><item><title><![CDATA[Why Skype for Business is Good for You]]></title><description><![CDATA[Opening
In today’s world, staying connected with colleagues and clients is essential for business success.
Skype for Business (formerly Microsoft Lync) provides a comprehensive unified communications platform that enables businesses to stay in touch ...]]></description><link>https://blog.yahya-abulhaj.dev/why-skype-for-business-is-good-for-you</link><guid isPermaLink="true">https://blog.yahya-abulhaj.dev/why-skype-for-business-is-good-for-you</guid><category><![CDATA[communication]]></category><category><![CDATA[Skype]]></category><category><![CDATA[Collaboration]]></category><category><![CDATA[Startups]]></category><category><![CDATA[Entrepreneurship]]></category><dc:creator><![CDATA[Yahya Abulhaj]]></dc:creator><pubDate>Thu, 15 Dec 2022 21:17:21 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1671139838769/L2-j-QZxW.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-opening">Opening</h2>
<p>In today’s world, staying connected with colleagues and clients is essential for business success.</p>
<p>Skype for Business (formerly Microsoft Lync) provides a comprehensive unified communications platform that enables businesses to stay in touch with their employees, customers, partners, and suppliers from any device or location. Skype for Business combines voice calling, video conferencing, instant messaging, and presence into one easy-to-use solution that can be used on desktop computers as well as mobile devices such as smartphones and tablets.</p>
<h2 id="heading-advantages">Advantages</h2>
<p>The advantages of using Skype for Business are numerous; here are just some of the reasons why i think you should adopt it in your office suites:</p>
<ol>
<li><p>Increased Productivity - With its integrated tools like audio/video calls over the Internet or through a secure private network connection along with file sharing capabilities make it is easier than ever before to collaborate quickly without having to leave your desk chair! This makes tasks more efficient by reducing travel time between meetings which results in increased productivity overall.</p>
</li>
<li><p>Improved Security – As mentioned earlier due to its secure private network connections all data transmitted over these channels remains encrypted making sure only authorized individuals have access thus improving overall security levels within an organization's infrastructure significantly compared to traditional methods where conversations could easily be intercepted by third parties if not properly secured beforehand.</p>
</li>
<li><p>Flexibility &amp; Mobility – One great advantage of using this technology is that users don’t need special equipment installed at their location but rather just an internet connection so they can start collaborating instantly regardless if they're located next door or across the globe allowing them freedom when working remotely which increases employee satisfaction resulting higher job performance rates too!.</p>
</li>
<li><p>Easy Integration – Integrating existing applications into skype has become very simple thanks to modern technologies available nowadays so companies don't have to worry about compatibility issues anymore nor spend countless hours trying to figure out how to integrate different systems together saving precious time and resources wasted otherwise doing manual labor-intensive processes manually each day.</p>
</li>
</ol>
<h1 id="heading-extend-communication-with-teams">Extend Communication with Teams</h1>
<p>You can use the "Skype for Business with Teams Collaboration" mode to introduce Microsoft Teams into your organization while still using Skype for Business for chat, calling, and meetings. This mode allows you to add the collaboration capabilities of Teams, including the ability to create teams and channels, access files in Microsoft 365 or Office 365, and use various applications. You will also have access to the communications capabilities of Teams, including private chat, calling, and scheduling meetings. </p>
<p>In the "Skype for Business with Teams Collaboration" mode, users will use Teams for team- and channel-based conversations and for scheduling and conducting meetings. Private chat and calling will continue to be handled through Skype for Business. Both applications will also have access to several "better together" features, such as presence reconciliation, automatic hold/unhold, and support for HID devices. If desired, teams and channels can be hidden using the App Setup policy.</p>
<p>This mode is particularly useful for organizations that have Skype for Business on-premises deployments with Enterprise Voice and want to take advantage of the improved meeting capabilities of Teams while they transition to the new platform. 
It allows  organizations to use Teams for meetings while continuing to use Skype for Business for chat and calling.</p>
<h1 id="heading-skype-or-skype-for-business">Skype or Skype for Business</h1>
<p>Skype for business will require expenses compared to free Skype. But is it worthwhile?  </p>
<p>If you are part of a small organization or a personal use, <strong>the regular version of Skype</strong> may be sufficient for your needs and can be used at no cost.</p>
<p>However, it may not provide the security you require for your enterprise.</p>
<p><strong>Skype for Business</strong> is a version of Skype designed specifically for use in scale. It has many features that are not available in the regular version of Skype, such as the ability to add more and more people to online meetings, enterprise-grade security, and <strong>integration with Office apps</strong>. </p>
<p>Additionally, it allows administrators to manage <strong>employee accounts</strong> and control <strong>access to the system</strong>. Skype for Business may be a better option for you.  </p>
<h3 id="heading-you-decide">You decide!</h3>
<p>In conclusion, adopting the Skype business suite will help increase productivity and more importantly, improve security, provide flexibility and ease the integration process.</p>
<p> <strong>The choice is yours!</strong></p>
]]></content:encoded></item><item><title><![CDATA[Let's Explain a Pipeline]]></title><description><![CDATA[Definition
The idea of a pipeline is important to any team, as it helps them efficiently complete tasks and move projects forward.

A "pipeline" can be defined as the series of steps or stages that must occur for a project to reach completion, each b...]]></description><link>https://blog.yahya-abulhaj.dev/lets-explain-a-pipeline</link><guid isPermaLink="true">https://blog.yahya-abulhaj.dev/lets-explain-a-pipeline</guid><category><![CDATA[Pipeline]]></category><category><![CDATA[Devops]]></category><category><![CDATA[Developer]]></category><category><![CDATA[YAML]]></category><category><![CDATA[values]]></category><dc:creator><![CDATA[Yahya Abulhaj]]></dc:creator><pubDate>Sun, 11 Dec 2022 10:20:44 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1670754727150/DU-3Nj_hS.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-definition">Definition</h1>
<p>The idea of a pipeline is important to any team, as it helps them efficiently complete tasks and move projects forward.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1670767652098/sdEwPc7ke.png" alt class="image--center mx-auto" /></p>
<p>A "pipeline" can be defined as the series of steps or stages that must occur for a project to reach completion, each backed by specific tools. The exact nature of this sequence varies from team to team, depending on their specific needs and goals. For example, one development team may have an extensive testing phase, while another might opt for fewer tests but more frequent code reviews.</p>
<h2 id="heading-pipeline-toolchain">Pipeline Toolchain</h2>
<p>Each stage in the pipeline requires different tools and processes that allow teams to work together effectively toward achieving their objectives. Version control systems such as Git are used by developers so they can collaborate on changes without overwriting each other’s code; automated test suites ensure quality assurance; continuous integration servers compile all changes into deployable versions quickly; deployment automation tools manage deployments across multiple environments with minimal manual effort; monitoring solutions provide feedback about how applications are performing in production environments - all these elements contribute towards creating an efficient software delivery process for every individual project or product release cycle.</p>
<p>Pipelines should also include activities related to communication between stakeholders, including customer service representatives who help customers use products correctly or technical support personnel who resolve problems when things go wrong during operation times. This ensures everyone involved has access to up-to-date information regarding progress made throughout the entire process, which allows teams to stay informed at all times while making sure deadlines are met along the way.</p>
<h1 id="heading-key-phases">Key Phases</h1>
<p>The phases listed below represent a pipeline; tools and names are subject to change. However, the principles do not, therefore the stages emphasize quick interaction, collaboration, and feedback. Speed &amp; Quality.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1670769040125/WDAglyDNz.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-version-control">Version Control</h1>
<p>Version control like git is an invaluable tool for developers, allowing them to track and manage changes to their codebase over time. With version control, developers can easily collaborate on projects by creating different versions of the same project or tracking changes made by other members of a team. It also allows for easy rollbacks when needed, making debugging and testing much simpler tasks.</p>
<h1 id="heading-continuous-integration-systems">Continuous Integration Systems</h1>
<p>Continuous integration systems with Jenkins on top provide a comprehensive, automated solution for software development teams to manage and deploy their code to other systems, including Teams City. Also notable is the use of CI as a service by Travis CI and Circle CI.</p>
<h1 id="heading-build">Build</h1>
<p>Build tools are programs that automate the process of creating an executable application from source code, and they come in many different forms.</p>
<ul>
<li><p>A language-specific build tool such as Rust or C# helps developers create efficient applications with minimal effort.</p>
</li>
<li><p>Using a workflow approach with Maven to build projects that allow users to manage dependencies and automate processes such as compilation, testing, packaging, and deployment.</p>
<p>Both of these tools offer powerful advantages for developing robust applications quickly and efficiently, and there is much more that you can use, such as Packer by Hachicorp when you build infrastructure.</p>
</li>
</ul>
<h1 id="heading-test-phase">Test Phase</h1>
<p>DevOps testing aims to achieve the ideal balance between goals, feedback cycles, and skills among the development, QA, and operations teams.</p>
<p>It promotes interaction across all three teams while automating software delivery and infrastructure changes.</p>
<h3 id="heading-unit-test">Unit-Test</h3>
<p>Unit testing is an important part of the software development process, as it ensures that individual units of code are functioning correctly.</p>
<p>Go Lang (Golint, Gofmt) and Ruby (Rubocop) are two popular programming languages that allow developers to perform unit tests.</p>
<p>You can also run JUnit for Java-based applications.</p>
<p>When working with the Microsoft Ecosystem and any, c# is a well-known option.</p>
<h3 id="heading-integration-test">Integration-Test</h3>
<p>Integration testing is a type of software testing that verifies the interactions between different components or systems. It ensures that all elements within an application are working together as intended and also checks for any discrepancies in data exchange between various modules.</p>
<ul>
<li><p>UI-Testing, Selenium</p>
</li>
<li><p>Acceptance Testing, SAUCE Labs</p>
</li>
<li><p>Infrastructure Testing, Kitchen CI for Chef</p>
</li>
<li><p>Performance Testing, ApacheBench or JMeter</p>
</li>
<li><p>Security Testing, Gauntlet and Mitten</p>
</li>
</ul>
<h3 id="heading-local-testing">Local Testing</h3>
<p>Local testing allows developers to run their entire application locally. It enables developers to test features and functionality in a safe and secure environment before releasing them to production, ensuring that any changes are bug-free and performed optimally. Ultimately, this helps speed up the development process while ensuring quality results for users when they interact with your product or service.</p>
<p>Tools for this use case include:</p>
<ul>
<li><p>Vagrant</p>
</li>
<li><p>Docker Compose</p>
</li>
<li><p>Otto</p>
</li>
</ul>
<h1 id="heading-artifact-repository">Artifact Repository</h1>
<p>Now that the code has been built and tested. It must be stored in your repository.<br />An Artifact repository provides a secure, centralized storage location for all artifacts related to the project, such as source code, binaries and documentation.</p>
<p>Examples of artifact repositories that you can use:</p>
<ul>
<li><p>Artifactory</p>
</li>
<li><p>Nexus</p>
</li>
<li><p>Docker hub</p>
</li>
<li><p>Azure Storage</p>
</li>
<li><p>Amazon S3</p>
</li>
</ul>
<h1 id="heading-deployment">Deployment</h1>
<p>Our code has been written, tested, and saved. What remains?<br />Deployment. The stage at which we transfer the project in its current state to the production environment for end-user access</p>
<p>The following are some of the tools for your deployment workflow</p>
<ul>
<li><p>Rundeck</p>
</li>
<li><p>UrbanCode</p>
</li>
<li><p>ThoughtWorks</p>
</li>
<li><p>Deployinator</p>
</li>
</ul>
<h2 id="heading-monitoring">Monitoring</h2>
<p>One important aspect to consider after deployment is to continuously monitor your system and receive alerts. Monitoring is a top-tier discipline that both DevOps and SRE must be familiar with. It's more for SRE, but I encourage DevOps to have it as well. Monitoring instills awareness.</p>
<h2 id="heading-assumption">Assumption</h2>
<p>It's worth noting that tools evolve. Because new developments emerge all the time, technology is always in flux. Technological products change, as does the way they are used. To stay in business, you must be aware of technological advancements that are relevant to your industry. What matters most is understanding the underlying principles of the entire culture and adapting to ever-changing technologies.</p>
]]></content:encoded></item><item><title><![CDATA[Microsoft Ignite Event: Free Exam Voucher]]></title><description><![CDATA[Microsoft events are a great way of 'em to showcase and articulate their latest technologies along with giving back to the community.
Microsoft also hosts Build event once a year and they do fantastic work!
Microsoft Ignite
Microsoft Ignite is a conf...]]></description><link>https://blog.yahya-abulhaj.dev/microsoft-ignite-event-free-exam-voucher</link><guid isPermaLink="true">https://blog.yahya-abulhaj.dev/microsoft-ignite-event-free-exam-voucher</guid><category><![CDATA[Microsoft]]></category><category><![CDATA[events]]></category><category><![CDATA[Certification]]></category><category><![CDATA[technology]]></category><category><![CDATA[Career]]></category><dc:creator><![CDATA[Yahya Abulhaj]]></dc:creator><pubDate>Sat, 10 Sep 2022 15:01:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1662822197403/bzbIhaU-_.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h4 id="heading-microsoft-events-are-a-great-way-of-em-to-showcase-and-articulate-their-latest-technologies-along-with-giving-back-to-the-community">Microsoft events are a great way of 'em to showcase and articulate their latest technologies along with giving back to the community.</h4>
<p>Microsoft also hosts <a target="_blank" href="https://blog.yahya-abulhaj.dev/microsoft-build-2022-cloud-skills-challenge-free-microsoft-certification-voucher">Build event</a> once a year and they do fantastic work!</p>
<h1 id="heading-microsoft-ignite">Microsoft Ignite</h1>
<p>Microsoft Ignite is a conference for IT professionals and those working in technology-related fields. It offers a range of sessions and workshops on various topics, such as cloud computing, data management, and cybersecurity. Attendees can learn about the latest developments and best practices in their field, network with other professionals, and gain valuable insights from industry experts.</p>
<p>Attendees of Microsoft Ignite may have the opportunity to receive an exam voucher as part of their conference experience. Exam vouchers can be used to take certification exams, which can help IT professionals demonstrate their knowledge and expertise in a particular technology or area of study.</p>
<ul>
<li><p>Coming <strong>12-14 October,</strong> you can register RIGHT NOW.</p>
</li>
<li><p>Along with a <strong>challenge</strong> to finish and earn voucher prior to deadline.</p>
</li>
<li><p><strong>Microsoft Learn</strong> will contain the challenges.</p>
</li>
<li><p><strong>Eligible exams</strong> will be investigated at a later date.</p>
</li>
</ul>
<h1 id="heading-register-herehttpsignitemicrosoftcomen-ushome"><a target="_blank" href="https://ignite.microsoft.com/en-US/home">Register Here</a></h1>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662819125951/3aNsw2BPI.PNG" alt="ignite event.PNG" /></p>
<hr />
<blockquote>
<p>Update, 29 September 2022</p>
</blockquote>
<h2 id="heading-cloud-skills-challenge">Cloud Skills Challenge</h2>
<p>Microsoft provides these <a target="_blank" href="https://www.microsoft.com/en-us/cloudskillschallenge/ignite/registration/2022?ocid=cloudskillschallenge_ignite22_email_cnl">tasks</a> to complete before <strong>November 18th</strong>.</p>
<p>Enroll in one of them and complete the challenge to 100% untill the deadline to be eligible for a free exam voucher.</p>
<p>Vouchers that are not used by February 15, 2023 will be marked as <strong>expired</strong> and no longer available for use.</p>
<p>Eligible <strong>2022 Ignite Exams</strong> can be found <a target="_blank" href="https://www.microsoft.com/en-us/cloudskillschallenge/ignite/officialrules/2022?ocid=cloudskillschallenge_ignite22_email_cnl">here</a></p>
<p>Keep doing it, tomorrows knowledge is FUN!</p>
<hr />
<blockquote>
<p>update 12Oct2022, event init</p>
</blockquote>
<p>I was pretty excited about <a target="_blank" href="https://learn.microsoft.com/fr-fr/training/challenges?id=7a06394f-6963-44b8-b21c-807c0079fe38&amp;WT.mc_id=cloudskillschallenge_7a06394f-6963-44b8-b21c-807c0079fe38&amp;ocid=cloudskillschallenge_ignite22_email_cnl">Protect everything challenge</a> , and now that it's finally here, it appears that I've already covered the entirety of the material, lol. Event's over.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1665611076757/SmGsmbMAa.PNG" alt="challenge.PNG" /></p>
<p>I will undoubtedly choose another track to complete along the way. Happy learning!</p>
]]></content:encoded></item><item><title><![CDATA[Microsoft Certified:CyberSecurity Architect Expert | Resources]]></title><description><![CDATA[Cybersecurity Architect
Cybersecurity is the practice of protecting information from unauthorized access or theft. It includes measures to protect data, networks, and devices from attack, damage, or unauthorized access. Cybersecurity is a growing con...]]></description><link>https://blog.yahya-abulhaj.dev/microsoft-certifiedcybersecurity-architect-expert-resources</link><guid isPermaLink="true">https://blog.yahya-abulhaj.dev/microsoft-certifiedcybersecurity-architect-expert-resources</guid><category><![CDATA[Security]]></category><category><![CDATA[#cybersecurity]]></category><category><![CDATA[Cloud]]></category><category><![CDATA[Azure]]></category><category><![CDATA[Microsoft]]></category><dc:creator><![CDATA[Yahya Abulhaj]]></dc:creator><pubDate>Fri, 26 Aug 2022 11:07:55 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1661512851209/mbGmMsvAi.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-cybersecurity-architect">Cybersecurity Architect</h1>
<p>Cybersecurity is the practice of protecting information from unauthorized access or theft. It includes measures to protect data, networks, and devices from attack, damage, or unauthorized access. Cybersecurity is a growing concern for businesses and individuals as more sensitive information is stored online.</p>
<p>Cybersecurity architect is responsible for the design and implementation of security solutions that protect an organization's data and systems from cyber attacks. 
Candidate must have a deep understanding of both computer science and information security principles. The ultimate goal is to create a secure environment where people can operate with confidence knowing that their data is safe from harm.</p>
<p>As the world becomes more and more digital, Cybersecurity is becoming increasingly important. Microsoft is a leader in this field, providing innovative solutions to help keep people and businesses safe online. From comprehensive security suites to individual tools like our password manager, Microsoft is making it easier than ever for businesses to protect their data and applications in the cloud.</p>
<h2 id="heading-the-sc-100-exam">The  SC-100 Exam</h2>
<p>The Microsoft Cybersecurity Exam is a comprehensive exam that tests your knowledge and skills in cybersecurity. The exam covers a wide range of topics, including network security, computer security, data security, and more. The exam is designed to challenge you and ensure that you are prepared for the real world of cybersecurity.</p>
<blockquote>
<p>Please keep in mind that the courses in this series are what I went through. You are free to try whatever you want along with what I included.</p>
</blockquote>
<h1 id="heading-structured-exam-material">Structured Exam Material</h1>
<div class="hn-table">
<table>
<thead>
<tr>
<td></td><td>Usage</td><td></td></tr>
</thead>
<tbody>
<tr>
<td><b>Material<b>🏗️</b></b></td><td><b>FREE<b></b></b></td><td><b>PAIED<b></b></b></td></tr>
<tr>
<td><a target="_blank" href="https://learn.microsoft.com/en-us/certifications/exams/sc-100">Official Docs</a></td><td>✔️</td><td></td></tr>
<tr>
<td><a target="_blank" href="https://www.youtube.com/watch?v=2Qu5gQjNQh4&amp;ab_channel=JohnSavill%27sTechnicalTraining">John's Study Cram</a></td><td>✔️</td><td></td></tr>
<tr>
<td><a target="_blank" href="https://www.udemy.com/course/azure200/">Alan's Udemy Course</a></td><td></td><td>✔️</td></tr>
<tr>
<td><a target="_blank" href="https://www.youtube.com/playlist?list=PLlVtbbG169nHcbeVtWUfP8BeEjGniBJeb">SC-100 Playlist</a></td><td>✔️</td><td></td></tr>
<tr>
<td>Microsoft Cybersecurity Reference</td><td>✔️</td></tr>
</tbody>
</table>
</div><h1 id="heading-best-regards">Best regards,</h1>
]]></content:encoded></item><item><title><![CDATA[Microsoft Certified: Azure Solutions Architect Expert | Resources]]></title><description><![CDATA[Solutions Architect
Microsoft solutions architect is responsible for designing, developing, and deploying Microsoft-based solutions. They work with customers to understand their business needs and then design a solution that meets those needs. Soluti...]]></description><link>https://blog.yahya-abulhaj.dev/microsoft-certified-azure-solutions-architect-expert-resources</link><guid isPermaLink="true">https://blog.yahya-abulhaj.dev/microsoft-certified-azure-solutions-architect-expert-resources</guid><category><![CDATA[solutionarchitect]]></category><category><![CDATA[Azure]]></category><category><![CDATA[Cloud Computing]]></category><category><![CDATA[Certification]]></category><category><![CDATA[services]]></category><dc:creator><![CDATA[Yahya Abulhaj]]></dc:creator><pubDate>Fri, 26 Aug 2022 11:05:49 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1661512863065/kbmmMLLho.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-solutions-architect">Solutions Architect</h1>
<p>Microsoft solutions architect is responsible for designing, developing, and deploying Microsoft-based solutions. They work with customers to understand their business needs and then design a solution that meets those needs. Solutions architects also work with developers to ensure that the solution is implemented correctly and works as expected.</p>
<p>The architect must be skilled in a variety of areas, including technology, industry knowledge, communication, stakeholder management, leadership, problem solving, decision making, and negotiation.</p>
<p>The simplest way to describe a solutions architect is someone who can experiment with cloud services and create effective designs through their combination. This individual is expected to know when to use what and architect the technical vision for a specific market solution.</p>
<p>The Azure Solutions Architect Expert certification is a powerful exam that focuses on designing a wide range of cloud services. I recommend that you review the most of the materials provided below, which assisted me in absorbing the knowledge required to sit and pass this exam.</p>
<p><strong>Prerequisite :</strong>  The candidate must pass the <a target="_blank" href="https://blog.yahya-abulhaj.dev/passing-microsoft-azure-administrator-associate-certification">az-104</a> exam  to earn the  AZ-305 badge.</p>
<h1 id="heading-structured-exam-material">Structured Exam Material</h1>
<div class="hn-table">
<table>
<thead>
<tr>
<td></td><td>Usage</td><td></td></tr>
</thead>
<tbody>
<tr>
<td><b>Material<b>🏗️</b></b></td><td><b>FREE<b></b></b></td><td><b>PAIED<b></b></b></td></tr>
<tr>
<td><a target="_blank" href="https://blog.yahya-abulhaj.dev/passing-microsoft-azure-administrator-associate-certification">AZ-104 Study Guide</a></td><td>✔️</td><td></td></tr>
<tr>
<td><a target="_blank" href="https://docs.microsoft.com/en-us/certifications/exams/az-305">AZ305 DOCs</a></td><td>✔️</td><td></td></tr>
<tr>
<td><a target="_blank" href="https://www.youtube.com/playlist?list=PLlVtbbG169nHSnaP4ae33yQUI3zcmP5nP">AZ-305 Playlist, John Savill</a></td><td>✔️</td><td></td></tr>
<tr>
<td><a target="_blank" href="https://www.youtube.com/watch?v=PPJYQeh26Tg">Review Questions and Answers</a></td><td>✔️</td><td></td></tr>
<tr>
<td><a target="_blank" href="https://www.udemy.com/course/exam-az-microsoft-azure-exam-role1/">Udemy Course, Alan</a></td><td></td><td>✔️</td></tr>
<tr>
<td><a target="_blank" href="https://www.udemy.com/course/az301-azure/">Udemy Course, Scott</a></td><td></td><td>✔️</td></tr>
<tr>
<td><a target="_blank" href="https://docs.microsoft.com/en-us/azure/architecture/">Azure Architecture Center</a></td><td>✔️</td></tr>
</tbody>
</table>
</div><h1 id="heading-best-regards">Best regards,</h1>
]]></content:encoded></item><item><title><![CDATA[Microsoft Certified: DevOps Engineer Expert | Resources]]></title><description><![CDATA[DevOps
 DevOps is a business-driven development method for enterprise applications that involves establishing an agile relationship between the development and operations teams. Both teams are critical to a company's success. .
Thus DevOps came to im...]]></description><link>https://blog.yahya-abulhaj.dev/microsoft-certified-devops-engineer-expert-resources</link><guid isPermaLink="true">https://blog.yahya-abulhaj.dev/microsoft-certified-devops-engineer-expert-resources</guid><category><![CDATA[Devops]]></category><category><![CDATA[Azure]]></category><category><![CDATA[Cloud]]></category><category><![CDATA[Certification]]></category><category><![CDATA[Cloud Computing]]></category><dc:creator><![CDATA[Yahya Abulhaj]]></dc:creator><pubDate>Fri, 26 Aug 2022 11:05:03 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1661512873782/EjLuKyac4.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-devops">DevOps</h1>
<p> DevOps is a business-driven development method for enterprise applications that involves establishing an agile relationship between the development and operations teams. Both teams are critical to a company's success. .</p>
<p>Thus DevOps came to improve the speed and quality of software deployments by providing a fresh perspective on business processes. DevOps is one of the most in-demand and profitable careers in technology.</p>
<p>Start by browsing through <a target="_blank" href="https://devops.yahya-abulhaj.dev/">my collection</a> of inspiring quotes from great people about DevOps &amp; Cloud!</p>
<h2 id="heading-a-devops-engineer">A DevOps Engineer</h2>
<p>DevOps engineer is responsible for the smooth operation of software development and delivery process. They work with developers and other IT professionals to ensure that code is released frequently, efficiently, and with high quality. </p>
<p>A DevOps engineer needs to have a strong understanding of both development and operations processes. They must be able to communicate effectively between teams and individuals.</p>
<h1 id="heading-microsoft-devops-certification">Microsoft DevOps Certification</h1>
<p> Microsoft DevOps Certification can help you validate your skills in this growing field and show employers that you are committed to continuous learning. The certification covers key concepts and tools, including Azure DevOps, Git, Jenkins, Puppet, Chef, and Ansible. To earn the certification, you must pass two exams: Exam AZ-400: Microsoft Azure DevOps Solutions and Exam AZ-104 or AZ-204 as a prerequisite.</p>
<p>This exam is a great way to get started in the motion. It will introduce you to the fundamentals of DevOps, including version control, as well as the Azure DevOps service and its capabilities for all-in-one DevOps projects.</p>
<p> Examinees will also be able to experiment with terms like CI/CD and how the lifecycle works, from making changes and committing them to a remote repository to pushing the code to production and continuously monitoring, tracking, and innovating your application.</p>
<h1 id="heading-structured-exam-material">Structured Exam Material</h1>
<div class="hn-table">
<table>
<thead>
<tr>
<td></td><td>Usage</td><td></td></tr>
</thead>
<tbody>
<tr>
<td><b>Material<b>🏗️</b></b></td><td><b>FREE<b></b></b></td><td><b>PAIED<b></b></b></td></tr>
<tr>
<td><a target="_blank" href="https://docs.microsoft.com/en-us/certifications/exams/az-400">AZ-400 DOCs</a></td><td>✔️</td><td></td></tr>
<tr>
<td><a target="_blank" href="https://www.youtube.com/watch?v=R74bm8IGu2M&amp;list=PLlVtbbG169nFr8RzQ4GIxUEznpNR53ERq">DevOps MasterClass</a></td><td>✔️</td><td></td></tr>
<tr>
<td><a target="_blank" href="https://microsoftlearning.github.io/AZ400-DesigningandImplementingMicrosoftDevOpsSolutions/">Microsoft Official Courseware</a></td><td>✔️</td><td></td></tr>
<tr>
<td><a target="_blank" href="https://www.youtube.com/watch?v=4BibQ69MD8c&amp;t=98s">Azure DevOps Tutorial, Nana</a></td><td>✔️</td><td></td></tr>
<tr>
<td><a target="_blank" href="https://www.youtube.com/watch?v=5IZD9o13TuU">Azure DevOps Exam Cram</a></td><td>✔️</td><td></td></tr>
<tr>
<td><a target="_blank" href="https://www.udemy.com/course/azure100/">Udemy Course, Alan</a></td><td></td><td>✔️</td></tr>
<tr>
<td><a target="_blank" href="https://app.pluralsight.com/library/courses/introduction-az-400-designing-implementing-microsoft-devops-solutions-exam/table-of-contents">Pluralsight, John Savill</a></td><td></td><td>✔️</td></tr>
</tbody>
</table>
</div><h1 id="heading-best-regards">Best regards,</h1>
]]></content:encoded></item><item><title><![CDATA[Microsoft Certified: Security Operations Analyst Associate | Resources]]></title><description><![CDATA[SecOps
The term “SecOps” is a combination of the words “Security” and “Operations.” It refers to the practice of integrating security into an organization’s overall DevOps strategy. The goal of SecOps is to secure applications and systems throughout ...]]></description><link>https://blog.yahya-abulhaj.dev/microsoft-certified-security-operations-analyst-associate-resources</link><guid isPermaLink="true">https://blog.yahya-abulhaj.dev/microsoft-certified-security-operations-analyst-associate-resources</guid><category><![CDATA[Security]]></category><category><![CDATA[#cybersecurity]]></category><category><![CDATA[Cloud]]></category><category><![CDATA[sentinel]]></category><category><![CDATA[defender]]></category><dc:creator><![CDATA[Yahya Abulhaj]]></dc:creator><pubDate>Wed, 24 Aug 2022 13:57:27 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1661512800981/14JL6ViGf.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-secops">SecOps</h2>
<p>The term “SecOps” is a combination of the words “Security” and “Operations.” It refers to the practice of integrating security into an organization’s overall DevOps strategy. The goal of SecOps is to secure applications and systems throughout the software development lifecycle, from design and development through production and delivery. By automating security controls and processes, SecOps can help organizations speed up application delivery while reducing risk.</p>
<p>So, secOps refers to a company's integration of internal information security and IT operations procedures to enhance communication and lower risks.</p>
<h2 id="heading-the-sc-200-exam">The SC-200 Exam</h2>
<p>If you have a previous Cybersecurity background and want to broaden it with the latests technologies and implement SecOps practices. This can be a <strong>wise</strong> decision.
SC-200 is a robust security challenge that covers lots of Microsoft Security operations. <br /> </p>
<p>The exam focuses on two powerful Microsoft technologies: <strong>Defender &amp; Sentinel</strong>, as well as their integration with third-party solutions to protect your environment.</p>
<p>Your starting point could be my blog post about the tools mentioned above, on which you will spend the majority of your preparation time. So I just gave you a high-level overview of what you're going to see.</p>
<p>Check it out from <a target="_blank" href="https://blog.yahya-abulhaj.dev/cloud-security-sentinel-and-defender">here</a>.</p>
<h1 id="heading-structured-exam-material">Structured Exam Material</h1>
<div class="hn-table">
<table>
<thead>
<tr>
<td></td><td>Usage</td><td></td></tr>
</thead>
<tbody>
<tr>
<td><b>Material<b>🏗️</b></b></td><td><b>FREE<b></b></b></td><td><b>PAIED<b></b></b></td></tr>
<tr>
<td><a target="_blank" href="https://www.youtube.com/watch?v=7An7BB-CcQI">Understand Azure Sentinel</a></td><td>✔️</td><td></td></tr>
<tr>
<td><a target="_blank" href="https://www.youtube.com/watch?v=44lETUWEN50"> Microsoft Defender for Endpoint</a></td><td>✔️</td><td></td></tr>
<tr>
<td><a target="_blank" href="https://www.youtube.com/playlist?list=PLM3TOIlrnaI4hwmXTxrYGE665q-9fyTfB">Learn KQL</a></td><td>✔️</td><td></td></tr>
<tr>
<td><a target="_blank" href="https://www.youtube.com/watch?v=EJ4Fm_omTNI">Start Cram</a></td><td>✔️</td><td></td></tr>
<tr>
<td><a target="_blank" href="https://docs.microsoft.com/en-us/certifications/exams/sc-900">SC-900 Docs</a></td><td>✔️</td><td></td></tr>
<tr>
<td><a target="_blank" href="https://docs.microsoft.com/en-us/certifications/exams/sc-200">SC-200 Docs</a></td><td>✔️</td><td></td></tr>
<tr>
<td><a target="_blank" href="https://www.udemy.com/course/sc-200-microsoft-security-operations-analyst-y/">Udemy Course</a></td><td></td><td>✔️</td></tr>
<tr>
<td><a target="_blank" href="https://www.udemy.com/course/sc-200-microsoft-security-operations-analyst-exam-prep/">Udemy Course, Anand</a></td><td></td><td>✔️</td></tr>
</tbody>
</table>
</div><h1 id="heading-best-regards">Best regards,</h1>
]]></content:encoded></item></channel></rss>