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
430
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
Azure App Service on Linux の Sidecar に Phi-3 を配置してインテリジェントなアプリケーションを作ってみよう/jazug-anniv14
thara0402
0
900
サイクルガードサービス AlterLock の問い合わせ対応業務に Azure OpenAI Service を活用した話/jazug46
thara0402
0
830
Microsoft Ignite 2023 現地参加レポート/ignite2023
thara0402
0
240
Azure Container Apps で .NET 7 アプリを Blue-Green デプロイしてみよう!/jazug12
thara0402
0
1.6k
Azure Synapse Analytics 入門/jazug11
thara0402
0
690
Introduction to Azure Synapse Analytics/ace0416
thara0402
0
480
Azure Kubernetes Service を活用したマイクロサービス開発/clouddev
thara0402
0
440
Azure Kubernetes Service を活用したマイクロサービス開発/Ignite-osaka
thara0402
0
450
Azure Kubernetes Service を活用したマイクロサービス開発/Ignite-tokyo
thara0402
0
190
Other Decks in Technology
See All in Technology
Qiita埋め込み用スライド
naoki_0531
0
4.7k
レンジャーシステムズ | 会社紹介(採用ピッチ)
rssytems
0
150
OpenAIの蒸留機能(Model Distillation)を使用して運用中のLLMのコストを削減する取り組み
pharma_x_tech
4
550
Snykで始めるセキュリティ担当者とSREと開発者が楽になる脆弱性対応 / Getting started with Snyk Vulnerability Response
yamaguchitk333
2
180
オプトインカメラ:UWB測位を応用したオプトイン型のカメラ計測
matthewlujp
0
170
コンテナセキュリティのためのLandlock入門
nullpo_head
2
320
ゼロから創る横断SREチーム 挑戦と進化の軌跡
rvirus0817
2
270
10個のフィルタをAXI4-Streamでつなげてみた
marsee101
0
170
Fanstaの1年を大解剖! 一人SREはどこまでできるのか!?
syossan27
2
160
1等無人航空機操縦士一発試験 合格までの道のり ドローンミートアップ@大阪 2024/12/18
excdinc
0
150
どちらを使う?GitHub or Azure DevOps Ver. 24H2
kkamegawa
0
720
Microsoft Azure全冠になってみた ~アレを使い倒した者が試験を制す!?~/Obtained all Microsoft Azure certifications Those who use "that" to the full will win the exam! ?
yuj1osm
2
110
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
45
2.2k
Why Our Code Smells
bkeepers
PRO
335
57k
A Philosophy of Restraint
colly
203
16k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Designing on Purpose - Digital PM Summit 2013
jponch
116
7k
Building an army of robots
kneath
302
44k
Raft: Consensus for Rubyists
vanstee
137
6.7k
Facilitating Awesome Meetings
lara
50
6.1k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
365
25k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Typedesign – Prime Four
hannesfritz
40
2.4k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
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.