stackmanager: 클라우드 정보의 또 다른 도구

7902 단어 showdevaws
저는 최근에 구축stackmanager을 시작했습니다. 이것은 클라우드 정보 창고를 관리하는 데 사용되는 소스 프로젝트입니다.
이미 많은 다른 도구들이 이 점을 실현할 수 있다. 나는 이미 그 중의 몇 가지를 사용하거나 시도했지만, 내가 원하는 작업 방식에 완전히 적합한 것은 하나도 없다.

기능 요구 사항


CloudFormation 스택 생성/업데이트를 위한 모든 구성을 단일 파일에서 관리


CloudFormationcreate-stack 명령에는 여러 가지 독립적인 값이 있습니다. CLI에서 스택 이름, 템플릿 파일, 매개 변수, 목표, 기능 등을 제공하는 것은 매우 번거로운 일입니다.

동일한 스택을 개발, 프로덕션 또는 다른 영역과 같은 다양한 환경에 배치하는 동시에 구성 중복 최소화


내가 작성한 거의 모든 클라우드 정보는 여러 개의 다른 환경 (일반적으로 다른 계정) 에 사용되며, 때로는 여러 지역에 배치되어 페일오버를 하기도 한다.

변경 세트를 사용하여 지금 적용 또는 나중에 적용 여부를 조정합니다.


변경 집합을 사용하면 현재 진행 중인 변경 사항을 미리 볼 수 있습니다. 특히 AWS Serverless Application Model 변환이나 CloudFormation 매크로를 사용하면 CloudFormation 서비스가 이 템플릿을 처리하기 전에 어떤 자원을 만들어야 할지 정확하게 알 수 없습니다.
일부 CI/CD 워크플로우에서는 변경 사항이 생산에 들어가기 전에 승인이 필요할 수 있으며 변경 세트를 사용하여 변경 내용을 미리 볼 수 있습니다.

진행 상태 기록


변경 세트의 요약을 인쇄하고 스택 업데이트가 성공했든 실패했든 CloudFormation 이벤트를 표시합니다.나는 샘이 이런 정보를 보여주는 방식을 정말 좋아한다.

Lambda 함수 지원


이것은 어느 정도 핵심 기능을 초과했지만, CloudFormation을 사용하여 Lambda 함수를 배치하는 프로젝트에서 이 글을 쓰기 시작했을 때(새 코드가 있을 때 S3 키가 바뀌고 업데이트를 촉발), SAM CLI와 같은 Lambda 함수를 구축, 업로드, 배치하는 도구를 사용할 수 있기를 바랍니다.하지만 더 일반적인 클라우드 정보 관리 및 CI/CD에 적합합니다.

비기능성 요구 사항


이것은 내가 작성한 첫 번째 이런 실용 프로그램이 아니지만, 이전의 버전은 내가 그것들을 작성한 고객에 속했다.여러 클라이언트에서 사용할 수 있고 선도적인 EDJE 인프라에 사용할 수 있는 소스 오픈 유틸리티를 만들고 싶습니다.
처음부터 Stack 관리자를 작성하면 이전에 작성한 내용을 개선할 수 있고 단원 테스트와 같은 무시된 내용을 포함할 수 있습니다.
설령 내가 최종적으로 코드 라이브러리에 기여한 유일한 사람이라 하더라도, 나는 일반적인 소스 프로젝트처럼 그것을 실행하고, 적당한 이정표에 도달할 때 문제, 요청, 발표를 열거하고 싶다.

1.0 달성


많은 개원 프로젝트가 1.0 버전에 이르지 못했지만, 나는 단지 상대적으로 완전하고 좋은 테스트를 거친 버전을 발표하고 싶을 뿐, 반드시 Stack 관리자가 할 수 있는 모든 일을 포함하지는 않는다.내가 1.0 이정표에 열거한 문제 목록에서 가장 완수하기 어려운 것은 받아들일 수 있는 코드 커버율을 얻는 것이다. 왜냐하면 나는Python 단원 테스트를 작성한 경험이 한계가 있기 때문이다. 특히 시뮬레이션에 있어서.

stackmanager 사용


여기에서 다시 쓰고 싶지 않습니다 README. 그러나stackmanager는 다음과 같은 작업을 수행할 수 있습니다.
$ stackmanager --profile dev --region us-east-1 \
build-lambda --source-dir integration/functions/python/hello_world/ --output-dir /c/dev/temp/ --runtime python3.7 \
upload --bucket stackmanager-lambda-files-us-east-1 --key python/hello_world.zip \
deploy --environment dev --config-file integration/functions/python/config.yaml --auto-apply

Building python3.7 Lambda function from integration/functions/python/hello_world/

Running PythonPipBuilder:ResolveDependencies
Running PythonPipBuilder:CopySource

Built Lambda Archive C:\dev\temp\hello_world.zip
2020-10-28 20:33:21 Found credentials in shared credentials file: ~/.aws/credentials

Uploaded C:\dev\temp\hello_world.zip to s3://stackmanager-lambda-files-us-east-1/python/hello_world.zip

Stack: d-StackManager-PythonFunction, Status: does not exist

Creating ChangeSet c8a1e3704d0da48f69903bafcaf239c86

Action    LogicalResourceId    ResourceType           Replacement
--------  -------------------  ---------------------  -------------
Add       FunctionRole         AWS::IAM::Role         -
Add       Function             AWS::Lambda::Function  -

Executing ChangeSet c8a1e3704d0da48f69903bafcaf239c86 for d-StackManager-PythonFunction

ChangeSet c8a1e3704d0da48f69903bafcaf239c86 for d-StackManager-PythonFunction successfully completed:

Timestamp                  LogicalResourceId              ResourceType                ResourceStatus      Reason
-------------------------  -----------------------------  --------------------------  ------------------  ---------------------------
2020-10-28 20:33:24-04:00  d-StackManager-PythonFunction  AWS::CloudFormation::Stack  REVIEW_IN_PROGRESS  User Initiated
2020-10-28 20:33:35-04:00  d-StackManager-PythonFunction  AWS::CloudFormation::Stack  CREATE_IN_PROGRESS  User Initiated
2020-10-28 20:33:39-04:00  FunctionRole                   AWS::IAM::Role              CREATE_IN_PROGRESS  -
2020-10-28 20:33:39-04:00  FunctionRole                   AWS::IAM::Role              CREATE_IN_PROGRESS  Resource creation Initiated
2020-10-28 20:33:53-04:00  FunctionRole                   AWS::IAM::Role              CREATE_COMPLETE     -
2020-10-28 20:33:56-04:00  Function                       AWS::Lambda::Function       CREATE_IN_PROGRESS  -
2020-10-28 20:33:57-04:00  Function                       AWS::Lambda::Function       CREATE_IN_PROGRESS  Resource creation Initiated
2020-10-28 20:33:57-04:00  Function                       AWS::Lambda::Function       CREATE_COMPLETE     -
2020-10-28 20:33:59-04:00  d-StackManager-PythonFunction  AWS::CloudFormation::Stack  CREATE_COMPLETE     -
이것은 Python Lambda 함수를 구축하여 zip 파일을 S3에 업로드하고 S3에서 이 파일을 사용하는 Cloud Formation 창고를 배치하여 변경 집합을 미리 보고 실행합니다.
이 경우 이 기능은 Lambda 함수인 SAM CLI와 유사하지만 stackmanager의 중점은 사실상 deploy 명령이다. 이 명령은 Lambda 함수뿐만 아니라 모든 CloudFormation 창고에 적용된다.
stackmanager의 핵심은 여러 환경의 설정을 봉인할 수 있는 프로필입니다.위에서 실행한 예제에서는 다음과 같은 구성 파일이 있습니다.
---
Environment: all
StackName: "{{ EnvironmentCode }}-StackManager-PythonFunction"
Parameters:
  Environment: "{{ Environment }}"
Tags:
  Application: StackManager
  Environment: "{{ Environment }}"
Template: integration/functions/python/template.yaml
Capabilities:
  - CAPABILITY_IAM
---
Environment: dev
Region: us-east-1
Variables:
  EnvironmentCode: d
이 간단한 예시에서 dev 환경과 all 환경 간의 계승은 특별히 유용하지는 않지만, 일단 내가 여러 개의 환경을 가지고 흔하고 유일한 매개 변수를 혼합하면 설정의 총량(편집할 단독 파일의 수량)을 확실히 줄일 수 있다.

스택 관리자가 잘 어울려요?


CloudFormation을 사용하고 있지만, 매개 변수 파일과 다른 매개 변수가 있습니다. CloudFormation을 실행하기 위해 사용하고 있다면, 혼란을 없애는 데 도움이 될 것이라고 생각합니다.
앞으로 보면 CDK가 CloudFormation 작성을 직접 탈락시킬 수도 있지만 현재는 CloudFormation이 많기 때문에 한동안 존재할 것이다.

좋은 웹페이지 즐겨찾기