uso | segurança | registro de alterações | apêndice
(alfa) Uma ferramenta para ajudar na criação de sites estáticos com Amazon Web Services (AWS).
Justificativa : Sites estáticos são divertidos. Implantar no S3 é pura alegria. O CloudFront transforma o dimensionamento em algo em que você nem pensa mais. Não há servidores para administrar; sem lágrimas para chorar. Configurar tudo, entretanto, não é tão simples. Confetti é uma tentativa de codificar as melhores práticas em um programa repetível usando CloudFormation e fornecer ferramentas úteis para cenários de implantação básicos e avançados.
[confetti/confetti " 0.2.1 " ] ; ; latest release
criando um site | sincronizando seu site | etapa final: DNS | adicionando subdomínios
O Confetti é empacotado como uma tarefa de inicialização. Isso ocorre principalmente porque o boot facilita a gravação de aplicativos de linha de comando no Clojure sem a necessidade de se preocupar com inicialização ou resolução de dependências.
O Confetti fornece dois comandos, no jargão de inicialização chamados de tarefas . A tarefa create-site
criará uma pilha CloudFormation com todos os recursos do seu site estático e salvará todas as informações importantes em um arquivo EDN no diretório atual.
Vejamos um exemplo de criação de um site e sincronização pela primeira vez.
Ficou confuso sobre as chaves de acesso? Confira a seção Segurança deste README.
Digamos que você queira implantar um site em my-app.com
. Para criar um bucket S3, uma distribuição do CloudFront e chaves de acesso restrito, você pode executar o seguinte:
boot -d confetti create-site --domain "my-app.com" --access-key XXX --secret-key YYY
Nota: o bit
-d confetti
garante que o Boot baixe o confete para que a tarefacreate-site
esteja disponível.
Exceção! Como você deseja usar um domínio simples/APEX, você deve usar o Route53 para DNS. (Você pode encontrar mais informações no Apêndice.) Tente novamente com o DNS ativado:
boot -d confetti create-site --domain "my-app.com" --access-key XXX --secret-key YYY --dns
Isso deve dar início ao processo. O primeiro feedback deve aparecer na sua tela. Em algum momento nenhum novo evento será impresso, mas o processo também ainda não retornou. O que você está esperando agora é a criação da sua distribuição CloudFront. Isso geralmente leva de 10 a 15 minutos.
Você pode encerrar o processo neste momento. Tudo está funcionando remotamente e não será interrompido. Um arquivo
.confetti.edn
é salvo em seu diretório de trabalho atual e, se estiver usando a tarefafetch-outputs
com credenciais suficientes, você poderá baixar todas as informações úteis a qualquer momento. (A tarefa também lhe dirá se a pilha ainda não está pronta.)
Após a conclusão da tarefa create-site
, você deverá encontrar um arquivo em seu diretório de trabalho atual: my-app-com.confetti.edn
. Seu conteúdo deve conter tudo o que é importante sobre seus recursos recém-provisionados:
{ :stack-id " arn:aws:cloudformation:us-east-1:297681564547:stack/my-app-com/xxx " ,
:bucket-name " my-app-com-sitebucket-3fu0w0729ndk " ,
:cloudfront-id " E3760XUWU2V9R7 " ,
:cloudfront-url " d3up0oy7r2svli.cloudfront.net " ,
:access-key " AAA " ,
:secret-key " BBB " ,
:website-url " http://my-app.com " ,
:hosted-zone-id " Z3KJWNUJTT8GHO " }
Agora está tudo pronto para a primeira implantação!
Agora a tarefa sync-bucket
entra em ação. Embora a tarefa forneça muitas maneiras diferentes de especificar o que carregar, mostraremos apenas a mais simples aqui: sincronizar um diretório local. Para fins de demonstração, vamos criar um diretório rapidamente:
mkdir my-app-site
echo "Hello World" > my-app-site/index.html
echo "About Us" > my-app-site/about.html
Agora vamos sincronizá-lo. Pegue os valores bucket-name
, access-key
e secret-key
do arquivo .confetti.edn :
boot -d confetti sync-bucket --bucket "my-app-com-sitebucket-3fu0w0729ndk"
--access-key AAA --secret-key BBB --dir my-app-site
;; or alternatively
boot -d confetti sync-bucket --confetti-edn your-site.confetti.edn --dir my-app-site
Isso fará upload index.html
e about.html
para seu intervalo. Para verificar se tudo deu certo, você pode navegar até a URL armazenada como cloudfront-url
no arquivo edn.
Existem muitas outras maneiras de especificar quais arquivos enviar (com metadados personalizados, se desejado), que não são abordadas neste guia. Consulte
boot sync-bucket --help
para obter detalhes.
Agora, a única etapa que falta é configurar o DNS corretamente. O que precisa ser feito aqui varia dependendo se você ativou a opção --dns
ou não. No exemplo acima, nós o habilitamos, então vamos abordar esse caso primeiro:
DNS com Route53: Como você tem uma configuração de domínio root/naked/apex, você decidiu usar DNS gerenciado pela AWS. Agora você precisa definir os servidores de nomes do domínio usado para os servidores de nomes da AWS. Eles são diferentes para diferentes zonas hospedadas, portanto, você precisa procurá-los no Console AWS.
Sem Route53: Ao não usar o Route53 a única coisa que você precisa fazer é adicionar uma entrada CNAME ao Zonefile do seu domínio que aponta para a distribuição Cloudfront.
Ambas as etapas variam de registrador de domínio para registrador de domínio, portanto, é recomendável verificar a documentação individual.
Quer SSL? Veja como habilitá-lo.
Digamos que você usou o Confetti para criar um site weloveparens.com
e agora deseja adicionar um site estático a um subdomínio desse domínio. Você pode simplesmente executar:
boot create-site --domain "shop.weloveparens.com" --dns --access-key FOO --secret-key BAR
Isso criará um Route53 RecordSet na HostedZone que foi criado anteriormente para você ao configurar weloveparens.com
. O bucket S3, a distribuição do CloudFront e assim por diante serão criados normalmente. Além disso, como sempre, tudo (incluindo o RecordSet) será criado como uma pilha CloudFormation, portanto, se você não precisar mais dela, basta excluir a pilha, deixando weloveparens.com
inalterado.
Para obter ajuda na linha de comando você sempre pode executar:
boot create-site --help
boot fetch-outputs --help
boot sync-bucket --help
Fique à vontade também para abrir questões para tirar dúvidas ou sugerir melhorias.
Fornecer suas chaves AWS para algum programa e apenas deixá-lo rodar é meio assustador, então esta seção tem como objetivo dar algum conforto em relação a isso.
create-site
criará uma pilha CloudFormation de acordo com um modelo definido em confetti-clj/cloudformation.--dry-run
.create-site
devem ter permissões para criar os recursos individuais listados no modelo CloudFormation. (No futuro, o Confetti poderá fornecer um snippet de política AWS IAM para que você possa criar um usuário que tenha todos os direitos de que o Confetti precisa.) A partir da versão 0.2.0
o comando create-site
criará um arquivo terminando em .confetti.edn
que contém todas as informações necessárias para manter seu site. As informações neste arquivo contêm segredos!
Atualização: cheguei à conclusão de que criar este arquivo é uma má ideia. As pessoas inevitavelmente irão comprometê-lo e divulgar as chaves de seu bucket S3. No futuro, gostaria apenas de imprimir algo em um formato que seja compreendido por direnv e recomendar env vars / direnv.
[confetti/cloudformation "0.1.6"]
, que traz as seguintes melhorias:confetti/s3-deploy
para melhorar a compatibilidade do Windows Reutilização de HostedZone: Criar uma nova HostedZone para cada site tem duas desvantagens:
Ao usar uma HostedZone para seu domínio raiz example.com
esses problemas são resolvidos e adicionar um novo site em demo.example.com
é apenas uma questão de adicionar um RecordSet. O Confetti agora tenta encontrar uma HostedZone existente e só adiciona um RecordSet se encontrar um.
Nova opção invalidation-paths
para a tarefa sync-bucket
. Anteriormente, os caminhos de invalidação eram determinados com base nos arquivos carregados. Agora você pode fornecer um conjunto personalizado. (#21 + #29)
Corrigido bug com novo método de fornecimento de opções por meio de um arquivo .confetti.edn
confetti-edn
, agora aceitamos ambas as versões (terminando com .confetti.edn
e apenas a parte anterior). Anteriormente era esperado que você fornecesse apenas a peça antes do sufixo .confetti.edn
confetti-edn
e da tarefa de fetch-outputs
create-site
fetch-outputs
[confetti/cloudformation "0.1.3"]
para ter :website-url
nas saídas da pilha, independentemente de Route53 ser usado ou nãofetch-outputs
se o Route53 não for usado fetch-outputs
que pode ser usada para baixar saídas de pilhas do Cloudformation. Anteriormente, os relatórios muitas vezes travavam e não salvavam as saídas da pilha de maneira adequada. Para contornar isso, agora você pode cancelar o relatório e chamar fetch-outputs
a qualquer momento para baixar as saídas.sync-bucket
agora fornece uma opção confetti-edn
que pode ser usada para fornecer a parte some-id de um {some-id}.confetti.edn
. As informações nesse arquivo serão então usadas em vez das opções de tarefa regulares.Se algo não estiver funcionando conforme o esperado, abra um problema. ?
Nota Se você receber erros 504 ao solicitar ativos de sua distribuição Cloudfront, verifique se realmente está usando o endpoint do site como origem. A política do Protocolo de Origem deve ser "Somente HTTP" como resultado do uso do endpoint do site.
O Cloudfront oferece suporte a domínios APEX, mas apenas se você usar os registros ALIAS
do Route53. Mais informações podem ser encontradas no anúncio oficial.
Essa limitação torna mais difícil automatizar configurações de domínio raiz (APEX), portanto, atualmente não há suporte para criar sites para domínios raiz sem também gerenciar DNS com Route53.