<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Anatolii</title>
    <description>The latest articles on DEV Community by Anatolii (@tolliik).</description>
    <link>https://dev.to/tolliik</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1113280%2F40f169c5-065a-4ad5-afc8-f638b949284c.png</url>
      <title>DEV Community: Anatolii</title>
      <link>https://dev.to/tolliik</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tolliik"/>
    <language>en</language>
    <item>
      <title>Quick note/fix: L2TP VPN is extremely slow in Windows 11 when using RDP</title>
      <dc:creator>Anatolii</dc:creator>
      <pubDate>Tue, 10 Oct 2023 08:15:50 +0000</pubDate>
      <link>https://dev.to/tolliik/quick-notefix-l2tp-vpn-is-extremely-slow-in-windows-11-when-using-rdp-504e</link>
      <guid>https://dev.to/tolliik/quick-notefix-l2tp-vpn-is-extremely-slow-in-windows-11-when-using-rdp-504e</guid>
      <description>&lt;h3&gt;
  
  
  It is a quick note/fix for myself and everyone.
&lt;/h3&gt;

&lt;h2&gt;
  
  
  Situation:
&lt;/h2&gt;

&lt;p&gt;Several users within our company have reported experiencing significant issues after updating to Windows 11 with the L2TP VPN, resulting in a prolonged connection and a black screen when attempting to use Remote Desktop Protocol (RDP).&lt;/p&gt;

&lt;h2&gt;
  
  
  Task:
&lt;/h2&gt;

&lt;p&gt;Find a solution and resolve the problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Action:
&lt;/h2&gt;

&lt;p&gt;I am not going too far so I just google it and found the solution on Microsoft Learn. So here is what we need to do to solve the problem:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;go to services.msc -&amp;gt; Routing and remote access -&amp;gt; change "start type" to Automatic (Delayed start) and click "Start"&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Result:
&lt;/h2&gt;

&lt;p&gt;After that, the problem with slow connection via LT2P VPN on Windows 11 is gone.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Thanks for reading and give you like if the post was helpful for you.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>windows11</category>
      <category>l2tp</category>
      <category>vpn</category>
      <category>fix</category>
    </item>
    <item>
      <title>How To: Host static website on AWS S3 + CloudFront</title>
      <dc:creator>Anatolii</dc:creator>
      <pubDate>Sun, 01 Oct 2023 10:54:21 +0000</pubDate>
      <link>https://dev.to/tolliik/how-to-host-static-web-site-on-aws-s3-cloudfront-cloudflare-dns-namecheap-bha</link>
      <guid>https://dev.to/tolliik/how-to-host-static-web-site-on-aws-s3-cloudfront-cloudflare-dns-namecheap-bha</guid>
      <description>&lt;p&gt;Hi. In this article, we will host a simple website on AWS S3.&lt;br&gt;
Also, we will use AWS Cloudfront for https and CDN.&lt;/p&gt;

&lt;p&gt;P.S. Hope it will not be a very long article, but if it does - sorry...&lt;/p&gt;

&lt;h2&gt;
  
  
  Situation:
&lt;/h2&gt;

&lt;p&gt;There is a project called &lt;a href=""&gt;The Cloud Resume Challenge&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The purpose of it is to create a "cloud resume" using public clouds like AWS, Azure, and GCP and to help you bridge the gap from cloud certification to cloud job. It incorporates many of the skills that real cloud and DevOps engineers use in their daily work.&lt;/p&gt;

&lt;p&gt;So, related to this challenge, one of the starting points is to create a static HTML page on an AWS S3 bucket and publish it to the Internet as a static website.&lt;/p&gt;

&lt;h2&gt;
  
  
  Task:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Create a simple HTML page with basic CSS styles&lt;/li&gt;
&lt;li&gt;Put into s3 bucket&lt;/li&gt;
&lt;li&gt;Create CloudFront distribution for serving &lt;strong&gt;https&lt;/strong&gt; request and &lt;strong&gt;CDN&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Registry new domain name for website on Namecheap (not covered in this article)&lt;/li&gt;
&lt;li&gt;Create a DNS record on Cloudflare and point it to the CloudFront distribution (not covered in this article)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Action
&lt;/h2&gt;

&lt;p&gt;So, Let's get started &lt;/p&gt;

&lt;h3&gt;
  
  
  Create a single HTML page with basic CSS styles
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;We need to create file &lt;strong&gt;index.html&lt;/strong&gt; for our site&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I don't want to describe much more here, just add several useful links for this step.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.w3schools.com/html/default.asp" rel="noopener noreferrer"&gt;HTML Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.w3schools.com/css/default.asp" rel="noopener noreferrer"&gt;CSS Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.w3schools.com/w3css/w3css_templates.asp" rel="noopener noreferrer"&gt;Example html+css templates&lt;/a&gt; - you can find here Resume/CV template as well&lt;/li&gt;
&lt;li&gt;&lt;a href="https://codepen.io/emzarts/pen/OXzmym" rel="noopener noreferrer"&gt;One more HTML Resume example&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also, we can ask ChatGPT to create a simple HTML page.&lt;/p&gt;

&lt;p&gt;As a result, we receive some code that we put in our &lt;strong&gt;index.html&lt;/strong&gt; file.&lt;/p&gt;

&lt;h3&gt;
  
  
  Put our index html page into the S3 bucket.
&lt;/h3&gt;

&lt;p&gt;Create an S3 bucket for our site:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to the AWS management console, find S3 in the search bar, and push the &lt;strong&gt;Create bucket&lt;/strong&gt; button&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc1q91t4iyau1g89nxuyx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc1q91t4iyau1g89nxuyx.png" alt="Create bucket"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Fulfill the Bucket name and AWS Region field:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bucket name&lt;/strong&gt; - The bucket name must be unique within the global namespace and follow the bucket naming rules. &lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html?icmpid=docs_amazons3_console" rel="noopener noreferrer"&gt;See rules for bucket naming&lt;/a&gt;. We can use the domain name of our future site for simplify as well as any random name.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Region&lt;/strong&gt; - General recommendations from AWS are "You can choose any AWS region that is geographically close to you to optimize latency, minimize costs, or address regulatory requirements. For example, if you reside in Europe, you might find it advantageous to create buckets in the EU (Ireland) or EU (Frankfurt) regions. &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Keep other settings by default and click on &lt;strong&gt;Create bucket&lt;/strong&gt; button. &lt;br&gt;&lt;br&gt;
If everything goes fine you will see your new bucket in the Buckets list.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbaxnn4r8vk8ohudz95kw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbaxnn4r8vk8ohudz95kw.png" alt="Create bucket button"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Upload our file &lt;strong&gt;index.html&lt;/strong&gt;:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;In the Buckets list click on the name of our bucket.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click on the &lt;strong&gt;Upload&lt;/strong&gt; button then on the &lt;strong&gt;Add files&lt;/strong&gt; button.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzhrp6al85z0x30glk2db.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzhrp6al85z0x30glk2db.png" alt="Upload"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fievvi8z8owfjf7lkerun.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fievvi8z8owfjf7lkerun.png" alt="Upload2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose our file from the browser window and click &lt;strong&gt;Ok&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click on the &lt;strong&gt;Upload&lt;/strong&gt; button.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fauto0bl7daakncyk4gb1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fauto0bl7daakncyk4gb1.png" alt="Upload3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We will see a confirmation message and our file in the bucket.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2jriizrf81pmjh9jnf4j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2jriizrf81pmjh9jnf4j.png" alt="confirmation message"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on the &lt;strong&gt;Close&lt;/strong&gt; button.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Create CloudFront distribution
&lt;/h3&gt;

&lt;p&gt;We need to create a CloudFront distribution to serve HTTP requests to our site (S3 bucket). &lt;/p&gt;

&lt;p&gt;Go to the &lt;strong&gt;CloudFront - Distributions.&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcwvkj6hyprgst2oocyhs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcwvkj6hyprgst2oocyhs.png" alt="Cloufront distribution"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on the &lt;strong&gt;Create Distribution&lt;/strong&gt; button. Here we need to choose from the list the origin which is our bucket arn name.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn671rcxy8eyntf3yjtx8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn671rcxy8eyntf3yjtx8.png" alt="Create Cloufront distribution"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Create origin control Settings. 
In the original access block click on &lt;strong&gt;Create control settings&lt;/strong&gt; and click on &lt;strong&gt;Create&lt;/strong&gt; (live all the settings by default).
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgnnbv2mvugqoru4t179i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgnnbv2mvugqoru4t179i.png" alt="Create origin control Settings"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faz0aawx6cx0ajei6n3z9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faz0aawx6cx0ajei6n3z9.png" alt="Create origin control Settings2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We need to not forget to update S3 Bucket policy. We can do it after creation distribution or during the creation. It does not matter.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgwj0vols4p5up5uqu3vt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgwj0vols4p5up5uqu3vt.png" alt="update S3 Bucket policy"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;At the &lt;strong&gt;WAF&lt;/strong&gt; section settings we choose &lt;strong&gt;Do not enable security protection&lt;/strong&gt; at this point in time. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmv10exhcdygg6fuzxhq7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmv10exhcdygg6fuzxhq7.png" alt="WAF"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We can use our own domain as an &lt;strong&gt;Alternate domain name (CNAME)&lt;/strong&gt; - it is optional and could be skipped.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fndirf1r2gktossjk1npj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fndirf1r2gktossjk1npj.png" alt="CNAME"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; In the field &lt;strong&gt;Default root object&lt;/strong&gt; set &lt;strong&gt;index.html&lt;/strong&gt; for serving all "/" requests to our index.html file.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm7qw19ais9h6jy50g8l9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm7qw19ais9h6jy50g8l9.png" alt="Default root object"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on &lt;strong&gt;Create distribution&lt;/strong&gt; button.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmzstb101zf546qj111ov.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmzstb101zf546qj111ov.png" alt="Create distribution*"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We will see the successful creation notification and reminder about adding the S3 bucket policy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0va2ogwcu8kncsyrzfoi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0va2ogwcu8kncsyrzfoi.png" alt="Successful creation notification"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;So click on the &lt;strong&gt;Copy policy&lt;/strong&gt; button and go to the S3 bucket - click on our bucket and go to the tab &lt;strong&gt;Permission&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fejootge6hqt31uqky5oa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fejootge6hqt31uqky5oa.png" alt="Permission"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on &lt;strong&gt;Edit bucket policy&lt;/strong&gt; and paste from the clipboard the previously copied policy. Then save it.
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5rvgd9ddgwynx2vqgqau.png" alt="Edit bucket policy 1"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc8j7rqnyp8mzwrxf1p7h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc8j7rqnyp8mzwrxf1p7h.png" alt="Edit bucket policy 2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flxmhm4keo1kgb30j0dxe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flxmhm4keo1kgb30j0dxe.png" alt="Edit bucket policy 3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go back to the Distributions and copy our &lt;strong&gt;Distribution domain name&lt;/strong&gt; like sldkf3ddds.clodfront.net&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxqa8vjgpk1yg5fdgm8lf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxqa8vjgpk1yg5fdgm8lf.png" alt="Distributions domain name"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Paste it in the new tab and you will see the content of the index.html page. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Invalidations.
&lt;/h3&gt;

&lt;p&gt;There is another thing that we need to remember - when we edit or add files in our S3 bucket we need also to create cache invalidations in the &lt;strong&gt;CloudFront distribution&lt;/strong&gt; to make our change available for everyone...&lt;br&gt;
We can do it by going to the &lt;strong&gt;Invalidations&lt;/strong&gt; tab in the CloudFront distribution settings.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fujjqzxsihs6cgtlbwqts.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fujjqzxsihs6cgtlbwqts.png" alt="Invalidations"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnkpgxfrlacghde7idti8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnkpgxfrlacghde7idti8.png" alt="Invalidations 2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgz7xnpmabqc79xs8hezr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgz7xnpmabqc79xs8hezr.png" alt="Invalidations 3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Result:
&lt;/h2&gt;

&lt;p&gt;So, now we have a personal static website that is hosted on AWS S3 and uses CloudFront for HTTPS requests.&lt;/p&gt;

&lt;p&gt;As part of &lt;a href=""&gt;The Cloud Resume Challenge&lt;/a&gt; I added my own domain to the CloudFront distribution Additional CNAME domain settings. &lt;a href="https://resume.codecloudmaster.space/" rel="noopener noreferrer"&gt;https://resume.codecloudmaster.space/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading and feel free to comment and critique.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to: Install ansible-semaphore with docker-compose on Synology NAS</title>
      <dc:creator>Anatolii</dc:creator>
      <pubDate>Sat, 15 Jul 2023 10:04:47 +0000</pubDate>
      <link>https://dev.to/tolliik/how-to-install-ansible-semaphore-with-docker-compose-on-synology-nas-3f41</link>
      <guid>https://dev.to/tolliik/how-to-install-ansible-semaphore-with-docker-compose-on-synology-nas-3f41</guid>
      <description>&lt;p&gt;Hi. First I want to add a short description and several links about what is Ansible and what is Ansible-semaphore.&lt;/p&gt;

&lt;p&gt;Ansible® is an open-source, command-line IT automation software application written in Python. It can configure systems, deploy software, and orchestrate advanced workflows to support application deployment, system updates, and more.&lt;br&gt;
&lt;a href="https://docs.ansible.com/ansible/latest/getting_started/index.html"&gt;https://docs.ansible.com/ansible/latest/getting_started/index.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ansible Semaphore is beautiful web interface for running Ansible playbooks.  &lt;a href="https://www.ansible-semaphore.com/"&gt;https://www.ansible-semaphore.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Situation:&lt;/strong&gt;&lt;br&gt;
I have an old Synology NAS, actually, it is Xpenology on a small PC.&lt;br&gt;
And I learning DevOps tools, like Ansible now, so I decided to use Ansible-Semaphore for the orchestration of my playbooks and inventory files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task:&lt;/strong&gt;&lt;br&gt;
At first sight, it is a simple task who works with Ansible and Docker before. We need to install Docker on Synology NAS and create Ansible-semaphore docker-compose file that we can find in the official documentation. But I had some problem and want to write about it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Action:&lt;/strong&gt;&lt;br&gt;
So the steps to do are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Install docker on Synology. This is a pretty simple step and there is a lot of documentation. So I skip it in this article. One thing that you need to know, is that with docker Synology's packet manager automatically installs and docker-compose, and this is pretty cool.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Login via ssh to our Synology NAS and create working folders for our project. (it is just an example, you can use your own hierarchy)&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd /volume1

mkdir docker  docker/docker-compose/ docker/docker-compose/semaphore

mkdir docker/semaphore docker/semaphore/etc

mkdir docker/mysql docker/mysql/mysql1

cd docker/docker-compose/semaphore

touch docker-compose.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Now we need to edit docker-compose.yml file for our containers. And for this, we will use the official Ansible-semaphore docker-compose file but with small changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also for Database we will use Mysql.&lt;/p&gt;

&lt;p&gt;Here is the final code (not ideal, but). Which will be explained below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;version: '3.8'
services:
  database:
    image: mysql:8
    container_name: Mysql
    restart: always
    volumes:
      - /volume1/docker/mysql/mysql1:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123456 #CHANGEME
      MYSQL_DATABASE: semaphore #CHANGEME
      MYSQL_USER: semaphore #CHANGEME
      MYSQL_PASSWORD: 123456 #CHANGEME
    networks:
      - web-network

  semaphore:
    ports:
      - 3000:3000
    image: semaphoreui/semaphore:latest
    user: "0:0" #here is a trick
    environment:
      SEMAPHORE_DB_USER: semaphore #CHANGEME
      SEMAPHORE_DB_PASS: 123456 #CHANGEME
      SEMAPHORE_DB_HOST: Mysql 
      SEMAPHORE_DB_PORT: 3306
      SEMAPHORE_DB: semaphore #CHANGEME
      SEMAPHORE_DB_DIALECT: mysql
      SEMAPHORE_ADMIN_PASSWORD: 123456 #CHANGEME
      SEMAPHORE_ADMIN_NAME: admin #CHANGEME
      SEMAPHORE_ADMIN_EMAIL: admin@localhost #CHANGEME
      SEMAPHORE_ADMIN: admin #CHANGEME
      SEMAPHORE_PLAYBOOK_PATH: /tmp/semaphore/
      SEMAPHORE_ACCESS_KEY_ENCRYPTION: 2zEAp6EtCT2RynaZmiV3ZzMd3Rcp7oM0 #CHANGEME
    volumes:
      - /volume1/docker/semaphore/etc:/etc/semaphore 
    networks:
      - web-network 

networks:
  web-network:
    driver: bridge

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see it is pretty simple (Database container and Semaphore container in one network), but there is one section that not mention in official docs.&lt;br&gt;
&lt;code&gt;user: "0:0"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;When I tried to do docker-compose up without it I got the error:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wW3Gr26_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6b6tg2qpey075j903l6b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wW3Gr26_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6b6tg2qpey075j903l6b.png" alt="Image description" width="800" height="176"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It looks like a problem with rights. The user in the Semaphore container has no permission to write on disk.&lt;/p&gt;

&lt;p&gt;I tried to do the same not on Synology but on Ubuntu server with Docker and got the same error.&lt;/p&gt;

&lt;p&gt;So after some research, I found the guy who has a video with a Semaphore tutorial and git repository. In the video, he did not mention my error but in his &lt;a href="https://github.com/ChristianLempa/boilerplates/blob/main/docker-compose/ansiblesemaphore/docker-compose.yaml"&gt;git&lt;/a&gt; repository I saw this line (that I added to my docker-compose to solve the problem) in the docker-compose file:&lt;br&gt;
&lt;code&gt;user: "${UID}:${GID}"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;As I understand (I still learn docker), our containers will use our local user id and group that have the necessary rights. &lt;em&gt;Push me if I misunderstand it in the comments&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When I added it to my Semaphore docker-compose file on my Ubuntu server, everything started two works. But on Synology NAS this command ${UID} does not return the user id, so I changed it to the root user id. Maybe it is not good from a security perspective, but it is my HomeLab and just only for test.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;So after all, in a folder with docker-compose file we run the command &lt;code&gt;docker-compose up&lt;/code&gt; 
And everything eventually started as expected.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt;&lt;br&gt;
As a result, we successfully deployed Ansible-semaphore in Docker container on Synology NAS. How to use it - it is  another topic.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Hd39OiAF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mjgwy3a46pf9lb2l0f0y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Hd39OiAF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mjgwy3a46pf9lb2l0f0y.png" alt="Image description" width="800" height="199"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you for reading.&lt;/p&gt;

&lt;p&gt;Feel free to live comments with critics or not. &lt;/p&gt;

</description>
      <category>beginners</category>
      <category>docker</category>
      <category>ansible</category>
      <category>semaphore</category>
    </item>
    <item>
      <title>How to: copy/move AWS EC2 instance from one account to another</title>
      <dc:creator>Anatolii</dc:creator>
      <pubDate>Thu, 06 Jul 2023 08:31:18 +0000</pubDate>
      <link>https://dev.to/tolliik/how-to-copymove-aws-ec2-instance-from-one-account-to-another-57dp</link>
      <guid>https://dev.to/tolliik/how-to-copymove-aws-ec2-instance-from-one-account-to-another-57dp</guid>
      <description>&lt;p&gt;Hello. It is my first post and it will be pretty simple.&lt;br&gt;
I am a beginner in AWS Cloud so if the solution does not belong to best practice - you can bit me in the comments)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Situation&lt;/strong&gt;:&lt;br&gt;
So, there was a situation when my AWS free tier ends in my old account. I have a running instance with web-server on EC2.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task:&lt;/strong&gt;&lt;br&gt;
And I needed to move my single AWS EC2 instance in this old account to another, newly created one.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Action:&lt;/strong&gt;&lt;br&gt;
The steps to do are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Export the EC2 Instance:&lt;/em&gt; Export the EC2 instance we want to copy by creating an Amazon Machine Image (AMI) of the instance. An AMI is a template for creating new EC2 instances. We can create an AMI by selecting the instance in the AWS Management Console, right-clicking on it, and choosing the "Create Image" option. Provide a name and description for the AMI.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frtfaejwy31pgf17598xc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frtfaejwy31pgf17598xc.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Share the AMI:&lt;/em&gt; After creating the AMI, we need to share it with the destination AWS account (my new acc, in this case). To do this, we go to the EC2 dashboard in the source (old) AWS account, select the AMI we just created, and choose the "Actions" menu. From there, select "Modify Image Permissions" and enter the account ID of the destination AWS account. Save the changes to make the AMI available in the destination account.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fljww83qtk1gmy3ie3t1e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fljww83qtk1gmy3ie3t1e.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;_Import the AMI:_Now we need to log in to the AWS Management Console using the destination (new) AWS account credentials. After that, we need to choose the same region as in the source (old) account and navigate to the EC2 dashboard.
Then select the "AMIs" option from the sidebar. Here, we should see the shared AMI from the source (old) account. Select the AMI and choose the "Launch" option to launch a new EC2 instance from the AMI. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fetmlls6ms50imtzdz3jm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fetmlls6ms50imtzdz3jm.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Configure the New EC2 Instance:&lt;/em&gt; The last but not least step is to follow the prompts to configure the new EC2 instance in the destination (new) account. We can choose the instance type, VPC, subnet, security groups, and other settings based on our requirements. Once configured, we can launch the instance.
P.S. We can delete AMI and snapshots on both accounts after the instance is launched for saving the costs proposed (of course we need to set up a backup for our data, but it is the other topic).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; As a result we moved our EC2 instance from one aws account to another in the same region.&lt;/p&gt;

&lt;p&gt;Thank you for reading. &lt;/p&gt;

&lt;p&gt;Later I will add a section to this post about how to copy an instance to another region, and how to create a new instance from our AMI in a new account using Terraform.&lt;/p&gt;

&lt;p&gt;Feel free to live comments with critics or not. &lt;/p&gt;

</description>
      <category>aws</category>
      <category>ec2</category>
      <category>cloud</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
