서버리스 프레임워크로 배포하는 동안 AWS S3 버킷을 절약하는 방법

문제:



서버리스 프레임워크를 통해 하나 이상의 서비스를 배포할 때 다음과 유사한 버킷을 생성합니다. <<your-service-name>>-<<stage>>-serverlessdeploymentbucket-12i2nulwb47go 여기에는 우리가 생성한 리소스의 Cloudformation 템플릿, 압축 코드 및 serverless-state.json 파일이 포함되어 있습니다.

처음에는 여러 서비스와 여러 환경(예: dev,qa,stg )을 관리할 때를 제외하고는 문제가 되지 않을 수 있습니다. 기본 제한인 버킷 100개 또는 하드 캡 제한인 버킷 1000개를 매우 쉽게 초과할 수 있습니다. 더 이상 서비스를 사용하지 않고 삭제하려는 경우 관리하기가 복잡합니다.



이 문제를 어떻게 해결합니까?



서버리스 프레임워크를 사용하면 다른 모든 서버리스 배포 버킷을 하나로 중앙 집중화하는 데 도움이 되는 사전 정의된 버킷을 정의할 수 있습니다. 플러그인은 서비스를 접두사로 여러 단계로 분리할 수 있을 만큼 충분히 숙련되어 있습니다.

버킷의 이름을 값으로 사용하여 S3 버킷과 파라미터 스토어를 생성하는 것부터 시작하겠습니다.

Note: I will use aws cdk to create these resources; feel free to skip this part. If you want to learn more about cdk or how to use it, I recommend following this CDK Workshop



서버리스 배포를 중앙 집중화하는 데 사용할 버킷을 만듭니다. 공용 읽기 액세스를 false로 설정하고 버전 관리를 false로 설정합니다(원하는 경우 활성화할 수도 있지만 이렇게 하면 모든 배포에 대해 서로 다른 버전의 객체가 생성되므로 권장되지 않을 수 있음).





<script id="gist-ltag"src="https://gist.github.com/bdllerena/448771914580b0d11506947315018dbd.js"/>


버킷의 이름을 값으로 가질 Parameter Store를 생성합니다. 이렇게 하면 다른 지역의 변수와 함께 값 이름을 사용할 수 있으므로 프로그래밍 방식으로 버킷 이름serverless.yml을 정의하는 데 도움이 됩니다.





serverless.yml 에서 우리가 만든 변수를 참조하여 코드가 상주하는 버킷을 나타내는 다음 행을 추가합니다.



Note: In most cases we don't need to install or add the serverless-deployment-bucket plugin




provider:
  name: aws
  runtime: go1.x
  stage: dev
  region: us-east-1
  deploymentBucket:
    name: ${ssm(us-east-1):/GLOBAL/DEPLOYMENT_BUCKET}


서비스를 배포한 후 DEV 및 QA 환경을 참조하는 두 개의 접두사가 생성되어 두 개의 버킷을 하나로 저장하는 것을 확인했습니다.





하지만 지역마다 다른 서비스를 제공한다면 어떻게 될까요? 이 경우 버킷은 서비스와 동일한 지역에 있어야 합니다. 그렇지 않으면 이 오류가 표시됩니다.





이 문제를 해결하려면 서비스와 동일한 지역에 버킷을 생성하고 해당 버킷의 이름을 참조할 또 다른 Parameter Store를 생성해야 합니다.



참조: Serverless Deployment Bucket

좋은 웹페이지 즐겨찾기