Slide 1

Slide 1 text

AKSで学ぶBicepのアレコレ Hifumi Takai(タナイ) JAZUG 11周年イベント@2021/9/25

Slide 2

Slide 2 text

自己紹介 ● 株式会社エーピーコミュニケーションズ (フルリモート@北海道) ● Twitter: @okinawa__noodle, GitHub: @thanaism ● QiitaエンジニアフェスタAzure SWA優秀賞 「無料で使えるAzure Static Web AppsにGatsbyブログを爆速でデプロイする」 Hifumi Takai 趣味: 競プロ

Slide 3

Slide 3 text

Bicepを使ってAKSをデプロイしたい

Slide 4

Slide 4 text

今日の内容 話すこと ● Bicepのおさらい ● BicepでのAKSデプロイ 話さないこと ● AKSのおさらい ● Terraformとの比較

Slide 5

Slide 5 text

Bicepって? ● ARM template の DSL ● JSON書かなくていい ● VSCodeの拡張機能がステキ ● JSON書かなくていい

Slide 6

Slide 6 text

ARM param demoParam string = 'Contoso' "parameters": { "demoParam": { "type": "string", "defaultValue": "Contoso" } } Bicep 👍

Slide 7

Slide 7 text

補完めっちゃ効く👍 (Language Serverがちゃんとある) (capture: https://youtu.be/q2m-Kr3covc)

Slide 8

Slide 8 text

IaC、楽勝かよ😂

Slide 9

Slide 9 text

Qiitaに入門編を書きました

Slide 10

Slide 10 text

実際、デプロイするだけなら

Slide 11

Slide 11 text

これだけ (Qiitaの内容)

Slide 12

Slide 12 text

でも、まともに書くと

Slide 13

Slide 13 text

(これでモジュールひとつ)

Slide 14

Slide 14 text

productionを目指すと重厚になる AKSデプロイに絡む要素は……🙄 ● Azure CNI(vnet/subnet) ● Azure Container Registry ● Key Vault ● Managed Database ● Application Gateway ● Log Analytics ● Add-ons(今日あとで取り上げる)

Slide 15

Slide 15 text

Bicepが難しくなるポイント たとえばAGICアドオン ● Portalだとポチ(チェック入れるだけ) ● Bicepだと…… - 依存関係 - RBAC権限付与 - 任意引数/必須引数 - etc... Azure Portalと違って《よしなに》はやってくれない

Slide 16

Slide 16 text

IaC、重厚になりがち (だからこそ冪等性があり、自由度も高い)

Slide 17

Slide 17 text

(ここから急に具体的になります) AKSデプロイで 詰まったポイント

Slide 18

Slide 18 text

AGICのアドオンを入れるには 1. Application Gatewayのリソースidを取得 2. aksのテンプレートで上記idを addonProfiles -> ingressApplicationGatewayを記述する 3. AGICのManaged Identityに AppGWのContributorとRGのReaderを付与する

Slide 19

Slide 19 text

詰まりポイント① dependsOnで依存関係を明示しているのに、 IngressApplicationGateway addon cannot find Application Gateway と怒られる。 (AppGWデプロイの前にAppGWを探しに行ってしまう)

Slide 20

Slide 20 text

①の原因 事前にappgwを デプロイ する する しない しない identity ブロック省略 する しない する しない 成否 成功する 成功する 失敗する 成功する addonProfiles -> ingressApplicationGateway -> identity という ブロックを省略してはいけないパターンがある

Slide 21

Slide 21 text

知らん!😓 (とあるクイックスタートテンプレートに書いてあった)

Slide 22

Slide 22 text

詰まりポイント② 「MC_」のRGに生成されるManaged Identityを クエリするのがわりと面倒。ロールアサインも面倒。 (”name”や”scope”の記述はテンプレートチェック時に静的に決定する必要があり、  動的な値を用いて記述したい場合、モジュール化しないと解決できない)

Slide 23

Slide 23 text

②の詳細 This expression is being used in an assignment to the "name" property of the "Microsoft.ManagedIdentity/userAssignedIdentities" type, which requires a value that can be calculated at the start of the deployment. Properties of aks which can be calculated at the start include "name". ↑動的にして依存関係もたせるとエラーになる(モジュール化が必須) ↑静的だが依存関係を解決できない(existingにはdependsOn使えない)

Slide 24

Slide 24 text

②の解決策 以下のようにaksから直接outputに指定できる (これだとそもそもクエリする必要ない)

Slide 25

Slide 25 text

知らんかった😅 (これもクイックスタートテンプレートに書いてあった)

Slide 26

Slide 26 text

クイックスタート テンプレートを見よう! (ドキュメントを信じましょう)

Slide 27

Slide 27 text

Contact me! Thanks!! @okinawa__noodle