BLOGAzureブログ
一連のAzureリソースのライフサイクルを管理しよう、デプロイスタックで
Azure相談センターSB C&Sは、Microsoft Azureを推奨します。
一連のAzureリソースのライフサイクルを管理しよう、デプロイスタックで
皆さまこんにちは、SB C&Sの八釼(やつるぎ)です。
Azureのリソースはさまざまな方法でデプロイできますし権限さえあれば誰でも変更なども可能なわけです。しかし特に本番環境の場合にはこれは困りますよね。Azureのリソースというのはシステムのコンポーネントですので、無秩序な状態はよろしくありません。統制度合はさておき、ざっくりとでも管理できている状態にしたいものです。
そこで基本的に有効とされていたのがAzure Blueprintsでしたが・・・
【関連記事】そろそろ正式に提供開始されるのか?してほしい!Azure Blueprints
なんとマイクロソフト社は非推奨にする方針を打ち出してきました。
まあ長年プレビューでしたしこの仕組みでは有用なサービスとはなり得ないと判断したのでしょう。
では何が推奨になったのか?
それは
Azureデプロイスタック(Azure Deployment Stacks)
です。
AWSの知見がある方でしたら何となくイメージが湧くかもしれません。AWS CloudFormationとテンプレートによってプロビジョニングしたAWSリソースの集まりを『スタック』と言いますね。ただメチャクチャざっくり同じというだけで、結構違うのであくまで大枠のイメージとして似てる程度に思ってください。
Azureデプロイスタックがどのようなものかは以下の公式のドキュメントをご確認いただければと思いますが、ひとまずはざっくりリソースの集まりと覚えていただければと思います。
ということで、今回はこのデプロイスタックについての簡単な検証結果を共有します。
本記事では、以下のようにGitHubで公開されているquickstarts/microsoft.compute/vm-simple-linux の main.bicep のコードを linuxvmModule としてモジュールにしました。
.
├── main.bicep
├── main.bicepparam
└── nested
└── LinuxVM.bicep
本記事における、main.bicepには以下のように記述しました。
なんてことはないです。Ubuntu仮想マシン関連のリソースの他に以下を記述しているだけです。
targetScope = 'subscription'
param resourceGroupName string
@description('Location for all resources.')
@allowed([
'japaneast'
'japanwest'
'westus'
])
param resourceGroupLocation string
@secure()
param adminPasswordOrKey string
param adminUsername string
resource newRG 'Microsoft.Resources/resourceGroups@2021-04-01' = {
name: resourceGroupName
location: resourceGroupLocation
}
module containerappModule 'nested/LinuxVM.bicep' = {
scope: newRG
name: 'LinuxVM-deploy'
params: {
adminPasswordOrKey: adminPasswordOrKey
adminUsername: adminUsername
}
}
以下のコマンドを実行し、デプロイスタック: deployment-stack-demo1を作成しました。
$ az stack sub create \
--deny-settings-mode denyWriteAndDelete \
--action-on-unmanage deleteAll \
--name deployment-stack-demo1 \
--location japaneast \
--template-file main.bicep \
--parameters main.bicepparam
なお、このコマンドの詳細については以下のリファレンスをご確認ください。
Azure portalで確認してみると問題なく作成できたことが確認できました。
ちなみに、デプロイスタックによって管理されるAzure リソースは"マネージドリソース"と呼ばれます。緑枠で囲った部分です。これらのリソースは、スタックの作成に使用されるテンプレートファイル内の先に示したようなコードで定義されます。
以下のメッセージが出力され削除できませんでした。これは然るべき結果で、デプロイ時に
--deny-settings-mode denyWriteAndDelete
としたためです。つまりマネージドリソースに対する削除は拒否されるのです。
仮想マシン 'simpleLinuxVM' またはそれに関連付けられている
選択されたリソース (あるいはその両方) を削除しているときにエラーが発生しました。
(中略)
クライアント 'yusuke.yatsurugi@xxxxxxxx.xxx' には、
(中略)
アクション 'Microsoft.Compute/virtualMachines/delete' を実行するアクセス許可がありますが、
(中略)
拒否の割り当てが原因で、アクセスが拒否されました。
NSG(ネットワークセキュリティグループ)にはまずは受信規則を追加してみます。HTTP: 80番ポートを空けてみました。
できました!
ちなみに、本来はソースコードを修正して追加すべきです。参考まで以下のコードを追記してデプロイすれば80番ポートを許可できます。
{
name: 'HTTP'
properties: {
priority: 1010
protocol: 'Tcp'
access: 'Allow'
direction: 'Inbound'
sourceAddressPrefix: '*'
sourcePortRange: '*'
destinationAddressPrefix: '*'
destinationPortRange: '80'
}
}
では削除を試みると、VMの時と同様に拒否の割り当てが原因でアクセスが拒否されました。
ということで、削除はできませんでしたがNSGのセキュリティ規則の追加作成やタグの付与など、あくまでNSG自体の設定以外の操作は実施できることが確認できました。
ではリソース(この場合には受信セキュリティ規則)を削除するにはどうすれば良いのかですが、前述したとおりマネージドリソースはコードで管理されます。よって、Bicepコードファイルから記述を削除してデプロイすれば良いのです。本記事の場合linuxvmModuleのコードを再度デプロイすれば良いのです(この規則は記述されていないので)。そうすれば元々のデプロイの状態に戻るわけですね。
Azure BlueprintsのようにGAを待たずして非推奨になるかもしれませんので、長年プレビュー状態のままのサービスは注意したほうが良いかもしれません。既にBlueprintsをお使いの方はデプロイスタックへの移行をぜひご検討ください。
なお今回の記事ではデプロイスタックについての一例をざっくりご紹介しましたが、--action-on-unmanageや--deny-settings-modeの引数を変えることでまた違った挙動を示しますので、皆様の組織に合う管理方法になるよう適切なものを指定してください。
Azureリソースのライフサイクルを管理については色々とお困りごとが出てくるかもしれませんが、その際にはぜひとも法人でのAzure導入前の相談窓口であるAzure相談センターまでお気軽にお問い合わせいただけますと幸いです。弊社では、ユーザー様のご状況やご要望を踏まえて最適な形でのAzureの導入のご支援を提供しており、Azure に精通したスタッフが丁寧にご回答させていただきます。
Azureの導入や運用に関するお悩みは SoftBankグループのSB C&Sにご相談ください
SoftBankグループのSB C&Sは、さまざまな分野のエキスパート企業との協力なパートナーシップによって、多岐にわたるAzure関連ソリューションをご提供しています。
「Azureのサービスを提供している企業が多すぎて、どの企業が自社にベストか分からない」
「Azure導入のメリット・デメリットを知りたい」
「Azureがどういう課題を解決してくれるのか知りたい」
など、Azureに関するお悩みならお気軽にお問い合わせください。
中立的な立場で、貴社に最適なソリューションをご提案いたします。
クラウドサーバーご検討中の方必見
お役立ち資料一覧
そのようなお悩みはありませんか?
Azure相談センターでは、上記のようなお悩みを解決する
ダウンロード資料を豊富にご用意しています。
是非、ご覧ください。
オンプレミスからクラウドへの移行を検討している方のために、安心・スムーズな移行を実現する方法を解説し、
運用コストの削減に有効な「リザーブドインスタンス」もご紹介するホワイトペーパーです。
導入から活用まで専門スタッフが回答いたします。
お気軽にお問い合わせください。