Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Azure Bicep で始める Infrastructure as Code/ace0917
Search
TonyTonyKun
August 16, 2021
Technology
0
450
Azure Bicep で始める Infrastructure as Code/ace0917
2021年9月17日に開催された Azure Council Experts 定例会のセッション資料です。
TonyTonyKun
August 16, 2021
Tweet
Share
More Decks by TonyTonyKun
See All by TonyTonyKun
Prompty を使って生成 AI アプリケーション開発のプロンプトを管理する/jat03
thara0402
0
4
Azure OpenAI Service で意図せず PTU モデルをデプロイして高額請求されてしまった件/jat04
thara0402
0
5
「Durable Task Scheduler」をチョイ見せ!/jat05
thara0402
0
1
Azure App Service on Linux の Sidecar に Phi-3 を配置してインテリジェントなアプリケーションを作ってみよう/jazug-anniv14
thara0402
0
990
サイクルガードサービス AlterLock の問い合わせ対応業務に Azure OpenAI Service を活用した話/jazug46
thara0402
0
870
Microsoft Ignite 2023 現地参加レポート/ignite2023
thara0402
0
250
Azure Container Apps で .NET 7 アプリを Blue-Green デプロイしてみよう!/jazug12
thara0402
0
1.7k
Azure Synapse Analytics 入門/jazug11
thara0402
0
710
Introduction to Azure Synapse Analytics/ace0416
thara0402
0
500
Other Decks in Technology
See All in Technology
リーダブルテストコード 〜メンテナンスしやすい テストコードを作成する方法を考える〜 #DevSumi #DevSumiB / Readable test code
nihonbuson
11
6.8k
TAMとre:Capセキュリティ編 〜拡張脅威検出デモを添えて〜
fujiihda
1
180
飲食店予約台帳を支えるインタラクティブ UI 設計と実装
siropaca
7
1.6k
Data-centric AI入門第6章:Data-centric AIの実践例
x_ttyszk
1
390
現場の種を事業の芽にする - エンジニア主導のイノベーションを事業戦略に装着する方法 -
kzkmaeda
2
1.8k
あれは良かった、あれは苦労したB2B2C型SaaSの新規開発におけるCloud Spanner
hirohito1108
2
370
Datadogとともにオブザーバビリティを布教しよう
mego2221
0
130
Larkご案内資料
customercloud
PRO
0
650
スタートアップ1人目QAエンジニアが QAチームを立ち上げ、“個”からチーム、 そして“組織”に成長するまで / How to set up QA team at reiwatravel
mii3king
2
1.3k
転生CISOサバイバル・ガイド / CISO Career Transition Survival Guide
kanny
3
920
Swiftの “private” を テストする / Testing Swift "private"
yutailang0119
0
120
なぜ私は自分が使わないサービスを作るのか? / Why would I create a service that I would not use?
aiandrox
0
510
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
67
4.6k
Gamification - CAS2011
davidbonilla
80
5.1k
Mobile First: as difficult as doing things right
swwweet
223
9.3k
Making Projects Easy
brettharned
116
6k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
What's in a price? How to price your products and services
michaelherold
244
12k
Docker and Python
trallard
44
3.3k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.2k
Designing for Performance
lara
604
68k
Become a Pro
speakerdeck
PRO
26
5.1k
The Language of Interfaces
destraynor
156
24k
Transcript
Azure Bicep で始める Infrastructure as Code 2021.9.17 Azure Council Experts
定例会
自己紹介 原 敏之(Toshiyuki Hara) 株式会社ネクストスケープ Microsoft Azure の導入支援やクラウドネイティブなアプリケー ション開発をしています。 https://www.nextscape.net/
Microsoft MVP for Microsoft Azure 2017 〜 ROMANCE DAWN for the new world https://gooner.hateblo.jp/ Japan Azure User Group(JAZUG) Microsoft Azure のゆるふわなコミュニティ https://jazug.connpass.com/ 2 Copyright© 2021, JAZUG All Rights Reserved.
Goal 従来の ARM テンプレートが抱える課題を解決できる Bicep の 良さを知ることで、使ってみようと感じてもらえること Bicep を使って Infrastructure
as Code をどのように実現するの かのイメージを掴んでもらうこと 3 Copyright© 2021, JAZUG All Rights Reserved.
Infrastructure as Code Microsoft Azure における Infrastructure as Code 4
Copyright© 2021, JAZUG All Rights Reserved.
Infrastructure as Code のおさらい Infrastructure as Code (IaC) は、インフラの構築作業をコード で実施する考え方のこと
5 Copyright© 2021, JAZUG All Rights Reserved. • 構築コストの増大 • 人為的なミスの発生 • 暗黙的なノウハウの発生 手順書や人手による構築 で発生する課題 • 素早く、確実に環境を再現できる • コードの再利用により、横展開が容易 • 部品化による再利用もできる • インフラ構成を標準化でき、統制が取りやすい • 都度レビューするよりも確実に統制できる • セキュリティポリシーの適用もできる インフラをコードで管理 することによるメリット Infrastructure as Code
ARM テンプレートのおさらい Azure Resource Manger (ARM) テンプレートは、Azure ポータル 上から手作業で実施しているリソース構築を自動化する仕組み Azure
のリソースを JSON で定義する テンプレートとパラメータの JSON ファイルから構成される Azure CLI / PowerShell / Azure ポータルを使ってテンプレートを実行 6 Copyright© 2021, JAZUG All Rights Reserved.
ARM テンプレートが抱える課題 ARM テンプレートの課題は、3つに分類できる 1. Azure リソースを JSON で表現するため冗長で煩雑になりやすい 2.
テンプレートファイルの部品化による再利用が難しい 3. Azure Resource Manger API の仕様が分かりにくい 7 Copyright© 2021, JAZUG All Rights Reserved. Bicep は、この2つの課題解決に取り組むプロジェクトです。
What is a Bicep Project? Bicep とは? 8 Copyright© 2021,
JAZUG All Rights Reserved.
Bicep とは Bicep は、ARM テンプレートの DSL (Domain Specific Language) 9
Copyright© 2021, JAZUG All Rights Reserved. JSON よりもシンプルな構文で書ける モジュール化とコード再利用性のサ ポートが向上 すべての Azure リソースと API バー ジョンを Day 0 サポート 現在のバージョンは v0.4 だが、 Microsoft 公式サポートの対象 Azure Resource Manager Bicep Language Compute Storage Network … az deployment create az bicep build az bicep decompile +250 RPs ARM Templates
Bicep を使い始めるには 開発環境 Bicep ファイルを作成するためのエディターが必要。 • Visual Studio Code •
Visual Studio Code 向けの Bicep 拡張機能 デプロイ環境 Bicep ファイルをデプロイするためのコマンドが必要。 • Azure CLI • Ver.2.20.0 以降で、Bicep が Azure CLI 統合されているので追加インストール不要 • PowerShell • Bicep が自動インストールされないので、手動でインストールする 10 Copyright© 2021, JAZUG All Rights Reserved.
Bicep ファイルを作成する 空の main.bicep ファイルを作成し、リソースを定義する 11 Copyright© 2021, JAZUG All
Rights Reserved. resource stg 'Microsoft.Storage/storageAccounts@2019-06-01' = { name: 'uniquestorage001' location: 'japaneast' kind: 'Storage' sku: { name: 'Standard_LRS' } }
Bicep ファイルを作成する パラメータを追加する 12 Copyright© 2021, JAZUG All Rights Reserved.
param location string = 'japaneast’ @minLength(3) @maxLength(24) param storageAccountName string = 'uniquestorage001' resource stg 'Microsoft.Storage/storageAccounts@2019-06-01' = { name: storageAccountName location: location kind: 'Storage' sku: { name: 'Standard_LRS' } }
Bicep ファイルを作成する 変数と出力を追加する 13 Copyright© 2021, JAZUG All Rights Reserved.
param location string = 'japaneast’ @minLength(3) @maxLength(24) param storageAccountName string = 'uniquestorage001' var storageSku = 'Standard_LRS' resource stg 'Microsoft.Storage/storageAccounts@2019-06-01' = { name: storageAccountName location: location kind: 'Storage' sku: { name: storageSku } } output storageId string = stg.id
Bicep ファイルをデプロイする Bicep ファイルをリソースグループにデプロイする リソースグループの以外のデプロイ スコープ サブスクリプション 管理グループ テナント 14
Copyright© 2021, JAZUG All Rights Reserved. $ az group create -n <ResourceGroup Name> -l japaneast $ az deployment group create -f ./main.bicep -g <ResourceGroup Name>
Bicep ファイルをデプロイする パラメータを使用してデプロイする コマンドラインでパラメータを渡す パラメータの JSON ファイルを使用する • ARM テンプレートと同じパラメータ
JSON ファイルを使用できる 15 Copyright© 2021, JAZUG All Rights Reserved. $ az deployment group create -f ./main.bicep -g <ResourceGroup Name> --parameters location= japaneast storageAccountName=uniquelogstorage001 $ az deployment group create -f ./main.bicep -g <ResourceGroup Name> --parameters ./parameters.json
What unique benefits do you get with Bicep? Bicep の良いところ
16 Copyright© 2021, JAZUG All Rights Reserved.
JSON よりもシンプルな構文で書ける パラメータと変数の参照 パラメータの定義 17 Copyright© 2021, JAZUG All Rights
Reserved. "parameters": { "name": { "type": "string", "defaultValue": "myName" } }, param name string = 'myName' "name": "[variables('name')]", "location": "[parameters('location')]", name: name location: location ARM テンプレート Bicep ARM テンプレート Bicep
JSON よりもシンプルな構文で書ける パラメータの修飾 18 Copyright© 2021, JAZUG All Rights Reserved.
"parameters": { "name": { "type": "string", "defaultValue": "myName", "allowed": [ "myName", "myOtherName" ], "minLength": 3, "maxLength": 24 } }, @allowed([ 'myName' 'myOtherName' ]) @minLength(3) @maxLength(24) param name string = 'myName' ARM テンプレート Bicep
JSON よりもシンプルな構文で書ける 変数の定義 アウトプットの定義 19 Copyright© 2021, JAZUG All Rights
Reserved. "variables": { "location": “japaneast" } var location = ‘japaneast' "outputs": { "myOutput": { "type": "string", "value": "my output value" } } output myOutput string = 'my output value' ARM テンプレート Bicep ARM テンプレート Bicep
JSON よりもシンプルな構文で書ける 文字列の連結 リソース ID の取得 論理演算子 20 Copyright© 2021,
JAZUG All Rights Reserved. concat('John', ' ', parameters('lastName')) 'John ${lastName}' resourceId('microsoft.network/virtualNetworks') res.id and(parameter('isMonday'), parameter('isNovember')) isMonday && isNovember ARM テンプレート Bicep ARM テンプレート Bicep ARM テンプレート Bicep
モジュール化とコード再利用性のサポー トが向上 module を使用して、別の .bicep ファイルを参照できる すべての .bicep ファイルをモジュールとして、相対パスで参照できる。 ARM
テンプレートでは、リンクしたい JSON ファイルをインターネット に公開する必要があった。 21 Copyright© 2021, JAZUG All Rights Reserved. module stg './storage.bicep' = { name: 'storageDeploy' params: { storageAccountName: '<YOURUNIQUESTORAGENAME>' } } output storageName array = stg.outputs.containerProps . ├── main.bicep └── storage.bicep .bicep ファイルの配置 main.bicep ファイル
モジュール化とコード再利用性のサポー トが向上 暗黙的なリソースの依存関係 22 Copyright© 2021, JAZUG All Rights Reserved.
resource appServicePlan 'Microsoft.Web/serverfarms@2021-01-15' = { name: appServicePlanName location: location sku: { name: sku } } resource appService 'Microsoft.Web/sites@2021-01-15' = { name: appServicenName location: location properties:{ serverFarmId: appServicePlan.id } } ✓ あるリソース名が別のリソース定義内で参照されると、 暗黙的なリソースの依存関係が作成される。 ✓ ARM テンプレートでは、”dependsOn” で明示的に宣 言する必要があった。
Conclusion まとめ 23 Copyright© 2021, JAZUG All Rights Reserved.
まとめ いま Azure で IaC を実現するなら、推しは Bicep です。 ARM テンプレートの
JSON よりもシンプルな構文で書くことができ、 モジュール化とコードの再利用性のサポートが向上しています。 手順書や人手によるインフラ構築から脱却しましょう。 既に Terraform などのツールを導入しているなら、無理に Bicep を導入 する必要はないと思います。 24 Copyright© 2021, JAZUG All Rights Reserved.
参考資料 Azure Bicep の公式ドキュメント https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/bicep/ Bicep を使用して Azure でリソースをデプロイして管理する https://docs.microsoft.com/ja-jp/learn/paths/bicep-deploy/
Project Bicep - Tutorial https://github.com/Azure/bicep/tree/main/docs/tutorial Project Bicep - Spec https://github.com/Azure/bicep/tree/main/docs/spec 25 Copyright© 2021, JAZUG All Rights Reserved.