Sign inSign up

coorpacademy/codebuild

By coorpacademy

•Updated about 1 month ago

DockerImage for amazone codebuild

Image
0

100K+

coorpacademy/codebuild repository overview

⁠Coorpacademy Infra

Coorpacademy Infrastructure System for AWS

⁠About

Ce projet contient l'ensemble des configs cloudformation pour notre infra, ainsi que les programmes, configs et paramètres qui on servi pour la générer.

En point d'entrée (dev) utilisateur, le cli, est accessible via node cli ou npm start ou via coorpinfra une fois installé.

⁠Le Cli :

Le projet fournit un interface en ligne de commmande pour interagir avec les différents aspects de l'infra.

⁠Usage

Une fois lancé, on pourra lancer des commandes selon différentes catégories:

  • config : sous-commandes liées aux définitions pour générer les templates cloudformation
  • ssm : sous-commandes liées au Paramater Store (SSM) d'AWS utilisé pour stocker les variables d'environnement
  • stacks : sous-commandes pour manipuler les stacks-configs
  • clusters : sous-commandes pour voir le statut des clusters ecs
  • dns (DISABLED): sous-commandes pour effectuer des opérations sur le routage dns vers aws ou heroku

Pour avoir des détails sur chacune des sous-commandes accessibles dans les sous catégories il suffit de lancer la commande help my-category ou my-category help.

Si on a qu'une commande à lancer et qu'on ne veut pas ouvrir le CLI en mode interactif, il suffit de spécifier la commande à la suite de l'invocation du cli: (par exemple: npm start config generate-all)

⁠Installation

Il est possible d'installer localement le cli en faisant un npm link depuis le projet. L'utilitaire coorpinfra est alors disponible et utilisable.

L'autocompletion peut être mise en place ensuite avec les opérations suivantes:

  • sur zsh en rajoutant . <(coorpinfra --completion) à son .zshrc
  • en bash en rajoutant eval "$(coorpinfra --completion)" à son .bashrc (avec bash-completion de mis en place (installer via brew et avec source $(brew --prefix)/etc/bash_completion dans le ~/.bash_profile))

⁠Details

:warning: Outdated details to be updated

⁠Structuration du projet

Voici le Top level de l'organisation du projet:

  • archive⁠: ce dossier contient les premiers templates cloudformations qui on servit de modèle au générateur.
  • codebuild-image⁠: le dossier contenant le Dockerfile et les scripts de l'image docker utilisé par codebuild pour builder nos projets
  • config⁠: les configurations du projet, soit originales, soit générées
    • stack-definitions⁠: l'ensemble des définitions de stacks ainsi que la config globale dans common.yml⁠
    • cf-cluster⁠: les cloudformation de configuration du cluster: notamment:
      • ecs.yml⁠: la définition du cluster (pour l'instant unique)
      • vpc.yml⁠: la définition du vpc (pour l'instant unique)
      • asg.yml⁠: un nested template de l'auto scaling group
      • alb.yml⁠: un nested template de l'application load balancer
    • cf-gen-services⁠: les cloudformations générés pour les services et codepipeline(build)
    • d'autres fichiers de config globale dont:
      • coorp-dns-records.yml⁠: une capture du mapping dns avec la notion de cible actuelle et future(aws)
      • des fichier stacks-configs comme stacks-config-staging.yml⁠ qui contiennent des configurations de stacks, c'est à dire une capture des paramètres requis pour l'invocation du template cloudformation pour créer la stack désiré. (Dans certains cas, notament le mooc, le même template cloudformation sert à la création de plusieurs stacks)
  • lib⁠: le code du CLI, des utilitaires et du générateur.
    • generator⁠: le programme de génération de templates cloudformations à partir des stack-definitions. En plus de la logique javascript, il contient les templates handlebars qui sont peuplé avec les configs.
  • test⁠: les (quelques) tests
  • package.json, yarn.lock, etc... les fichiers standards que vous connaissez
⁠Structure d'une Stack-Definition

Une Stack Definition sert à décrire les paramètres d'un service que l'on va proposer. Ainsi on a une stack-definition pour le mooc, l'api progression, l'api platform, connect, setup, etc.

Voici un example un poil fictif inspiré de API I18n:

name: api-i18n
githubUrl: https://github.com/CoorpAcademy/api-i18n

config:
  minCapacity: 2
  maxCapacity: 10
  port: 3010
  host: i18n${HostSuffix}.coorpacademy.com

buildVariables:
  - name: NpmToken
    variable: NPM_TOKEN
    description: Auth token for NPM
    path: /credentials/global/npm-token

runtimeVariables:
  - name: Test
    variable: TEST2
    describe: TEST2
    value: TEST

Ceci sert pour générer à la fois la stack deployée en live, ainsi que la CodePipeline de test qui va servir pour tester et builder le projet à chaque modification.

Note: les variables peuvent être soit en clair, comme par exemple Test, soit elles peuvent être stockées dans AWS Store Parameter⁠ auquel cas on fait référence à la variable par son path comme le npm token dans cet exemple.

Pour générer les cloudformation à partir des définitions il suffit de lancer la config generate-all.

Tag summary

Content type

Image

Digest

sha256:2d81cb9c1…

Size

470.2 MB

Last updated

about 1 month ago

docker pull coorpacademy/codebuild