Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Build Your Azure Infrastructure as Code With .Net Core - Global Azure 2021

Build Your Azure Infrastructure as Code With .Net Core - Global Azure 2021

A29d145c9cc68dc0a33a3974e8e68686?s=128

Hossam Barakat

April 15, 2021
Tweet

Transcript

  1. Build Your Azure Infrastructure as Code With .NET Core Hossam

    Barakat Technical Lead at Willow @hossambarakat_ | www.hossambarakat.net
  2. @hossambarakat_ Data Centers

  3. @hossambarakat_ Rise of Cloud Computing

  4. @hossambarakat_ How to provision cloud resources?

  5. @hossambarakat_ Manual AKA Point and Click

  6. @hossambarakat_ Manual AKA Point and Click

  7. @hossambarakat_ Snowflake Servers

  8. @hossambarakat_ Infrastructure as Code

  9. @hossambarakat_ • Managing and provisioning cloud resources using code. Infrastructure

    as Code
  10. @hossambarakat_ Imperative: CLI commands and scripts

  11. @hossambarakat_ Idempotency and error handling

  12. @hossambarakat_ Declarative Infrastructure as Code

  13. @hossambarakat_ Tool Declarative Infrastructure as Code Desired State Actual Resources

  14. @hossambarakat_ • Azure Resource Manager • Terraform • Bicep •

    AWS CloudFormation • Google Deployment Manager • … Declarative Infrastructure as Code tools
  15. @hossambarakat_ • JSON, YAML, domain specific languages (DSLs),… Infrastructure as

    Code tools
  16. @hossambarakat_

  17. @hossambarakat_ Enter Pulumi

  18. @hossambarakat_ • Pulumi is an open source infrastructure as code

    tool the lets you use real languages – C#, TypeScript, Go,… – to provision and manage cloud resources. What is Pulumi?
  19. @hossambarakat_ • Control flow with loops and if conditions •

    Abstraction with functions, classes, packages,… • Code sharing with package management (Nuget, npm,…) • Authoring with favourite IDEs, refactoring, code completion, static type checking • Testing with existing frameworks and tools Benefits
  20. @hossambarakat_

  21. @hossambarakat_ Terraform vs Pulumi var resourceGroup = new ResourceGroup("pulumi-resources", new

    ResourceGroupArgs { Location = " Australia East" }); ); var environments = new string[]{"dev", "uat", "prod"}; foreach (var environment in environments) { var storageAccount = new StorageAccount( $"storage{environment}", new StorageAccountArgs { ResourceGroupName = resourceGroup.Name, Location = resourceGroup.Location, Sku = new SkuArgs{ Name = SkuName.Standard_LRS }, AccessTier = AccessTier.Hot }); } resource "azurerm_resource_group" "rg" { name = "terraform-resources" location = ”Australia East" } variable "environments" { description = "storage account regions" type = list(string) default = ["dev", "uat", "prod"] } resource "azurerm_storage_account" "sa" { name = "iacpulumi${var.environments[count.index]}" resource_group_name = azurerm_resource_group.rg.name location = azurerm_resource_group.rg.location account_tier = "Standard" account_replication_type = "LRS" count = length(var.environments) }
  22. @hossambarakat_ Pulumi Fundamentals

  23. @hossambarakat_ Projects & Stacks web-app (Pulumi.yaml) Project $ pulumi new

    Stacks $ pulumi stack init stackName Pulumi.<stack-name>.yaml Pulumi.yaml
  24. @hossambarakat_ Configurations $ pulumi config set dbPassword S3cr37 config: serverless-app:dbPassword:

    S3cr37 Pulumi.<stack-name>.yaml var config = new Pulumi.Config(); var password = config.Require("dbPassword"); Pulumi.cs
  25. @hossambarakat_ Secrets $ pulumi config set --secret dbPassword S3cr37 var

    config = new Pulumi.Config(); var password = config.Require("dbPassword"); Pulumi.cs Pulumi.<stack-name>.yaml config: serverless-app:dbPassword: secure: AAABAELDrCQE+rQbzTxN43iAD6iGDXTYQ90AzpILkfEY3uwtc+g=
  26. @hossambarakat_ Application architecture on Azure

  27. @hossambarakat_

  28. @hossambarakat_ But that would be imperative, right?

  29. @hossambarakat_ How Pulumi Works State CLI and Engine AWS Azure

    Kubernetes Providers Code Plan Apply new Resource()
  30. @hossambarakat_ Continuous Deployment Infrastructure as Code Manual Review State

  31. @hossambarakat_ GitHub Integration

  32. @hossambarakat_ Testing Unit Testing Integration Testing

  33. @hossambarakat_ Unit Testing

  34. @hossambarakat_ Summary

  35. @hossambarakat_

  36. @hossambarakat_ • https://github.com/hossambarakat/pulumi-demos • http://pulumi.com/docs • https://github.com/pulumi/examples Resources https://bit.ly/pulumi-ndc-porto

  37. @hossambarakat_ Questions?

  38. Thanks Hossam Barakat @hossambarakat_ www.hossambarakat.net