No mundo do Cloud Computing, é fundamental a implementação e gestão eficiente de recursos web. Este artigo mostra como configurar um site hospedado no Amazon S3 (Simple Storage Service), servido pelo Amazon CloudFront, e com recurso ao Terraform, uma ferramenta popular de Infraestrutura como Código (IaC). Mas, antes de mais, vamos conhecer os principais conceitos envolvidos.
O Amazon Web Services (AWS) é uma plataforma de cloud abrangente e amplamente adotada que oferece mais de 200 serviços a partir de centros de dados em todo o mundo. O AWS fornece uma variedade de serviços, incluindo capacidade de computação, opções de armazenamento e capacidade de rede, que contribuem para a flexibilidade e escalabilidade dos recursos da cloud.
Um bucket do Amazon S3 é um recurso de armazenamento em cloud pública disponível no serviço AWS S3. Tal como as pastas de ficheiros, os buckets são utilizados para armazenar objetos, que podem ser dados e metadados descritivos. O S3, conhecido pela sua escalabilidade e disponibilidade de dados, é normalmente utilizado para cópia de segurança e recuperação, arquivo de dados e alojamento web.
O Amazon CloudFront é um serviço de rede de entrega de conteúdo (CDN) rápido que fornece dados, vídeos, aplicações e API de forma segura a clientes de todo o mundo, com baixa latência e elevada velocidade de transferência. O CloudFront funciona perfeitamente com os serviços da AWS, como o S3, para acelerar a entrega de conteúdo web estático e dinâmico.
O Terraform, da HashiCorp, é uma ferramenta de software de Infraestrutura como Código que permite criar, alterar e melhorar a infraestrutura de forma segura e previsível. O Terraform gere serviços de cloud através de ficheiros de configuração declarativos, tornando-o uma ferramenta essencial para a infraestrutura de cloud moderna.
O Terraform destaca-se no domínio da IaC pela sua abordagem única à gestão e aprovisionamento de recursos. Na sua essência, o Terraform funciona com base em dois princípios fundamentais: idempotência e gestão de estado. Entender como o Terraform funciona e o papel do ficheiro “terraform.tfstate” é fundamental para valorizar o seu poder e as suas capacidades.
O Terraform utiliza uma abordagem declarativa, em que o utilizador define o estado desejado da sua infraestrutura em ficheiros de configuração. Segue-se uma breve descrição do seu funcionamento:
O ficheiro “terraform.tfstate” é fundamental na forma como o Terraform rastreia o estado da infraestrutura:
Antes de mergulharmos no processo de implementação, é essencial entendermos os atributos exclusivos do Terraform que o tornam uma ferramenta indispensável à gestão de infraestruturas modernas, especialmente no contexto de implementação de um site em AWS.
Idempotência: infraestrutura fiável e consistente
Uma das principais características do Terraform é a sua idempotência, a qual garante que a execução da mesma configuração várias vezes resulta no mesmo estado, sem criar alterações ou duplicações desnecessárias. Esta propriedade é crucial para manter a consistência e a fiabilidade na gestão de infraestruturas:
Agnosticismo: multi-cloud e multi-serviço
O Terraform é agnóstico em relação à cloud, o que significa que pode gerir recursos em vários fornecedores de cloud, bem como infraestruturas no local:
Poderoso na gestão de alterações
A capacidade do Terraform para gerir e aplicar alterações de forma incremental é particularmente poderosa. No contexto da implementação do nosso site:
Integração com CI/CD
A verdadeira força do Terraform num ambiente DevOps moderno é a sua compatibilidade com os pipelines de Continuous Integration and Continuous Deployment (CI/CD):
Antes de mergulhar nas etapas de implementação de um site com o Terraform no AWS, precisamos de configurar uma comunicação segura e eficiente entre o Terraform e o AWS. Este processo garante que o Terraform possa gerir os recursos do AWS de forma eficaz, aderindo às melhores práticas de segurança.
Criar um utilizador IAM dedicado
Para começar, é crucial criar um utilizador AWS Identity and Access Management (IAM) dedicado especificamente para o Terraform. Esse utilizador, ao qual podemos chamar “tf_s3_cloudfront”, terá permissões adaptadas aos recursos que o Terraform gerirá:
Configurar a política de IAM
A política de IAM para “tf_s3_cloudfront” deve ser tão restritiva quanto possível, sem deixar de permitir que o Terraform execute as ações necessárias. Com base nos requisitos, a política deve incluir permissões para S3 e CloudFront:

Gerir as credenciais AWS de forma segura
Depois de configurar o utilizador IAM, é fundamental gerir de forma segura as credenciais AWS (ID da chave de acesso e chave de acesso secreta):
A importância da segurança e do privilégio mínimo
A adesão às melhores práticas de segurança e ao princípio do privilégio mínimo é crucial na gestão de infraestrutura da cloud:
Ao seguires estes passos, garantes que o Terraform interage com o AWS de forma segura e eficiente, abrindo caminho para a implementação segura e eficaz do site.
Com as bases de segurança firmemente estabelecidas, podemos agora prosseguir para as etapas de implementação de um site no AWS utilizando o Terraform, confiantes de que a nossa infraestrutura não é apenas eficiente, mas também segura e compatível com as práticas recomendadas.
Agora, vamos explorar as etapas para fazer upload de um site para o AWS S3 e defini-lo como a origem de uma distribuição do CloudFront, usando o Terraform.
Comecemos por escrever os ficheiros de configuração do Terraform que definem os recursos AWS necessários. Isso envolve a criação de “main.tf”, “variables.tf”, “provider.tf” e outros ficheiros de configuração necessários:
Definimos um bucket S3 no Terraform para armazenar os ficheiros do website. Ativamos o alojamento do site no bucket e configuramos as definições de acesso público de acordo com as nossas necessidades.

Fazemos upload dos ficheiros estáticos do site (por exemplo, HTML, CSS, JavaScript) para o bucket S3, utilizando o recurso “aws_s3_object”. Esta etapa envolve a especificação do caminho do ficheiro e a garantia de que o tipo de conteúdo correto está definido.

Criamos uma distribuição do CloudFront com o bucket S3 como origem. Isso envolve a definição de um recurso de distribuição do CloudFront, a configuração da identidade do acesso de origem (OAI) e a configuração de comportamentos de cache.


Implementamos a invalidação de cache para garantir que as atualizações do site sejam refletidas imediatamente. Isto pode ser conseguido através de um “null_resource” com um fornecedor executável localmente no Terraform.

Explorada a implementação da configuração principal, vamos agora mostrar o papel das variáveis no Terraform.
As variáveis no Terraform funcionam como parâmetros personalizáveis, tornando as configurações da nossa infraestrutura mais adaptáveis e fáceis de modificar. Definidas no ficheiro “variables.tf”, estas variáveis podem ser atribuídas e alteradas sem alterar a lógica central dos nossos scripts Terraform.

Ao tirar partido destas variáveis, podemos personalizar facilmente os nossos recursos AWS, como especificar a região para a nossa distribuição CloudFront ou definir um prefixo para os nomes dos nossos buckets S3.
Nesta nossa demonstração, o foco principal é implementar o ficheiro “index.html”, que serve como ponto de entrada para o nosso site estático hospedado no AWS S3 e distribuído via CloudFront. Para tal, é crucial compreender a estrutura e as práticas recomendadas por trás dessa configuração.
O “index.html” fornecido é uma página web bem estruturada, concebida para mostrar “piadas aleatórias”. Vamos analisar os seus componentes principais.


Estrutura HTML
Secção “Head”
Estilos CSS internos
<style>: contém estilos CSS utilizados para estilizar o conteúdo HTML. Inclui:
Secção “Body”
JavaScript para conteúdo dinâmico
Este ficheiro “index.html” é um excelente exemplo de uma página web simples, mas interativa. Combina a estrutura HTML, o estilo CSS e a funcionalidade JavaScript para criar uma experiência user-friendly, em que os visitantes podem desfrutar de uma nova piada a cada clique no botão. O uso de API externas para conteúdo dinâmico e princípios de design responsivo torna-a uma página web moderna e envolvente.
Na nossa configuração do Terraform, este ficheiro é estrategicamente colocado no diretório “static/html” para manter o projeto organizado e simplificar o processo de implementação no AWS S3 e no CloudFront.
Colocamos o ficheiro “index.html” dentro do diretório “static/html”. Esta estrutura é uma boa prática pelas seguintes razões:
Utilizando o Terraform, automatizamos a implementação do ficheiro “index.html” no bucket S3. Eis um trecho da configuração do Terraform que possibilita isso mesmo:

1. Executar “terraform init”: iniciar o Terraform para fazer download dos plugins necessários e configurar o ambiente.

2. Executar “terraform plan”: delinear as alterações que o Terraform fará à infraestrutura AWS.


Interpretar o output do plano do Terraform
Executar o “terraform plan” é um passo crítico. Esse comando fornece uma visão geral das ações que o Terraform executará ao aplicar a nossa configuração. Vamos examinar um output típico que poderemos encontrar.
Plano: 10 para acrescentar, 0 para alterar, 0 para destruir
Este output pode ser decomposto da seguinte forma:
Importância do output do plano
3. Aplicar com “terraform apply”: aplicar as alterações para implementar o “index.html” no bucket S3 e configurar o CloudFront.


Depois de executar o “terraform apply”, o Terraform disponibiliza variáveis de output que fornecem informações importantes sobre os recursos criados ou modificados. Vamos dissecar o output da nossa execução do Terraform e entender como testar o nosso site num browser.


Além disso, como podes ver, não é possível aceder ao URL do bucket S3. Intencionalmente, está bloqueado para o mundo exterior e receberás uma mensagem de “acesso negado”. No nosso código, apenas o CloudFront pode aceder ao conteúdo no S3 como origem.

Vejamos como são tratadas as atualizações do nosso website:
Para ilustrar isto, vou alterar o “index.html” no texto do botão “Next Joke” - vou acrescentar pontos de exclamação !!!

Como vês, podemos constatar a mudança depois de usar o comando “terraform apply” no output. Além disso, o próprio Terraform gere a invalidação de cache para ver a nossa alteração no browser:


Se quiseres experimentar este projeto IaC, podes aceder ao código Terraform completo no meu GitHub. Basta clonares o repositório e seguires as instruções no arquivo README.md para configurares o teu próprio site estático no AWS S3 com o CloudFront.
Ao usares este repositório como ponto de partida, podes implementar e gerir rapidamente os teus sites estáticos no AWS com o Terraform. Não te esqueças de rever e adaptar o código aos teus requisitos específicos.
Boa programação!
À medida que o Cloud Computing continua a evoluir, ferramentas como o Terraform tornam-se indispensáveis para programadores e engenheiros. Não apenas simplificam as complexidades associadas à infraestrutura de cloud, como também garantem que essas infraestruturas sejam robustas, seguras e ágeis. Este guia serve como um testemunho das capacidades do Terraform, fornecendo um projeto para um alojamento web, baseado na cloud, eficiente e seguro.
Quer sejas um profissional experiente ou um novato em infraestrutura de cloud, as ideias e práticas descritas neste artigo oferecem um conhecimento valioso para aproveitar ao máximo o potencial do AWS e do Terraform. O percurso desde a configuração de um utilizador AWS com políticas IAM específicas até à visualização de um site em funcionamento realça o poder transformador da combinação dos serviços AWS com o processo de automatização do Terraform.
Olhando para os futuros avanços na tecnologia de cloud, a integração destas ferramentas e princípios desempenhará, sem dúvida, um papel fundamental na formação de paisagens digitais eficientes, seguras e escaláveis.
No mundo do Cloud Computing, é fundamental a implementação e gestão eficiente de recursos web. Este artigo mostra como configurar um site hospedado no Amazon S3 (Simple Storage Service), servido pelo Amazon CloudFront, e com recurso ao Terraform, uma ferramenta popular de Infraestrutura como Código (IaC). Mas, antes de mais, vamos conhecer os principais conceitos envolvidos.
O Amazon Web Services (AWS) é uma plataforma de cloud abrangente e amplamente adotada que oferece mais de 200 serviços a partir de centros de dados em todo o mundo. O AWS fornece uma variedade de serviços, incluindo capacidade de computação, opções de armazenamento e capacidade de rede, que contribuem para a flexibilidade e escalabilidade dos recursos da cloud.
Um bucket do Amazon S3 é um recurso de armazenamento em cloud pública disponível no serviço AWS S3. Tal como as pastas de ficheiros, os buckets são utilizados para armazenar objetos, que podem ser dados e metadados descritivos. O S3, conhecido pela sua escalabilidade e disponibilidade de dados, é normalmente utilizado para cópia de segurança e recuperação, arquivo de dados e alojamento web.
O Amazon CloudFront é um serviço de rede de entrega de conteúdo (CDN) rápido que fornece dados, vídeos, aplicações e API de forma segura a clientes de todo o mundo, com baixa latência e elevada velocidade de transferência. O CloudFront funciona perfeitamente com os serviços da AWS, como o S3, para acelerar a entrega de conteúdo web estático e dinâmico.
O Terraform, da HashiCorp, é uma ferramenta de software de Infraestrutura como Código que permite criar, alterar e melhorar a infraestrutura de forma segura e previsível. O Terraform gere serviços de cloud através de ficheiros de configuração declarativos, tornando-o uma ferramenta essencial para a infraestrutura de cloud moderna.
O Terraform destaca-se no domínio da IaC pela sua abordagem única à gestão e aprovisionamento de recursos. Na sua essência, o Terraform funciona com base em dois princípios fundamentais: idempotência e gestão de estado. Entender como o Terraform funciona e o papel do ficheiro “terraform.tfstate” é fundamental para valorizar o seu poder e as suas capacidades.
O Terraform utiliza uma abordagem declarativa, em que o utilizador define o estado desejado da sua infraestrutura em ficheiros de configuração. Segue-se uma breve descrição do seu funcionamento:
O ficheiro “terraform.tfstate” é fundamental na forma como o Terraform rastreia o estado da infraestrutura:
Antes de mergulharmos no processo de implementação, é essencial entendermos os atributos exclusivos do Terraform que o tornam uma ferramenta indispensável à gestão de infraestruturas modernas, especialmente no contexto de implementação de um site em AWS.
Idempotência: infraestrutura fiável e consistente
Uma das principais características do Terraform é a sua idempotência, a qual garante que a execução da mesma configuração várias vezes resulta no mesmo estado, sem criar alterações ou duplicações desnecessárias. Esta propriedade é crucial para manter a consistência e a fiabilidade na gestão de infraestruturas:
Agnosticismo: multi-cloud e multi-serviço
O Terraform é agnóstico em relação à cloud, o que significa que pode gerir recursos em vários fornecedores de cloud, bem como infraestruturas no local:
Poderoso na gestão de alterações
A capacidade do Terraform para gerir e aplicar alterações de forma incremental é particularmente poderosa. No contexto da implementação do nosso site:
Integração com CI/CD
A verdadeira força do Terraform num ambiente DevOps moderno é a sua compatibilidade com os pipelines de Continuous Integration and Continuous Deployment (CI/CD):
Antes de mergulhar nas etapas de implementação de um site com o Terraform no AWS, precisamos de configurar uma comunicação segura e eficiente entre o Terraform e o AWS. Este processo garante que o Terraform possa gerir os recursos do AWS de forma eficaz, aderindo às melhores práticas de segurança.
Criar um utilizador IAM dedicado
Para começar, é crucial criar um utilizador AWS Identity and Access Management (IAM) dedicado especificamente para o Terraform. Esse utilizador, ao qual podemos chamar “tf_s3_cloudfront”, terá permissões adaptadas aos recursos que o Terraform gerirá:
Configurar a política de IAM
A política de IAM para “tf_s3_cloudfront” deve ser tão restritiva quanto possível, sem deixar de permitir que o Terraform execute as ações necessárias. Com base nos requisitos, a política deve incluir permissões para S3 e CloudFront:

Gerir as credenciais AWS de forma segura
Depois de configurar o utilizador IAM, é fundamental gerir de forma segura as credenciais AWS (ID da chave de acesso e chave de acesso secreta):
A importância da segurança e do privilégio mínimo
A adesão às melhores práticas de segurança e ao princípio do privilégio mínimo é crucial na gestão de infraestrutura da cloud:
Ao seguires estes passos, garantes que o Terraform interage com o AWS de forma segura e eficiente, abrindo caminho para a implementação segura e eficaz do site.
Com as bases de segurança firmemente estabelecidas, podemos agora prosseguir para as etapas de implementação de um site no AWS utilizando o Terraform, confiantes de que a nossa infraestrutura não é apenas eficiente, mas também segura e compatível com as práticas recomendadas.
Agora, vamos explorar as etapas para fazer upload de um site para o AWS S3 e defini-lo como a origem de uma distribuição do CloudFront, usando o Terraform.
Comecemos por escrever os ficheiros de configuração do Terraform que definem os recursos AWS necessários. Isso envolve a criação de “main.tf”, “variables.tf”, “provider.tf” e outros ficheiros de configuração necessários:
Definimos um bucket S3 no Terraform para armazenar os ficheiros do website. Ativamos o alojamento do site no bucket e configuramos as definições de acesso público de acordo com as nossas necessidades.

Fazemos upload dos ficheiros estáticos do site (por exemplo, HTML, CSS, JavaScript) para o bucket S3, utilizando o recurso “aws_s3_object”. Esta etapa envolve a especificação do caminho do ficheiro e a garantia de que o tipo de conteúdo correto está definido.

Criamos uma distribuição do CloudFront com o bucket S3 como origem. Isso envolve a definição de um recurso de distribuição do CloudFront, a configuração da identidade do acesso de origem (OAI) e a configuração de comportamentos de cache.


Implementamos a invalidação de cache para garantir que as atualizações do site sejam refletidas imediatamente. Isto pode ser conseguido através de um “null_resource” com um fornecedor executável localmente no Terraform.

Explorada a implementação da configuração principal, vamos agora mostrar o papel das variáveis no Terraform.
As variáveis no Terraform funcionam como parâmetros personalizáveis, tornando as configurações da nossa infraestrutura mais adaptáveis e fáceis de modificar. Definidas no ficheiro “variables.tf”, estas variáveis podem ser atribuídas e alteradas sem alterar a lógica central dos nossos scripts Terraform.

Ao tirar partido destas variáveis, podemos personalizar facilmente os nossos recursos AWS, como especificar a região para a nossa distribuição CloudFront ou definir um prefixo para os nomes dos nossos buckets S3.
Nesta nossa demonstração, o foco principal é implementar o ficheiro “index.html”, que serve como ponto de entrada para o nosso site estático hospedado no AWS S3 e distribuído via CloudFront. Para tal, é crucial compreender a estrutura e as práticas recomendadas por trás dessa configuração.
O “index.html” fornecido é uma página web bem estruturada, concebida para mostrar “piadas aleatórias”. Vamos analisar os seus componentes principais.


Estrutura HTML
Secção “Head”
Estilos CSS internos
<style>: contém estilos CSS utilizados para estilizar o conteúdo HTML. Inclui:
Secção “Body”
JavaScript para conteúdo dinâmico
Este ficheiro “index.html” é um excelente exemplo de uma página web simples, mas interativa. Combina a estrutura HTML, o estilo CSS e a funcionalidade JavaScript para criar uma experiência user-friendly, em que os visitantes podem desfrutar de uma nova piada a cada clique no botão. O uso de API externas para conteúdo dinâmico e princípios de design responsivo torna-a uma página web moderna e envolvente.
Na nossa configuração do Terraform, este ficheiro é estrategicamente colocado no diretório “static/html” para manter o projeto organizado e simplificar o processo de implementação no AWS S3 e no CloudFront.
Colocamos o ficheiro “index.html” dentro do diretório “static/html”. Esta estrutura é uma boa prática pelas seguintes razões:
Utilizando o Terraform, automatizamos a implementação do ficheiro “index.html” no bucket S3. Eis um trecho da configuração do Terraform que possibilita isso mesmo:

1. Executar “terraform init”: iniciar o Terraform para fazer download dos plugins necessários e configurar o ambiente.

2. Executar “terraform plan”: delinear as alterações que o Terraform fará à infraestrutura AWS.


Interpretar o output do plano do Terraform
Executar o “terraform plan” é um passo crítico. Esse comando fornece uma visão geral das ações que o Terraform executará ao aplicar a nossa configuração. Vamos examinar um output típico que poderemos encontrar.
Plano: 10 para acrescentar, 0 para alterar, 0 para destruir
Este output pode ser decomposto da seguinte forma:
Importância do output do plano
3. Aplicar com “terraform apply”: aplicar as alterações para implementar o “index.html” no bucket S3 e configurar o CloudFront.


Depois de executar o “terraform apply”, o Terraform disponibiliza variáveis de output que fornecem informações importantes sobre os recursos criados ou modificados. Vamos dissecar o output da nossa execução do Terraform e entender como testar o nosso site num browser.


Além disso, como podes ver, não é possível aceder ao URL do bucket S3. Intencionalmente, está bloqueado para o mundo exterior e receberás uma mensagem de “acesso negado”. No nosso código, apenas o CloudFront pode aceder ao conteúdo no S3 como origem.

Vejamos como são tratadas as atualizações do nosso website:
Para ilustrar isto, vou alterar o “index.html” no texto do botão “Next Joke” - vou acrescentar pontos de exclamação !!!

Como vês, podemos constatar a mudança depois de usar o comando “terraform apply” no output. Além disso, o próprio Terraform gere a invalidação de cache para ver a nossa alteração no browser:


Se quiseres experimentar este projeto IaC, podes aceder ao código Terraform completo no meu GitHub. Basta clonares o repositório e seguires as instruções no arquivo README.md para configurares o teu próprio site estático no AWS S3 com o CloudFront.
Ao usares este repositório como ponto de partida, podes implementar e gerir rapidamente os teus sites estáticos no AWS com o Terraform. Não te esqueças de rever e adaptar o código aos teus requisitos específicos.
Boa programação!
À medida que o Cloud Computing continua a evoluir, ferramentas como o Terraform tornam-se indispensáveis para programadores e engenheiros. Não apenas simplificam as complexidades associadas à infraestrutura de cloud, como também garantem que essas infraestruturas sejam robustas, seguras e ágeis. Este guia serve como um testemunho das capacidades do Terraform, fornecendo um projeto para um alojamento web, baseado na cloud, eficiente e seguro.
Quer sejas um profissional experiente ou um novato em infraestrutura de cloud, as ideias e práticas descritas neste artigo oferecem um conhecimento valioso para aproveitar ao máximo o potencial do AWS e do Terraform. O percurso desde a configuração de um utilizador AWS com políticas IAM específicas até à visualização de um site em funcionamento realça o poder transformador da combinação dos serviços AWS com o processo de automatização do Terraform.
Olhando para os futuros avanços na tecnologia de cloud, a integração destas ferramentas e princípios desempenhará, sem dúvida, um papel fundamental na formação de paisagens digitais eficientes, seguras e escaláveis.