Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Azure でサーバーレス、 Infrastructure as Code どうしてますか?

2,371 views

Published on

Serverless Days Tokyo 2019 のセッション資料です。
https://tokyo.serverlessdays.io/

Published in: Technology
  • Be the first to comment

Azure でサーバーレス、 Infrastructure as Code どうしてますか?

  1. 1. Azure でサーバーレス、 Infrastructure as Code どうしてますか? ServerlessDays Tokyo 2019 https://tokyo.serverlessdays.io/
  2. 2. おれの考えた最強の ベストオブ・ベストプラクティス Infrastructure as Code on Azure ServerlessDays Tokyo 2019 https://tokyo.serverlessdays.io/ 某主催者さんから の圧力要望により タイトル更新
  3. 3. アジェンダ • Infrastructure as Code おさらい • Azure における IaC といえば、ARMテンプレート • Azure Functions デプロイ時の Tips • ARMテンプレートの細かいところ • Terraform も使えるよ! • CI/CDと組み合わせる • Infrastructure as Code でサーバーレス環境を構築してみる
  4. 4. Self introduction
  5. 5. { "name": { "ja": "大平かづみ", "en": "Kazumi OHIRA" }, "currentPosition": "フリーランス", "awards": ["Microsoft MVP"], "favorites": [ "Azure": ["ARM template", "IoT"] ], "twitter": "@dz_" } Me
  6. 6. https://ascii.jp/elem/000/001/838/1838466/index-2.html Me 私の生きざまを 記事にして くださいました! • コミットしているコミュニティ • Tech Learn w/ English • Cogbot コミュニティ • Node-RED User Group • NoOps Japan Community
  7. 7. What’s Infrastructure as Code? Infrastructure as Code おさらい
  8. 8. Infrastructure as Code おさらい • インフラのリソース構成・管理をコードで行うこと • IaC = Infrastructure as Code • メリット • インフラ管理を自動化できる • 手作業によるミスが減る • コードと実態を一致させられるため、抜け漏れが防げる • コードになっているので、レビューしやすい • バージョン管理できる
  9. 9. Infrastructure as Code おさらい • インフラのリソース構成・管理をコードで行うこと • IaC = Infrastructure as Code • メリット • インフラ管理を自動化できる • 手作業によるミスが減る • コードと実態を一致させられるため、抜け漏れが防げる • コードになっているので、レビューしやすい • バージョン管理できる コードにさえしていれば、 後から思い出せる! (個人的メリット)
  10. 10. IaC in terms of serverless サーバーレスにおける IaC
  11. 11. クラウドにおけるリソース管理 IaaS (VM) Terraform, Packer, Ansible, AWS Cloud Formation, etc. Containers Dockerfile, Docker compose, Kubernetes, etc. Serverless ?
  12. 12. クラウドにおけるリソース管理 IaaS (VM) Terraform, Packer, Ansible, AWS Cloud Formation, etc. Containers Dockerfile, Docker compose, Kubernetes, etc. Serverless ? クラウドごとに異なる サーバーレス環境、 どうリソース管理する?
  13. 13. Speaking of IaC on Azure, ARM template Azure における Infrastructure as Code といえば、ARMテンプレート
  14. 14. Azure Resource Manager ARMテンプレート Azure の内部でリソース を管理している大元
  15. 15. ARMテンプレートのいいところ 1 • Azure Resource Manager に直結(最強) • 冪等性を管理してくれる! • エラーハンドリングもしてくれる! • リソースの差分デプロイ、並列デプロイができる • 細かいところまで調整できる
  16. 16. ARMテンプレートのいいところ 2 • Azureポータルで作成した構成をエクスポートできる • Azureポータル(GUI)で、テンプレートの構成をデプロイできる • Microsoft 謹製の Visual Studio Code の拡張機能が便利! • 公式ドキュメントが充実(日本語もOK
  17. 17. ARMテンプレートの基本構造 https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group- authoring-templates • 入力 - parameters • 変数 - variables • リソース - resources • 出力 - outputs
  18. 18. 基本構造: 入力 - parameters • テンプレートへの入力を定義する • 扱える型 • string int bool object array secureString secureObject • 規定値 (defaultValue), 選択肢 (allowedValues) を設定できる • minValue, maxValue, minLength, maxLength も • GUIでのデプロイ時も便利 • metadata.description で説明を表示できる • defaultValue は初期値として、 allowedValues はプルダウンとして
  19. 19. 基本構造: 変数 - variables • 変数を定義できる • ユーザーから入力 → parameters • それ以外 → variables • parameters と同様の型(secure* 以外) • 値の生成に、関数も使える
  20. 20. 基本構造: リソース - resources • リソースの定義を記述する • リソース間の依存関係を定義できる • 繰返し(copy)、条件つき(condition)の処理が書ける
  21. 21. 基本構造: 出力 - outputs • テンプレートの処理が終わったあとの出力を定義できる • 例: Web Apps のURLや、 Storage Account の接続文字列など • parameters と同様の型(secure* 以外) • Linked template でほかのテンプレートに値を渡すときに便利 • 秘匿情報は Key Vault を経由するように!
  22. 22. ARMテンプレートで利用できる関数 • "[concat(parameters('prefix’), 'func')]" • 配列とオブジェクトの関数 • 比較関数、論理関数 • equals() and() or() if() not(), etc. • 文字列関数、数値関数 • デプロイ関数、リソース関数 • parameters() variables() listKeys() resourceGroup() resourceId(), etc.
  23. 23. テンプレートの編集は Visual Studio Code • Visual Studio Code での編集が便利! • 拡張機能 Azure Resource Manager Tools • https://marketplace.visualstudio.com/items?itemName=msazurermtools.azurerm- vscode-tools • シンタックスハイライト • 補完候補の表示 • 静的解析によるエラー表示
  24. 24. デプロイ方法いろいろ • Azure CLI • Azure PowerShell • GUI
  25. 25. Azure Functions deploy tips Azure Functions デプロイ時の Tips
  26. 26. Azure Functions 固有の機能 • Azure Functions の設定 = Application settings • トリガーとバインディング • https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-triggers-bindings • RUN FROM PACKAGE • パッケージファイルから直接実行できる = 展開が速い • https://docs.microsoft.com/ja-jp/azure/azure-functions/run-functions-from- deployment-package
  27. 27. Application settings Application settings は ARMテンプレートで定義できる
  28. 28. Application settings • APPINSIGHTS_INSTRUMENTATIONKEY • AzureWebJobsStorage • FUNCTIONS_EXTENSION_VERSION: ~2 • WEBSITE_RUN_FROM_PACKAGE
  29. 29. Application settings (Node.js) • FUNCTIONS_WORKER_RUNTIME: node • WEBSITE_NODE_DEFAULT_VERSION: 10.14.1
  30. 30. トリガーとバインディング • イベント駆動に使うトリガー • 入出力を容易にするバインディング どちらもコード、または ARM テンプレートで定義できる すなわち、一発でデプロイできる!
  31. 31. https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-infrastructure-as-code くわしくは、公式ドキュメントにて 全部載ってたw
  32. 32. Details of ARM template ARMテンプレートの細かいところ
  33. 33. ARMテンプレートをもう少し詳しく • APIバージョンの事情 • セキュアに扱う • リソース名のつけ方 • コードのモジュール化 • テンプレートのスコープ
  34. 34. APIバージョンの事情 • ARMテンプレートのリソース定義は、 Azure REST API と連動して いる
  35. 35. セキュアに扱う • Parameter の型 secureString secureObject を使う • 通信時など、秘匿化した状態で扱ってくれる • Key Vault にあるシークレットから parameters を受け取る • https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/resource- manager-keyvault-parameter#reference-secrets-with-static-id • リソース同士は Managed Identities や Virtual Network 連携 • https://docs.microsoft.com/ja-jp/azure/active-directory/managed-identities-azure- resources/qs-configure-template-windows-vm • https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-create-vnet
  36. 36. リソース名のつけ方 • リソース名に使っていい文字・文字列数はリソース毎に異なる • https://docs.microsoft.com/en-us/azure/architecture/best-practices/naming-conventions • グローバルで一意でなければならないものもある • エンドポイントがあるものなど • 特に、Storage Account は記号ダメ、最大 24 文字と短いので要注意 • uniqueString() などの文字列関数を活用する • https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/resource-group- template-functions-string
  37. 37. コードのモジュール化 • Linked template • テンプレートから別のテンプレートを参照してデプロイができる • テンプレートは外部からアクセスできる場所に置く必要がある Parent template Child template Child template Child template
  38. 38. 例: SmartStore プロジェクトの場合 • 20以上のリソース数! • 1つのテンプレートに書き出すと機能群もわかりにくく、メンテしにくい😖 • → Linked template を使って分割👍 • https://github.com/intelligent-retail/smart-store/pull/17/files
  39. 39. Linked template 検証時は、Cloud Shell + Blob が便利 • Azure Storage のパブリックコ ンテナに置くと作業しやすい • Linked template は外部から参 照でき場所に置く必要があるため • Azure ポータルや Storage Explorer でアップロード可能 • 実行は、Azure Cloud Shell • ポータルのアカウントと連動してい るので、複数アカウントを使ってる ときはより便利
  40. 40. テンプレートのスコープ • 参照できるのは、同じテンプレート内にあるリソースのみ • テンプレートにないリソースは dependsOn に指定できない • テンプレートにないリソースは resourceId() 関数で参照できない • Linked template でテンプレート間のリソースを参照したいときは、 子テンプレートの outputs で出力し、つぎのテンプレートに引き継ぐ
  41. 41. Terraform also can be used Terraform も使えるよ!
  42. 42. ARMテンプレートと Terraform 比較 項目 ARMテンプレート Terraform シンタックス JSON HCL or JSON 冪等性保持 〇 〇 ※ 独特さ あり あり Azure との親和性 ◎ 〇 構造的な構成 △ 〇 HCL = HashiCorp Configuration Language 冪等性は、Terraform 側が担保する( terraform plan )
  43. 43. 使い慣れた道具をつかおう • 十分に網羅されていて、サードパーティ製だからといって侮れない • 冪等性の担保も、 terraform 自体のワークフロー内で対応されてい る • 記法が独自であることと、Azureの事情をTerraformで読み替える 必要はあるので慣れは必要 • コードのモジュール化の点では Terraform に軍配が上がりそう すでにお使いなら、断然 Terraform がおすすめ!
  44. 44. Suitable for CI/CD scenario CI/CDと組み合わせる
  45. 45. CI/CDで活きる Infrastructure as Code • IaCは自動構築を実現できるため、CI/CDと相性がよい • ユースケース • デプロイの自動化 • 自動テストの実施時だけ、リソースをデプロイ・削除 • 新規参入者や、非エンジニアの環境作成
  46. 46. 対応しているCI/CD ARMテンプレート • Azure DevOps との相性抜群! • Azure Resource Group Deployment task • Azure CLI task • Azure PowerShell task • GitHub Actions • いくつかのリソースのみ個別対応 • https://github.com/Azure/acti ons Terraform • GitHub Actions と相性◎ • https://www.terraform.io/docs /github-actions/index.html
  47. 47. Getting started IaC for serverless Infrastructure as Code でサーバーレス環境を構築してみる
  48. 48. ドキュメント • Azure Resource Manager の概要 • Azure Resource Manager テンプレートの構造と構文の詳細 • テンプレート リファレンス • テンプレート関数 • Azure Functions の関数アプリのリソース デプロイを自動化
  49. 49. サンプル、資料 • ARMテンプレートのセルフペースハンズオン資料 • https://github.com/dzeyelid/handson-arm-template • Terraformのセルフペースハンズオン資料 • https://github.com/dzeyelid/handson-terraform-on-azure • ARMテンプレート Linked template のサンプル • https://github.com/dzeyelid/arm-template-sample-for-serverless • Azure DevOps と組み合わせサンプル • https://github.com/dzeyelid/getting-started-arm-template
  50. 50. Have fun!
  51. 51. https://www.microsoftevents.com/profile/8321412 アンケートにご協力 おねがいします

×