Posts From Category: devops
Ressources Terraform
Tools
- GoogleCloudPlatform / terraformer CLI tool to generate terraform files from existing infrastructure (reverse Terraform). Infrastructure to Code
- gruntwork-io / terragrunt
- gruntwork-io / terratest
- hashicorp / terraform
- liamg / tfsec Static analysis powered security scanner for your terraform code
- terraform-linters / tflint TFLint is a Terraform linter focused on possible errors, best practices, etc. (Terraform >= 0.12)
- tfutils / tfenv Terraform version manager
Best Practices
Ressources Kubernetes
Best Pratices
Tutorials
- aws-workshop-for-kubernetes
- continuous-deployment-on-kubernetes
- ramitsurana / awesome-kubernetes
- smooth-sailing-with-kubernetes
Tools
- ahmetb / kubectx Switch faster between clusters and namespaces in kubectl
- awesome-kubernetes
- derailed / k9s
- fluxcd / flux The GitOps Kubernetes operator
- goldpinger
- helm
- kube-bench
- kube-ops-view
- kubectl
- kubespy
- kubefwd
- kustomize
- minikube
- thyarles / knsk This tool is aimed to kill namespaces that stuck in Terminating mode after you try to delete it.
- weaveworks / kubediff Kubediff: a tool for Kubernetes to show differences between running state and version controlled configuration.
- weaveworks / kured Kubernetes Reboot Daemon
Ressources DevOps
What is DevOps?
Articles
- chef / 5-steps-for-scaling-devops 5 Steps for Scaling DevOps
- chef / the-four-duties-of-reviewing-pull-requests The Four Duties of Reviewing Pull Requests
- cherryservers / devops-full-picture-an-intersection-of-culture-processes-and-tools DevOps Full Picture – an Intersection of Culture, Processes and Tools
- cloudbees / 8-cicd-best-practices-your-devops-journey
- dev.to / questions-i-ask-in-sre-interviews Questions I ask in SRE interviews
- devopstopologies / devops-patterns What Team Structure is Right for DevOps to Flourish?
- fogbugz / code-review-best-practice
- GNU make
- go-jira / jira simple jira command line client in Go
- medium / automated-releases-in-open-source-projects
- octo / gardez-les-cles-de-votre-infrastructure-a-labri-avec-vault
- RomuloOliveira / commit-messages-guide A guide to understand the importance of commit messages and how to write them well
- smashingmagazine / cloud-expert How To Sound Like A Cloud Expert
- trek10inc / awsume A utility for easily assuming AWS IAM roles from the command line.
- WeScale / observabilite-resilience-et-experience-au-secours-des-systemes-chaotiques OBSERVABILITÉ, RÉSILIENCE ET EXPÉRIENCE AU SECOURS DES SYSTÈMES CHAOTIQUES
Tools
- antonmedv / fx
- binhnguyennus / awesome-scalability
- cloud-custodian / cloud-custodian Rules engine for cloud security, cost optimization, and governance, DSL in yaml for policies to query, filter, and take actions on resources
- dastergon / awesome-sre A curated list of Site Reliability and Production Engineering resources
- dvorka / hstr bash and zsh shell history suggest box - easily view, navigate, search and manage your command history.
- gitmoji An emoji guide for your commit messages
- Google / chrome-devtools
- Docker
- editorconfig EditorConfig helps maintain consistent coding styles for multiple developers working on the same project across various editors and IDEs.
- FiloSottile / mkcert A simple zero-config tool to make locally trusted development certificates with any names you’d like.
- fugue / credstash A little utility for managing credentials in the cloud
- Git
- GitHub
- Gitlab
- gruntwork-io / cloud-nuke A tool for cleaning up your cloud accounts by nuking (deleting) all resources within it
- hashicorp / terraform
- hashicorp / vagrant
- hashicorp / vault
- JetBrains / IntelliJ
- jgm / pandoc Universal markup converter
- junegunn / fzf A command-line fuzzy finder
- kamranahmedse / developer-roadmap
- markdownlint / markdownlint Markdown lint tool
- mpolden / echoip IP address lookup service
- Netflix / hubcommander
- Postman
- Slack
- tmux/tmux
- toniblyx/my-arsenal-of-aws-security-tools
Chaos Monkey for Spring Boot
Chaos Monkey for Spring Boot développé par l’équipe codecentric est une dépendance Spring Boot 2 permettant de faire du Chaos Engineering.
La mise en place est simple, il suffit d’ajouter la dépendance maven au pom.xml et régler quelques conf YAML. Le reste du code source n’est pas modifié.
Ce projet propose trois types d’attaque :
- Ajout de latences aux appels de méthodes
- Ajout d’exceptions aux appels de méthodes
- Tuer l’application
Ce projet se base sur les annotations Spring :
- @Controller
- @RestController
- @Service
- @Repository
Voici un exemple de configuration :
chaos:
monkey:
assaults:
latencyActive: true
level: 1
exceptionsActive: true
killApplicationActive: true
watcher:
repository: true
restController: true
service: true
Dans la pratique il n’est pas conseillé d’utiliser ce type d’outils en production. Mais supposons une infra en micro-services, pourquoi ne pas lancer une instance de l’application en mode chaos. Cela permettrait de valider constamment le comportement des services entre eux.
Terraform
Terraform est un outil d’infrastructure as code, multi-providers, open source, édité par Hashicorp. Il permet de créer et modifier ses infrastructures et environements sous la forme de fichiers de configuration de manière prévisible. Le principal concept se base sur l’état de la cible, il s’agit donc d’une approche d’infrastructure immutable.
Avantages :
- Est devenu un standard
- Large communauté
- Support multi-provides assuré dont AWS, Azure, GCE
- Reproductibilité via des modules
- Extensibilité par plugin
Inconvénients :
- Pas d’interface centralisée
- Nécessité de développer
- En fonction du provider, pas tous les services ne sont couverts
La création de modules permet de centraliser les usages et d’assurer une bonne réutilisabilité des modèles d’infrastructures par les équipes
Carbon - Créer des images du code source
Carbon est un outil open source développé par l’équipe Dawn Labs permettant de créer des images sympas affichant du code.
Prenons l’exemple de développeurs voulant diffuser du code sur Twitter, il peut copier coller tout simplement du code mais sera mal affiché ou faire une capture d’écran souvent mal adaptée à la taille de l’écran. C’est là que Carbon intervient.
En se rendant sur le site https://carbon.now.sh il faut copier coller son code, choisir un thème ainsi que le language du code, nous obtenons l’image suivante :
Maintenant nous pouvons partager cette image sur Twitter, documenter nos markdown etc.
Déployer un site web statique en https sur AWS
Création du domaine et de son certificat
La première étape consiste à créer un domain et son certificat.
aws cloudformation deploy –stack-name domain-stack –template-file domain.cfn.yml –parameter-overrides DomainName=example.com –capabilities CAPABILITY_IAM –region us-east-1
AWSTemplateFormatVersion: "2010-09-09"
Description: Route53 Hosted Zone + Certificate
Parameters:
DomainName:
Type: String
Description: The DNS name of an Amazon Route 53 hosted zone
AllowedPattern: (?!-)[a-zA-Z0-9-.]{1,63}(?<!-)
ConstraintDescription: must be a valid DNS zone name.
Resources:
DNS:
Type: AWS::Route53::HostedZone
Properties:
HostedZoneConfig:
Comment: !Join ['', ['Hosted zone for ', !Ref DomainName]]
Name: !Ref DomainName
DomainCertificate:
Type: AWS::CertificateManager::Certificate
Properties:
DomainName: !Ref DomainName
DomainValidationOptions:
- DomainName: !Ref DomainName
ValidationDomain: !Ref DomainName
- DomainName: !Join [ '', ['*.', !Ref DomainName ]]
ValidationDomain: !Ref DomainName
SubjectAlternativeNames:
- !Join [ '', ['*.', !Ref DomainName ]]
Lors du traitement de cette stack, il faut penser à vérifier ses mails afin de valider la création du certificat.
Une fois la stack créée, il est nécessaire de manuellement modifier les noms des serveurs DNS du domaine, je ne connais pas de solution industrialisée.
Création du sous domain
Maintenant qu’on a un domain valide, il est possible de créer autant de sous domaines qu’on veut aussi bien le www que rien.
Pour récupérer l’arn du certificat que l’on vient de créer :
aws acm list-certificates –region us-east-1
La stack suivante permet de fournir un S3 qui est un dépôt de fichiers statiques, un CDN (CloudFront) et de lier le tout au domaine.
aws cloudformation deploy –stack-name subdomain-stack –template-file subdomain.cfn.yml –parameter-overrides AcmCertificateArn=arn:aws:cloudfront::99999999999:distribution/XXXXXXXXXXXX HostedZone=example.com Subdomain=www.example.com –capabilities CAPABILITY_IAM –region eu-west-3
AWSTemplateFormatVersion: '2010-09-09'
Description: Route53 Subdomain
Parameters:
AcmCertificateArn:
Type: String
Description: Domain certificate arn.
AllowedPattern: "arn:aws:acm:.*"
HostedZone:
Type: String
Description: The DNS name of an existing Amazon Route 53 hosted zone.
AllowedPattern: (?!-)[a-zA-Z0-9-.]{1,63}(?<!-)
ConstraintDescription: must be a valid DNS zone name.
Subdomain:
Type: String
Description: The DNS name of an existing Amazon Route 53 hosted zone.
AllowedPattern: (?!-)[a-zA-Z0-9-.]{1,63}(?<!-)
ConstraintDescription: must be a valid subdomain name.
Mappings:
Region2S3WebsiteSuffix:
us-east-1:
Suffix: .s3-website-us-east-1.amazonaws.com
us-west-1:
Suffix: .s3-website-us-west-1.amazonaws.com
us-west-2:
Suffix: .s3-website-us-west-2.amazonaws.com
eu-west-1:
Suffix: .s3-website-eu-west-1.amazonaws.com
ap-northeast-1:
Suffix: .s3-website-ap-northeast-1.amazonaws.com
ap-northeast-2:
Suffix: .s3-website-ap-northeast-2.amazonaws.com
ap-southeast-1:
Suffix: .s3-website-ap-southeast-1.amazonaws.com
ap-southeast-2:
Suffix: .s3-website-ap-southeast-2.amazonaws.com
ap-south-1:
Suffix: .s3-website-ap-south-1.amazonaws.com
us-east-2:
Suffix: .s3-website-us-east-2.amazonaws.com
sa-east-1:
Suffix: .s3-website-sa-east-1.amazonaws.com
cn-north-1:
Suffix: .s3-website.cn-north-1.amazonaws.com.cn
eu-central-1:
Suffix: .s3-website.eu-central-1.amazonaws.com
Resources:
WebsiteBucket:
Type: AWS::S3::Bucket
Properties:
AccessControl: PublicRead
WebsiteConfiguration:
IndexDocument: index.html
ErrorDocument: error.html
WebsiteBucketPolicy:
Type: AWS::S3::BucketPolicy
Properties:
Bucket: !Ref WebsiteBucket
PolicyDocument:
Version: 2012-10-17
Statement:
- Sid: PublicReadForGetBucketObjects
Effect: Allow
Principal: '*'
Action: s3:GetObject
Resource: !Join ['', ['arn:aws:s3:::', !Ref WebsiteBucket, /*]]
WebsiteCDN:
Type: AWS::CloudFront::Distribution
Properties:
DistributionConfig:
Comment: !Join ['', ['CDN for ', !Ref Subdomain, ' website']]
Aliases:
- !Ref Subdomain
Enabled: true
DefaultRootObject: index.html
IPV6Enabled: false
DefaultCacheBehavior:
AllowedMethods:
- DELETE
- GET
- HEAD
- OPTIONS
- PATCH
- POST
- PUT
TargetOriginId: S3Origin
ForwardedValues:
QueryString: false
Cookies:
Forward: none
ViewerProtocolPolicy: redirect-to-https
PriceClass: PriceClass_100
Restrictions:
GeoRestriction:
RestrictionType: whitelist
Locations:
- FR
ViewerCertificate:
AcmCertificateArn: !Ref AcmCertificateArn
SslSupportMethod: sni-only
Origins:
- DomainName: !Join ['', [!Ref WebsiteBucket, '.s3.amazonaws.com']]
Id: S3Origin
S3OriginConfig: {}
WebsiteDNSName:
Type: AWS::Route53::RecordSet
Properties:
HostedZoneName: !Join ['', [!Ref HostedZone, .]]
Name: !Ref Subdomain
Type: A
AliasTarget:
HostedZoneId: Z2FDTNDATAQYW2
DNSName: !GetAtt [WebsiteCDN, DomainName]
La création du CDN est long, il faut s’armer de patience, mais c’est aussi le bon moment pour débuter le transfert du site vers S3.
Une fois la stack créée, le site est disponible à la fois en http et en https. Pour être exact, les requêtes http seront redirigées en https.
Transférer ses données vers S3 peut se faire facilement via l’interface ou bien en ligne de commande.
aws s3 ls –region eu-west-3
aws s3 sync ./ s3://${WEBSITE_BUCKET} –region eu-west-3