<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arquivos cloudfront - Resenha do dev</title>
	<atom:link href="https://www.lucianojr.com/tag/cloudfront/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.lucianojr.com/tag/cloudfront/</link>
	<description>por Luciano Manerich</description>
	<lastBuildDate>Fri, 24 Feb 2023 13:43:48 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.2.2</generator>
	<item>
		<title>Rotas no Angular + S3 + CloudFront?</title>
		<link>https://www.lucianojr.com/rotas-no-angular-s3-cloudfront/</link>
					<comments>https://www.lucianojr.com/rotas-no-angular-s3-cloudfront/#comments</comments>
		
		<dc:creator><![CDATA[Luciano Manerich]]></dc:creator>
		<pubDate>Wed, 22 Feb 2023 19:34:01 +0000</pubDate>
				<category><![CDATA[Mão na massa]]></category>
		<category><![CDATA[Problemas]]></category>
		<category><![CDATA[angular]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[cloudfront]]></category>
		<category><![CDATA[s3]]></category>
		<guid isPermaLink="false">https://www.lucianojr.com/?p=910</guid>

					<description><![CDATA[<p>Durante a navegação sua aplicação está funcionando corretamente, mas ao atualizar a página, ou carregar o endereço da barra de favoritos você recebe o famoso...</p>
<p>O post <a rel="nofollow" href="https://www.lucianojr.com/rotas-no-angular-s3-cloudfront/">Rotas no Angular + S3 + CloudFront?</a> apareceu primeiro em <a rel="nofollow" href="https://www.lucianojr.com">Resenha do dev</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Durante a navegação sua aplicação está funcionando corretamente, mas ao atualizar a página, ou carregar o endereço da barra de favoritos você recebe o famoso erro 404 de página não encontrada? Esse problema ocorre ao usar rotas no Angular e hospedar a aplicação atrás de uma <a href="https://www.lucianojr.com/tag/cloudfront/">distribuição do CloudFront</a>.</p>



<span id="more-910"></span>



<p>Existe uma pequna configuração a ser feita no <a href="https://www.lucianojr.com/tag/cloudfront/">CloudFront</a> para enviar quaisquer links não encontrados como arquivos físicos no <a href="https://www.lucianojr.com/tag/s3/">S3</a> para sua aplicação interpretar e realizar a navegação por rotas.</p>



<p>Para simular o problema, vamos utilizar a <a href="https://angular.io/guide/router-tutorial" target="_blank" rel="noreferrer noopener">aplicação exemplo</a> para rotas Angular, mas fique a vontade para usar a sua e simplesmente testar a solução.</p>



<h2 class="wp-block-heading">Projeto Angular</h2>



<p>Após realizar o download do projeto, executei os seguintes comandos:</p>



<pre class="wp-block-code"><code>npm install
npm run build</code></pre>



<p>Ao finalizar, será criada a pasta &#8220;dist/&#8221; na raiz do seu projeto. Iremos subir todos os arquivos dessa página em um <a href="https://www.lucianojr.com/tag/s3/">Bucket S3</a>.</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-bucket-979x1024.png" alt="Lista de arquivos no bucket S3" class="wp-image-931" width="490" height="512" srcset="https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-bucket-979x1024.png 979w, https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-bucket-287x300.png 287w, https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-bucket-768x803.png 768w, https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-bucket.png 1134w" sizes="(max-width: 490px) 100vw, 490px" /></figure>



<h2 class="wp-block-heading">Aplicação</h2>



<p>Conseguimos acessar e utilizar toda a aplicação.</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-app-running-1024x620.png" alt="Aplicação Angular de exemplo de rota" class="wp-image-932" width="512" height="310" srcset="https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-app-running-1024x620.png 1024w, https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-app-running-300x182.png 300w, https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-app-running-768x465.png 768w, https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-app-running.png 1060w" sizes="(max-width: 512px) 100vw, 512px" /></figure>



<p>Mas, infelizmente, ao tentar atualizar a página ou acessar por um link de rota, recebemos o seguinte erro:</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-app-error-404-1024x280.png" alt="Erro do CloudFront para uma rota Angular" class="wp-image-933" width="768" height="210" srcset="https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-app-error-404-1024x280.png 1024w, https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-app-error-404-300x82.png 300w, https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-app-error-404-768x210.png 768w, https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-app-error-404-1536x419.png 1536w, https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-app-error-404.png 1590w" sizes="(max-width: 768px) 100vw, 768px" /></figure>



<p>Tudo bem, sem pânico, a solução para esse problema é muito simples. Mas primeiro, vamos entender por que ele acontence.</p>



<p>Ao navegar pelas rotas Angular, a aplicação utiliza a própria URL para servir como histórico e ponto de entrada direto na aplicação. Em outros servidores web como <a href="https://httpd.apache.org/" target="_blank" rel="noreferrer noopener">Apache</a> e <a href="https://www.nginx.com/" target="_blank" rel="noreferrer noopener">NGinx</a> existe uma configuração adicional para enviar a URL acessada para a aplicação Angular escolher fazer com ela. Sem essa configuração o servidor web irá simplementes tentar buscar o arquivo em disco.</p>



<h2 class="wp-block-heading">Configuração no CloudFront</h2>



<p>No <a href="https://www.lucianojr.com/tag/cloudfront/">CloudFront</a> é necessário exatamente a mesma configuração, para aplicá-la, faça o seguinte:</p>



<p>Vá até a sua distribuição do <a href="https://www.lucianojr.com/tag/cloudfront/">CloudFront</a>, navegue para a aba &#8220;Error Pages&#8221; e crie uma nova resposta customizada com os seguintes valores:</p>



<figure class="wp-block-image size-large is-resized is-style-default"><img decoding="async" src="https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-custom-error-response-1024x878.png" alt="Criação de uma resposta de erro customizada" class="wp-image-934" width="768" height="659" srcset="https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-custom-error-response-1024x878.png 1024w, https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-custom-error-response-300x257.png 300w, https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-custom-error-response-768x658.png 768w, https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-custom-error-response-1536x1317.png 1536w, https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-custom-error-response.png 1680w" sizes="(max-width: 768px) 100vw, 768px" /></figure>



<p>Vamos entender o motivo de cada configuração:</p>



<p>Mapeamos o erro 404 pois ele é o erro referente a um arquivo não encontrado fisicamente (não existe o arquivo &#8220;hero-list&#8221; no <a href="https://www.lucianojr.com/tag/s3/">Bucket S3</a>).</p>



<p>Customizamos então a resposta para carregar o arquivo &#8220;index.html&#8221; (arquivo inicial da aplicação Angular) e em seguida iremos informar ao navegador do usuário que não houve erro, por isso o novo código 200.</p>



<p>Assim carregaremos a aplicação angular normalmente com a URL que o usuário tentou acessar.</p>



<p>PS: Caso você possua uma tela de erro de permissão ou login customizada você pode criar mais uma resposta customizado para o erro 403 e tratar a rota no Angular.</p>
<p>O post <a rel="nofollow" href="https://www.lucianojr.com/rotas-no-angular-s3-cloudfront/">Rotas no Angular + S3 + CloudFront?</a> apareceu primeiro em <a rel="nofollow" href="https://www.lucianojr.com">Resenha do dev</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.lucianojr.com/rotas-no-angular-s3-cloudfront/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>AWS &#8211; Infraestrutura global</title>
		<link>https://www.lucianojr.com/introducao-aws/</link>
					<comments>https://www.lucianojr.com/introducao-aws/#respond</comments>
		
		<dc:creator><![CDATA[Luciano Manerich]]></dc:creator>
		<pubDate>Thu, 02 Feb 2023 20:30:37 +0000</pubDate>
				<category><![CDATA[Conceitos]]></category>
		<category><![CDATA[Visão geral]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[cloudfront]]></category>
		<category><![CDATA[ec2]]></category>
		<category><![CDATA[intro]]></category>
		<guid isPermaLink="false">http://127.0.0.1/?p=1</guid>

					<description><![CDATA[<p>Nessa primeira publicação quero trazer um dos conceitos mais básicos da infraestrutura AWS. Como a infraestrutura global é dividida entre regiões, zonas de disponibilidade e...</p>
<p>O post <a rel="nofollow" href="https://www.lucianojr.com/introducao-aws/">AWS &#8211; Infraestrutura global</a> apareceu primeiro em <a rel="nofollow" href="https://www.lucianojr.com">Resenha do dev</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Nessa primeira publicação quero trazer um dos conceitos mais básicos da infraestrutura AWS.</p>



<p>Como a infraestrutura global é dividida entre regiões, zonas de disponibilidade e pontos de presença da AWS ao redor do global.</p>



<span id="more-1"></span>



<h2 class="wp-block-heading">Regiões &#8211; Regions</h2>



<p>Regiões são localizações importantes onde a AWS está presente. O nível de região não é ainda um datacenter físico, mas um conjunto de duas ou mais zonas de disponibilidade.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><a href="https://aws.amazon.com/pt/about-aws/global-infrastructure/regions_az/?nc1=h_ls" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://www.lucianojr.com/wp-content/uploads/2023/02/sa-east-1-1024x958.png" alt="Região AWS em São Paulo - Brasil." class="wp-image-22" width="296" height="276" srcset="https://www.lucianojr.com/wp-content/uploads/2023/02/sa-east-1-1024x958.png 1024w, https://www.lucianojr.com/wp-content/uploads/2023/02/sa-east-1-300x281.png 300w, https://www.lucianojr.com/wp-content/uploads/2023/02/sa-east-1-768x718.png 768w, https://www.lucianojr.com/wp-content/uploads/2023/02/sa-east-1.png 1328w" sizes="(max-width: 296px) 100vw, 296px" /></a></figure></div>


<h2 class="wp-block-heading">Zonas de disponibilidade &#8211; Availability Zone</h2>



<p>Zonas de disponibilidade são a construção física de um datacenter. Como mencionado nas regiões, há um grupo de zonas de disponibilidade em cada região, como por exemplo, a região de São Paulo (sa-east-1).</p>



<p>A cidade de São Paulo conta com 3 zonas de disponibilidade e o padrão de nomenclatura para cada zona é o nome da região + uma letra, iniciando em A.</p>



<ul>
<li>sa-east-1a</li>



<li>sa-east-1b</li>



<li>sa-east-1c</li>
</ul>



<p>Cada zona de disponibilidade possuí uma rede física local, sendo nela que você criar seus servidores <a href="/tag/ec2/">EC2</a> para hospedar cada uma de suas aplicações.</p>



<p>Como há uma conexão física entre cada zona e entre todas as regiões, todos os serviços estão disponíveis em todas as regiões. Contudo, muitos dos dados trafegados entre regiões, e as vezes até mesmo entre zonas, pode haver uma cobrança adicional.</p>



<h2 class="wp-block-heading">Ponto de presença &#8211; AWS Edge Location</h2>



<p>Por fim, o último ponto da infraestrutura da AWS são os pontos de presença.</p>



<p>Eles nada mais são que pontos espalhados pelo globo com o único propósito de deixar seu conteúdo mais próximo do seu usuário.</p>



<p>Nos pontos de presença não é possível criar nenhum recurso AWS, pois eles são utilizados unicamente pelo <a href="/tag/cloudfront/">CloudFront</a> (Content Delivery Network &#8211; CDN da AWS) para armazenar o cache dos arquivos disponíveis em uma zona de disponibilidade.</p>



<p>Os pontos de presença vinculados a região de São Paulo são:</p>



<ul>
<li>Rio de Janeiro, Brasil</li>



<li>São Paulo, Brasil</li>



<li>Bogotá, Colômbia</li>



<li>Buenos Aires, Argentina</li>



<li>Santiago, Chile</li>
</ul>



<p>Reduzindo a latência, tempo entre a conexão do usuário e o servidor, em cada requisição. Porque ao invés de você se conectar diretamente à um servidor na região de Virginia do Norte (us-east-1), nos EUA, você se conecta no servidor mais próximo da AWS e a partir deste momento, o tráfego é feito pelo link dedicados que a AWS tem entre cada região.</p>
<p>O post <a rel="nofollow" href="https://www.lucianojr.com/introducao-aws/">AWS &#8211; Infraestrutura global</a> apareceu primeiro em <a rel="nofollow" href="https://www.lucianojr.com">Resenha do dev</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.lucianojr.com/introducao-aws/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
