사용법 | 보안 | 변경 로그 | 충수
(알파) Amazon Web Services(AWS)로 정적 사이트를 작성하는 데 도움이 되는 도구입니다.
이유 : 정적 사이트는 재미있습니다. S3에 배포하는 것은 정말 즐거운 일입니다. CloudFront는 더 이상 생각하지 못했던 확장 기능을 제공합니다. 관리할 서버가 없습니다. 울 눈물이 없습니다. 그러나 모든 것을 설정하는 것은 그렇게 간단하지 않습니다. Confetti는 CloudFormation을 사용하여 모범 사례를 반복 가능한 프로그램으로 인코딩하고 기본 및 고급 배포 시나리오를 위한 편리한 도구를 제공하려는 시도입니다.
[confetti/confetti " 0.2.1 " ] ; ; latest release
사이트 만들기 | 사이트 동기화 중 | 마지막 단계: DNS | 하위 도메인 추가
색종이 조각은 부팅 작업으로 패키지됩니다. 이는 주로 부트를 사용하면 부트스트래핑이나 종속성 해결에 대해 걱정할 필요 없이 Clojure에서 명령줄 앱을 쉽게 작성할 수 있기 때문입니다.
Confetti는 Boot-lingo에서 Tasks 라는 두 가지 명령을 제공합니다. create-site
작업은 정적 웹 사이트에 대한 모든 리소스가 포함된 CloudFormation 스택을 생성하고 모든 중요한 정보를 현재 디렉터리의 EDN 파일에 저장합니다.
처음으로 사이트를 만들고 동기화하는 예를 살펴보겠습니다.
액세스 키가 헷갈리시나요? 이 README의 보안 섹션을 확인하세요.
my-app.com
에 사이트를 배포한다고 가정해 보겠습니다. S3 버킷, CloudFront 배포 및 제한된 액세스 키를 생성하려면 다음을 실행할 수 있습니다.
boot -d confetti create-site --domain "my-app.com" --access-key XXX --secret-key YYY
참고:
-d confetti
비트는 Boot가 색종이를 다운로드하여create-site
작업을 사용할 수 있도록 합니다.
예외! Naked/APEX 도메인을 사용하려면 DNS에 Route53을 사용해야 합니다. (부록에서 자세한 내용을 확인할 수 있습니다.) DNS를 활성화한 상태에서 다시 시도해 보세요.
boot -d confetti create-site --domain "my-app.com" --access-key XXX --secret-key YYY --dns
그러면 프로세스가 시작됩니다. 첫 번째 피드백이 화면에 나타나야 합니다. 어떤 시점에서는 새로운 이벤트가 인쇄되지 않지만 프로세스도 아직 반환되지 않았습니다. 지금 기다리고 있는 것은 CloudFront 배포판을 만드는 것입니다. 일반적으로 10~15분 정도 소요됩니다.
이 시점에서 프로세스를 종료할 수 있습니다. 모든 것이 원격으로 실행되며 중단되지 않습니다.
.confetti.edn
파일은 현재 작업 디렉터리에 저장되며 충분한 자격 증명으로fetch-outputs
작업을 사용하는 경우 언제든지 유용한 정보를 모두 다운로드할 수 있습니다. (스택이 아직 준비되지 않았는지 여부도 작업에서 알려줍니다.)
create-site
작업이 완료되면 현재 작업 디렉터리인 my-app-com.confetti.edn
에서 파일을 찾아야 합니다. 해당 콘텐츠에는 새로 프로비저닝된 리소스에 대한 중요한 모든 내용이 포함되어야 합니다.
{ :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 " }
이제 첫 번째 배포를 위한 모든 준비가 완료되었습니다!
이제 sync-bucket
작업이 시작됩니다. 작업은 업로드할 항목을 지정하는 다양한 방법을 제공하지만 여기서는 가장 간단한 방법인 로컬 디렉터리 동기화를 보여 드리겠습니다. 데모 목적으로 디렉토리를 빠르게 생성해 보겠습니다.
mkdir my-app-site
echo "Hello World" > my-app-site/index.html
echo "About Us" > my-app-site/about.html
이제 동기화해 보겠습니다. .confetti.edn 파일에서 bucket-name
, access-key
및 secret-key
값을 가져옵니다.
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
그러면 index.html
및 about.html
버킷에 업로드됩니다. 모든 것이 성공했는지 확인하려면 edn 파일에 cloudfront-url
로 저장된 URL로 이동하면 됩니다.
이 가이드에서 다루지 않지만 업로드할 파일을 지정하는 방법(원하는 경우 사용자 지정 메타데이터 포함)이 더 많이 있습니다. 자세한 내용은
boot sync-bucket --help
참조하세요.
이제 누락된 유일한 단계는 DNS를 올바르게 설정하는 것입니다. 여기서 수행해야 할 작업은 --dns
옵션을 활성화했는지 여부에 따라 다릅니다. 위의 예에서는 이를 활성화했으므로 해당 사례를 먼저 다루겠습니다.
Route53을 사용하는 DNS: 루트/네이키드/apex 도메인 설정이 있으므로 AWS에서 관리형 DNS를 사용하기로 결정했습니다. 이제 AWS의 이름 서버에 사용했던 도메인의 이름 서버를 설정해야 합니다. 이는 호스팅 영역마다 다르므로 AWS 콘솔에서 조회해야 합니다.
Route53 없음: Route53을 사용하지 않을 때 해야 할 유일한 일은 Cloudfront 배포를 가리키는 도메인의 Zonefile에 CNAME 항목을 추가하는 것입니다.
이 두 단계는 모두 도메인 등록 기관마다 다르므로 개별 문서를 확인하는 것이 좋습니다.
SSL을 원하시나요? 활성화하는 방법은 다음과 같습니다.
Confetti를 사용하여 weloveparens.com
사이트를 만들고 이제 해당 도메인의 하위 도메인에 정적 사이트를 추가하려고 한다고 가정해 보겠습니다. 다음을 실행하면 됩니다.
boot create-site --domain "shop.weloveparens.com" --dns --access-key FOO --secret-key BAR
그러면 weloveparens.com
설정할 때 이전에 생성된 Route53 RecordSet가 HostedZone에 생성됩니다. S3 버킷, CloudFront 배포 등은 평소대로 생성됩니다. 또한 항상 그렇듯이 모든 것(RecordSet 포함)은 CloudFormation 스택으로 생성되므로 더 이상 필요하지 않은 경우 스택을 삭제하면 weloveparens.com
영향을 받지 않습니다.
명령줄에서 도움말을 보려면 언제든지 다음을 실행할 수 있습니다.
boot create-site --help
boot fetch-outputs --help
boot sync-bucket --help
또한 자유롭게 이슈를 열어 질문을 하거나 개선 사항을 제안해 보세요.
일부 프로그램에 AWS 키를 제공하고 이를 실행하도록 놔두는 것은 다소 두려운 일이므로 이 섹션에서는 이에 대한 약간의 위안을 제공하는 것을 목표로 합니다.
create-site
작업은 confetti-clj/cloudformation에 정의된 템플릿에 따라 CloudFormation 스택을 생성합니다.--dry-run
인수를 전달하면 됩니다.create-site
에 전달하는 자격 증명에는 CloudFormation 템플릿에 나열된 개별 리소스를 생성할 수 있는 권한이 있어야 합니다. (향후 Confetti는 AWS IAM 정책 조각을 제공하여 Confetti에 필요한 모든 권한을 가진 사용자를 생성할 수 있습니다.) 버전 0.2.0
부터 create-site
명령은 .confetti.edn
으로 끝나는 파일을 생성합니다. 여기에는 사이트를 유지하는 데 필요한 모든 정보가 포함됩니다. 이 파일의 정보에는 비밀이 포함되어 있습니다!
업데이트: 나는 이 파일을 만드는 것이 나쁜 생각이라는 결론에 도달했습니다. 사람들은 필연적으로 이를 커밋하고 S3 버킷에 대한 키를 공개하게 됩니다. 앞으로는 direnv가 이해할 수 있는 형식으로 무언가를 인쇄하고 대신 env vars / direnv를 권장하고 싶습니다.
[confetti/cloudformation "0.1.6"]
으로 업그레이드하면 다음과 같은 개선 사항이 제공됩니다.confetti/s3-deploy
Windows 호환성 향상 HostedZone 재사용: 각 사이트에 대해 새로운 HostedZone을 생성하면 두 가지 단점이 있습니다.
루트 도메인 example.com
에 하나의 HostedZone을 사용하면 이러한 문제가 해결되며, demo.example.com
에 새 사이트를 추가하는 것은 RecordSet만 추가하면 됩니다. Confetti는 이제 기존 HostedZone을 찾으려고 시도하고, 발견된 경우에만 RecordSet을 추가합니다.
sync-bucket
작업에 대한 새로운 invalidation-paths
옵션입니다. 이전에는 업로드한 파일을 기반으로 무효화 경로가 결정되었습니다. 이제 사용자 정의 세트를 제공할 수 있습니다. (#21 + #29)
.confetti.edn
파일을 통해 옵션을 제공하는 새로운 방법의 버그 수정
confetti-edn
옵션을 제공하면 이제 두 버전을 모두 허용합니다( .confetti.edn
으로 끝나고 그 앞 부분만). 이전에는 .confetti.edn
접미사 앞에 있는 부분만 제공해야 했습니다.confetti-edn
옵션 및 fetch-outputs
작업 사용을 제안하기 위해 Readme를 적용합니다.create-site
에서 호출되는 별도의 작업으로 보고를 리팩터링fetch-outputs
작업으로 이동:website-url
포함하려면 [confetti/cloudformation "0.1.3"]
로 업그레이드하세요.fetch-outputs
에 Cloudfront URL을 인쇄합니다. fetch-outputs
작업이 추가되었습니다. 이전에는 보고가 중단되어 스택 출력이 제대로 저장되지 않는 경우가 많았습니다. 이를 방지하려면 이제 보고를 취소하고 나중에 fetch-outputs
호출하여 출력을 다운로드할 수 있습니다.sync-bucket
작업은 {some-id}.confetti.edn
의 some-id 부분을 제공하는 데 사용할 수 있는 confetti-edn
옵션을 제공합니다. 그러면 해당 파일의 정보가 일반 작업 옵션 대신 사용됩니다.예상대로 작동하지 않는 것이 있으면 문제를 열어주세요. ?
참고 Cloudfront 배포에서 자산을 요청할 때 504 오류가 발생하는 경우 실제로 웹 사이트 엔드포인트를 원본으로 사용하고 있는지 다시 확인하세요. 웹 사이트 엔드포인트 사용으로 인해 원본 프로토콜 정책은 "HTTP 전용" 이어야 합니다 .
Cloudfront는 APEX 도메인을 지원하지만 Route53의 ALIAS
레코드를 사용하는 경우에만 해당됩니다. 자세한 내용은 공식 발표에서 확인할 수 있습니다.
이러한 제한으로 인해 루트(APEX) 도메인 설정을 자동화하기가 더 어려워지므로 현재 Route53으로 DNS를 관리하지 않고 루트 도메인에 대한 사이트를 생성하는 것은 지원되지 않습니다.