>> Apresentação e considerações

Fala galera, nesse primeiro post de inauguração do Blog vou fazer um passo a passo de como criar um site estático no Amazon S3 utilizando somente a AWS CLI.

Nesse post eu criarei o Bucket “rdglinuxwebsite” na região da Virgínia (us-east-1) para o meu site, lembre-se talvez esse nome não esteja disponível para fazer o processo, com isso indico que você mude o nome do Bucket para um nome da sua escolha substituindo tudo o que está como “rdglinuxwebsite” para o nome do Bucket que você criou no S3.

>> Pré-requisitos:

  • Máquina Linux com aws-cli/1.11.13 (Essa versão que utilizei no tutorial)
  • Possuir uma credencial (aws_access_key_id + aws_secret_access_key) com permissão para criar Buckets no S3 configurada na máquina.
    Instalar AWS CLI (Oficial)
  • O nome do seu Bucket no S3 deverá ser único na região

>> Primeiramente vamos criar o Bucket no S3

~# aws s3 mb s3://rdglinuxwebsite

>> Transformando o nosso Bucket em um website

Temos que transformar o Bucket em um website e com isso vamos setar a página inicial (index) e a página de erro.

~# aws s3 website s3://rdglinuxwebsite/ --index-document index.html --error-document error.html

>> Criando os arquivos do site

Nesse exemplo vamos criar os arquivos do nosso site para que possamos posteriormente visualizá-los no Browser

~# mkdir rdglinuxwebsite
~# cd rdglinuxwebsite/
~# echo "OK - BEM VINDO ao meu primeiro website publicado no S3" > index.html
~# echo "ERROR - Página não encontrada" > error.html

>> Enviando os arquivos do site para o Bucket

Vamos transferir os arquivos que criamos do diretório para o Bucket.

~# aws s3 sync . s3://rdglinuxwebsite/

>> Listando os arquivos no Bucket

Podemos ver na saída do comando os dois arquivos que foram “upados” para o S3.

~# aws s3 ls s3://rdglinuxwebsite/
2017-04-08 22:25:03 80 error.html
2017-04-08 22:25:03 82 index.html

>> Criando uma BucketPolicy

Vamos criar uma BucketPolicy com permissão “s3:GetObject”, essa Policy será aplicada no Bucket do website para dar a permissão para que o nosso site seja publicado. O comando abaixo criará um arquivo chamado “policy.json” que será utilizado para o input da policy em nosso Bucket.

vim  /tmp/policy.json
{
    "Version": "2008-10-17",
    "Statement": [
        {
          "Sid": "AddPerm",
          "Effect": "Allow",
          "Principal": {
              "AWS": "*"
          },
          "Action": "s3:GetObject", 
          "Resource": "arn:aws:s3:::rdglinuxwebsite/*"
       }
   ]
}
~# aws s3api put-bucket-policy --bucket rdglinuxwebsite --policy file:///tmp/policy.json

>> Vejamos como a nossa Policy ficou:

~# aws s3api get-bucket-policy --bucket rdglinuxwebsite
{
"Policy": "{\"Version\":\"2008-10-17\",\"Statement\":[{\"Sid\":\"AddPerm\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"*\"},\"Action\":\"s3:GetObject\",\"Resource\":\"arn:aws:s3:::rdglinuxwebsite/*\"}]}"
}

>> E agora, qual a URL para abrir meu site?

Existe um padrão definido na AWS para a URL de um site no S3:

http://[nome_do_bucket].s3-website.[regiao_aws].amazonaws.com/

Com isso o nosso site ficará assim:

http://rdglinuxwebsite.s3-website-us-east-1.amazonaws.com

>> E se eu quiser publicá-lo em meu domínio?

Você precisa criar uma entrada do tipo CNAME no seu DNS Público onde está o seu domínio apontando o seu domínio pra o seu site no S3.

seusite.com.br CNAME rdglinuxwebsite.s3-website-us-east-1.amazonaws.com.

>>Pronto! Já fiz a brincadeira, testei e funfou, como apago o meu Bucket?

Simples:

~# aws s3 --recursive rm s3://[nome_do_bucket]
~# aws s3api delete-bucket --bucket [nome_do_bucket] --region [regiao_aws]

Ficando assim:

~# aws s3 --recursive rm s3://rdglinuxwebsite
delete: s3://rdglinuxwebsite/error.html
delete: s3://rdglinuxwebsite/index.htm
~# aws s3api delete-bucket --bucket rdglinuxwebsite --region us-east-1

É isso ae galera, espero que tenham gostado, se gostou compartilhe!!!

>> Referências:

http://docs.aws.amazon.com/cli/latest/reference/s3/
http://docs.aws.amazon.com/cli/latest/reference/s3api/

Abraços!