1.9.87 • Published 3 months ago

@taktikorg/maiores-architecto v1.9.87

Weekly downloads
-
License
MIT
Repository
github
Last release
3 months ago

@cats-cradle

CI Code Quality Codacy Coverage Docs GitHub Stars

The problem

Running multiple applications in the cloud without a solid architectural framework is akin to constructing a house without blueprints - it invites chaos. While many resources focus solely on single-application setups, cloud architecture encompasses an entire city, not just one building. Without a coherent plan in place, any attempt to make changes becomes a daunting task.

This solution

This cloud architecture focuses on modern DevOps practices on AWS^1. This approach transcends individual projects; we're laying the groundwork for the entire landscape of enterprise software on AWS.

It's a practical demonstration featuring tangible code, driving a cooperative RPG.

Features

The below features outline the principles and standards applicable to this repository. Each piece contributes harmoniously to the overall cityscape we're constructing.

A package base monorepo approach is preferred as to create a clear separation in layers. Microsoft backed Rush was selected over Nx, Lerna, Turbo, etc. for monorepo management. Nx is also suitable, but rush has worked fine so far.

The code is divided into several categories: libraries, platform, services, middleware, and clients. Each is further defined in there retrospective folders. When it comes to individual package files, those that typically change in tandem SHOULD generally be kept together. The organization of code SHOULD be based on features. All project dependencies MUST be unidirectional dependencies.

We selected AWS as our Infrastructure as a Service (IaaS) provider because of the advantages of vendor lock-in, allowing us access to a diverse array of standardized services. In this project, prioritizing these benefits takes precedence over maintaining cloud agnosticism. We anticipate potential project failure before AWS, and we've accounted for the potential cost of migrating between IaaS providers. Our approach involves intentional structuring of layers and relies primarily on features offered by multiple cloud providers.

The entire infrastructure is defined as code, allowing for version control, easy replication, and consistent environments across different stages of the development lifecycle. All Infrastructure as Code MUST be defined as or compile to CloudFormation templates.

Getting Started

Setting up Development Environment

The quickest way to start a develop environment is by clicking open in Github Codespaces. To actually save and commit changes back it is recommended to forking the repo .

Open in GitHub Codespaces

Alternatively, git clone and install locally using a devcontainer. It's possible to install without a container using the Dockerfile as guidance on package to install.

Flow Chart

Implementing AWS Multi-Account Architecture

These steps only need to be performed once by the platform team to initalize the IaaS.

  1. Setup AWS Org Formation.

  2. Login via SSO, bootstrap deployments, deploy platform, deploy services, and then deploy clients.

    rush sso
    rush cdk:bootstrap
    rush cdk:deploy --to tag:deploy-platform
    rush cdk:deploy --to tag:services
    rush cdk:deploy --to tag:middleware
    rush cdk:deploy --to tag:clients
  3. Login via SSO to tools account and then deploy tools.

    rush sso -p tools
    rush cdk:bootstrap
    rush cdk:deploy --to tag:deploy-tools

Documentation

Documentation SHOULD be maintained where it will be looked for. A README.md file SHOULD be added to explain each project and important folder structures. README.md files instructions should adhere to RFC 2119^2. Any code that isn't self-documenting MUST be accompanied by documentation. Tsdoc MAY be selected as a standard for writing Typescript documentation. Typedoc MAY be selected to compile documentation as code.

Note Use rush help for information on builtin commands.

Contributing

PRs Welcome

We welcome contributions of any size to this open-source project. Please follow the code of conduct when contributing.

Pull requests and bug reports are welcome on GitHub at https://github.com/taktikorg/maiores-architecto.

  1. Checkout a new branch from main using git.

    git checkout -b feature/improve-readme
  2. Work on changes (e.g. fix a bug or add a new feature). Test-driven development encouraged.

    rushx dev
    rushx test
  3. Stage and commit changes using conventional commits.

    git add .
    git commit -m 'doc: fix spelling of computers'
  4. (Optional) If changing a library that is published to NPM, document semantic version changes, generate Changelogs, and commit changes.

    rush change
    rush version --bump
    git commit -m 'chore: bump change log'
  5. Push code and open a PR. Celebrate contributing to @cats-cradle.

    git push

Acknowledgements

License

Packages available on NPM are MIT licensed. Packages without a specific license have not yet been developed with reuse in mind and are primarily maintained for the game. Simply remove these projects when setting up your architecture.

^1: Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations Paperback – Illustrated, March 27, 2018 by Nicole Forsgren PhD (Author), Jez Humble (Author), Gene Kim (Author).

^2: This document adheres to the guidelines outlined in RFC 2119, which defines the standard interpretations of key words used in IETF documents. These key words include "MUST", "MUST NOT", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL". The usage of these words in this document follows the specifications set forth in RFC 2119, ensuring clarity and consistency in the requirements and recommendations presented herein.

jQueryfindLastIndexUint8ArrayRFC-6455pushcss variablea11ydescriptionbabelstatelessloggerfnmatchstylesheetfiledeepcopyloadingmapreducees-abstractebsnodejscss nestingrandomfluxFloat64Arrayl10nestreehashfunctionshasOwnPropertymomentprunejoijavascriptcolumnbabel-coreidentifiersloadbalancingpathcurlmockredactvalidutilitiestrimEndbundlingtyped arraygetOwnPropertyDescriptorflatsignalcompareArray.prototype.containsUint32ArrayshimtextstylesfastcopyYAMLiteratorstreamsprotogradients css3variablesconstReflect.getPrototypeOftesterArrayBuffer.prototype.sliceapireactES2022circularcolorstypeerrorignorehookscloudwatchownwalk.gitignorequoteObject.entrieswindowamazonreadcachecss-in-jspasswordlogCSSStyleDeclarationtranspilerapidvalueHyBidropcomputed-typesmanagergdprcss lesscodeshookformidlepersistent__proto__statusoptimistpluginhigher-orderless compiler.envuninstallminimallrudatemkdirpmockingfull-widthajvcall-bindsuperstructcallbindes8trimStartyamlexpressionclonereact-testing-libraryhandlernativepicomatchcryptosliceparserchannelcollection.es6espreesesforEachArrayenvironmentcommand-lineexecutevarlibphonenumbervaluesdependenciestc39autoprefixerdeepcloneauthES2017emitObject.ismixinsurlselfsortedrequireEScoercibleconfiges6polyfilldependency managerscheme-validationtypedarrayjshintfast-deep-copytranspilercloudfrontnpmignorefigletpinodotenvmatchES7flagerrorqueueES2021asyncpostcss-pluginbinarymulti-packageES2015importexportfast-copystringifierpnpm9symlinkString.prototype.matchAllfastreducefront-endString.prototype.trimes2015SymbolspecESnextformattingRegExp.prototype.flagsmobilemakefastifyroutingArray.prototype.findLastcommandsigtermwriteinternal slotarraypostcsssameValueZerogetoptpipegradients csslivevalidationtoolkitjsRxJSredux-toolkitSetWebSocketsstoragegatewayflagsfpcloudtrailinvariantStreamassertionextraiterateBigInt64ArraybinariesjapaneseoutputeslintrecursivespinnerpreprocessorvalidatorrdsUint8ClampedArraytslibhasArrayBuffer#sliceObjectruntimetypedclasseseslintconfigxtermObject.assignglobalsjwttypeofvalidateECMAScript 2018preserve-symlinksexeccollectionimportdescriptorsparsetrimLeftutildeep-copychromeES3removeoffsetchineseuploadtimefast-deep-clonestylinglockfileserviceeventDispatcherJSONcompilercommandersimpledbtypesafees2016lengthSymbol.toStringTaginputviewObject.getPrototypeOfmatchesreact posevariables in cssramdaprivate datapoint-freereact animationartprotocol-buffersio-tspatchschemeRxmacosobjconsumeinternalarktypereact-componenttoobjectflatMapjsdomgetPrototypeOfsuperagentassigngetterreal-timeomitiamcjkdataInt16Arrayharmonygitignorettyjsxpackage.jsontypanionWeakMapentrieses7shrinkwrapregexeslintpluginURLSearchParamsec2takecurriednested cssmodulespringpopmotionbddchildvarschecksideyupframerpurebindaccessibilitycopysignalsgraphqldiff@@toStringTagobjectreusetrimRightreducerstablecolorargvlesshasOwnintrinsic256less mixinselectronwgetfastclonestyled-componentsbrowser[[Prototype]]authenticationformrequestrulestypedarraysTypeScripterror-handlingassertsbcryptObservablesglobal objectbintddserializerJSON-SchemaES2023class-validatordefinelocalelmlintMapconcatnumberdeepshamsomeeslint-plugineveryconsolegenericspropertiesspeedfindefficientes-shim APIastwidthregular expressionautoscalinginterruptsterminaleffect-tsfunctionalES5propawesomesauceroute53flattenreduxtestingpackagesArray.prototype.includesfantasy-landmovelinkfulldayjsonceObject.valuesObject.keysvisualbyteLengthglobalThissnssequenceES6filterredirectelbfindLastbootstrap cssReactiveXprettyfile systemtostringtagincludespromisearraysajaxlesscsscore-jsacornECMAScript 2016typelanguagelazycallboundcssdynamodbenvrgbPromisehardlinkssetterbufferes2018diriterationworkflowtoSortedwritablejson-schemainstallphonefullwidthcertificatesdomspinnersexitcliconcatMapwafproxys3dataViewcorecall-boundieprivategroupFunction.prototype.namepyyamlpropertyservermake dires5es2017elasticachelocationbuffers
1.9.87

3 months ago

1.9.86

3 months ago

1.9.85

3 months ago

1.9.84

4 months ago

1.9.83

4 months ago

1.9.82

4 months ago

1.9.81

4 months ago

1.8.81

4 months ago

1.8.80

4 months ago

1.8.79

4 months ago

1.8.78

4 months ago

1.8.77

4 months ago

1.8.76

4 months ago

1.8.75

4 months ago

1.7.75

4 months ago

1.7.74

4 months ago

1.7.73

4 months ago

1.7.72

4 months ago

1.7.71

4 months ago

1.7.70

4 months ago

1.7.69

4 months ago

1.7.68

4 months ago

1.7.67

4 months ago

1.7.66

4 months ago

1.7.65

4 months ago

1.7.64

4 months ago

1.7.63

4 months ago

1.6.63

4 months ago

1.6.62

4 months ago

1.6.61

4 months ago

1.5.61

4 months ago

1.5.60

4 months ago

1.5.59

4 months ago

1.5.58

5 months ago

1.5.57

5 months ago

1.5.56

5 months ago

1.4.56

5 months ago

1.4.55

5 months ago

1.4.54

5 months ago

1.4.53

5 months ago

1.4.52

5 months ago

1.4.51

5 months ago

1.4.50

5 months ago

1.4.49

5 months ago

1.4.48

5 months ago

1.4.47

5 months ago

1.4.46

5 months ago

1.4.45

5 months ago

1.4.44

5 months ago

1.4.43

5 months ago

1.4.42

5 months ago

1.3.42

5 months ago

1.3.41

5 months ago

1.3.40

5 months ago

1.3.39

5 months ago

1.3.38

5 months ago

1.3.37

5 months ago

1.3.36

5 months ago

1.3.35

5 months ago

1.3.34

5 months ago

1.3.33

5 months ago

1.3.32

5 months ago

1.3.31

5 months ago

1.3.30

6 months ago

1.3.29

6 months ago

1.3.28

6 months ago

1.2.28

6 months ago

1.2.27

6 months ago

1.2.26

6 months ago

1.2.25

6 months ago

1.2.24

6 months ago

1.2.23

6 months ago

1.2.22

6 months ago

1.2.21

6 months ago

1.2.20

6 months ago

1.2.19

6 months ago

1.2.18

6 months ago

1.1.18

6 months ago

1.1.17

6 months ago

1.1.16

6 months ago

1.1.15

6 months ago

1.1.14

6 months ago

1.1.13

6 months ago

1.1.12

6 months ago

1.1.11

6 months ago

1.1.10

6 months ago

1.1.9

6 months ago

1.0.9

6 months ago

1.0.8

6 months ago

1.0.7

6 months ago

1.0.6

6 months ago

1.0.5

6 months ago

1.0.4

6 months ago

1.0.3

7 months ago

1.0.2

7 months ago

1.0.1

7 months ago

1.0.0

7 months ago