NVIDIA DGX SparkのSSDを暗号化する

とあるアレで NVIDIA DGX Sparkの検証をすることになり、ディスク暗号化にめっっっちゃ苦労したので記録します。

※私のググり力やドキュメント読解能力の問題なのですが、苦労したのは事実なのでどこかの誰かに役に立つことを祈って。

 

DGX Sparkとは

からあげさんの記事が非常に参考になったので、こちらを見て頂けると良きと思います。

 

NVIDIA DGX SparkでローカルAI環境を構築してLLM・画像生成AIを動かしてみた

 

本題

暗号化の方法について。

下記URLに記載の内容で暗号化出来ます。

LUKSを使って暗号化しますので、OS再インストールが必要ですのでそこだけご注意です。

※タイトルがなんか違う感ありますが、正真正銘(?)これです。

DGX Spark OS ISO Download - DGX Spark / GB10 - NVIDIA Developer Forums

 

事前準備

https://enterprise-support.nvidia.com/s/announcement/a4zVv000000DqDh/nvidia-dgx-os-72-release からDGXOS-7.2.3-2025-10-04-06-28-28-arm64.isoを入手しておきます。

NVIDIA のエンタープライズアカウントが必要なので販社からダウンロードしてもらいましょう。

ISOを無事に手に入れたらUSBメディアかDVDなどに焼きましょう。ちなみに9GB超あるのでDVDの場合は二層式とかじゃ無いと書き込めないので注意です。

 

暗号化までのステップ

上記に書いてありますが、やってきます。

 

  1. 事前準備で用意したISOをDGX Sparkに接続しておく。
  2. DGX Sparkを起動してNVIDIAロゴが出たらDELキーを連打してBIOSに入る。
  3. TPMを有効にする。※詳細のメモ忘れたので後で書きます
  4. 事前準備で用意したISOを指定してbootする。
  5. bootメニューからは下記を選択。
  6. DGX Spark Installation Options
  7. Advanced Installation Options
  8. Install DGX OS 7.2.3 with Encrypted Root for DGX Spark
  9. インストールが終わったら復号キー(後述)を入力して、初期セットアップを実施(ここは前述したからあげさんの記事を参考に)
  10. GNOMEが起動したらターミナルを起動して下記を入力(こうすることでFileVaultやbitlockerみたいにTPMによる復号が出来るので楽になる)
  11. #install needed packages
    apt-get -y install clevis clevis-tpm2 clevis-luks clevis-initramfs initramfs-tools tss2 tpm2-tools
    #Take ownership of TPM
    tpm2_clear

    #proceed
    echo -n Enter LUKS password:
    read -s LUKSKEY
    echo “”

    #If you want some security behind your tpm
    #This will set up the clevis key on the luks slot after the one you have already set up (which is slot 0).
    #You can list these with cryptsetup luksDump /dev/nvme0n1p3
    #The pcr_id’s show how secure you want your tpm2 setup to be, or you can test by omitting this part completely.
    #See PCR choices below.
    clevis luks bind -d /dev/nvme0n1p3 tpm2 ‘{“pcr_bank”:“sha256”, “pcr_ids”:“1,7”}’ <<< “$LUKSKEY”

    update-initramfs -u -k all

     

  12. ※上記のダブルクオテーションとシングルクオテーションは全角になってしまってるので半角に変えてください。
  13. 以上!

 

復号キーについて

最初、暗号化してインストールしたら初回起動時に当然のようにLUKSの復号パスワードを求められてとても混乱したが、このマニュアルの32Pに書いてます。(というか最初からマニュアル読んでおけば苦労しなかった疑惑もありますが前述のISOがエンタープライズアカじゃないとダウンロード出来ないというトラップ?もありなかなか初見では気づかず)

nvidia3dです。

 

https://docs.nvidia.com/dgx/dgx-os-7-user-guide/dgx-os-7-user-guide.pdf

 

以上です。

マニュアルとかをちゃんと読み込めば分かることも多かったと思いますが、私はなかなか苦労しました。

また/を暗号化インストールしたとしても復号化キーはマニュアルにしっかり記載されてるのでTPMキーによる復号を有効にしないとあんまり意味ないというのもあり、そこも地味にトラップだと思います。

 

 

Firefox x Entra IDで プラットフォームSSOできた

この記事は何か

Microsoft Entra IDへの認証方式の一つである、プラットフォームSSOをMacのFirefoxからも出来るようにしたという話しです。

そもそもプラットフォームSSOとは?

プラットフォームSSOの構築方法

私の環境はMDMはIntuneではなくJamfを使っているのですが、下記の記事が非常にわかりやすくほぼ下記の内容で実装しました。 そのため本記事ではプラットフォームSSO自体の構築方法は割愛します。

Jamf Pro + Microsoft Entra ID で macOS プラットフォーム シングル サインオン (PSSO) を構成する

本題

FirefoxをプラットフォームSSO対応させる方法

  1. ターミナルから vi /Library/Managed\ Preferences/org.mozilla.firefox.plist でファイルを作成する。
  2. 下記内容で保存する。

    • <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "
      http://www.apple.com/DTDs/PropertyList-1.0.dtd">
      <plist version="1.0">
      <dict>
         <key>EnterprisePoliciesEnabled</key>
         <true/>
         <key>MicrosoftEntraSSO</key>
         <true/>
      </dict>
      </plist>
      
  3. plutil -lint org.mozilla.firefox.plist でエラーが出ないことを確認

  4. Firefoxを再起動して、パスワードとか聞かれずにパスワードレスでログインできるか確認。

以上です。 公式の手順ではないので、環境によってはうまくいかないかも?なのでそこはご容赦ください。

Zapier×Googleフォームで労務相談プライベートチャンネル作成を自動化してみた

この記事でわかること

  1. 労務相談用のSlackプライベートチャンネル作成自動化をノーコードでやる。
    • この記事の対応で roumu-<<問い合わせ社員のメールアドレスホスト部>>-<<実行日時>> といったチャンネル名のものが自動生成される。
  2. 実装方法はZapierとGoogleフォーム(+労務メンバー管理でスプレッドシート)を利用。

経緯

  • 現職の労務の方から こんな記事のようなことやりたい〜! と相談されたことがきっかけ。
  • 上記記事だとショートカットコマンドを使っているが、コードで実装が面倒だったのでノーコードでなんとかできんかなという思いから、試してみることに。

この構成のメリット

  1. ノーコードなので労務側でもメンテ可能。
  2. 労務メンバーの改廃はスプレッドシートで管理しているのでメンテが楽ちん。

事前準備

  1. Googleフォームの準備(クリックすると詳細が展開されます) ①下記のようなフォームを作成する。
    • ②回答の メールアドレスを収集する を 確認済にする
  2. メンバー管理用のスプレッドシートの準備。(クリックすると詳細が展開されます。) ①下記のように労務メンバー一覧のメールアドレスを入力する。

Zapier実装(全体像)

Zapier実装(詳細)

※詳細は各項目をクリックすると展開されるようにしています。

  1. フォーム入力がトリガー(New Form Response in Google Forms) 事前準備で用意したGoogleフォームを指定します。
  2. フォーム入力者のSlackIDを取得する(Find User by Email in Slack) Find user by Email でフォーム送信したユーザーのメールアドレスをSlack IDに変換します。(そうしないと招待処理できないので)
  3. フォーム実行日時を取得する(Date / Time in Formatter by Zapier) 念の為の対応として、プライベートチャンネルの末尾に フォーム送信日時 を付与したいので、そのための対応

    Formatter by Zapier で現在の実行日時を取得。

    → フォーム実行日時を付与しておくことで、同一人物からの別の労務相談チャンネルが作成できるようにするため。

    ポイント1: inputには {{zap_meta_human_now}} という変数(現在の実行日時を示す変数) を入れておく。

    ポイント2: To Timezoneには Asia/Tokyo を、From Timezoneには UTC を入れておく。こうしておかないとアメリカ時間になっちゃう。

  4. メールアドレスの@より前を抽出(Text in Formatter by Zapier) チャンネル名に、フォーム送信者のメアド部分を用いるのがわかりやすいと思ったので、フォームからフォーム送信者のメアドを取得する

    ポイント1: Separator に @ と指定することで、ホスト部とドメイン部を分割。

    ポイント2: Segment Index に First と指定することで分割した際の前半部分だけを取得するようにしている。

  5. メールアドレスのドットをハイフンに変換(Text in Formatter by Zapier) Slackチャンネル名にはドットが使えないのでドット部分をハイフンに変換。

  6. プライベートチャンネルを作成する(Create Private Channel in Slack) プライベートチャンネル作成処理

    roumu- のあとに、3. フォーム実行日時を取得する と メールアドレスのドットをハイフンに変換 の結果を指定して連結します。

  7. フォーム入力者を作成したプライベートチャンネルに招待する(Invite User to Channel in Slack) Channel に 6. プライベートチャンネルを作成する の Result Channel Id を指定し、 Users に 2. フォーム入力者のSlackIDを取得する で得られた ID を指定します。

    注意点: ChannelとUsersにはデフォルトでは入力できない模様なので、横にあるハンバーガーメニューから"Custom"というのを選択すると入力できるようになります。

  8. スプレッドシートから労務メンバーのメールアドレス一覧を取得する(Get Many Spreadsheet Rows (Advanced) in Google Sheets) 労務メンバーの招待処理①

    事前準備で用意したスプレッドシートを指定します。

    ポイント1: Columns にはメールアドレスが書いている列を指定してください。例:A列に入力しているなら A:A

  9. スプレッドシートの内容をループ処理(Create Loop From Line Items in Looping by Zapier) 労務メンバーの招待処理②

    労務メンバー全員を招待できるように、 Looping by Zapier を利用してループ処理。

    8. スプレッドシートから労務メンバーのメールアドレス一覧を取得する の実行結果の Formatted Rows COL A: を指定する。Values to Loop はわかりやすくするために、 email という変数名にしておく。

  10. メールアドレスからSlackIDに変換(Find User by Email in Slack) 労務メンバーの招待処理③

    2. フォーム入力者のSlackIDを取得する と同様にスプレッドシートに入力されているメールアドレスをSlack IDに変換する。

    Email に指定するのは 9. スプレッドシートの内容をループ処理 の結果の Email 変数を指定する。

  11. 作成したプライベートチャンネルに招待(Invite User to Channel in Slack) 労務メンバーの招待処理④

    7. フォーム入力者を作成したプライベートチャンネルに招待する と同様に、労務メンバーもチャンネル招待する。

    Users に指定するのは 10. メールアドレスからSlackIDに変換 の実行結果の ID を指定すること。

Zapierで日付加工処理をある程度柔軟にしてNotionの繰り返し予定の件名を更新する

この記事は?

下記悩みを解決した記事です。

  1. NotionのDatabaseの繰り返し予定は便利だけど、件名にYYYYMMDD形式といった内容を入れられない。
  2. ZapierでNotionページを作ると件名は柔軟に使えるが、Notionのテンプレートが使えない。

両方のいいとこどりをしたいのにーーーー!となったので考えました。 上記を短絡的に解決しようとするとAWS Lambda とか GASで頑張りたくなるのですがそうしないための記事です。

Notion手順

  1. Notion DBで繰り返し予定を作成する。
    • これは任意で好きなテンプレートを使って良いです。件名も適当でいいです。
  2. これだけです。ここはNotionの通常機能なので詳細は https://www.notion.so/ja-jp/releases/2022-11-08 を参照ください。

Zapier手順

Zapierで下記のような感じでAutomationを組む。 全体像は↓です。

  1. Trigger

    • New Database Item で指定のDatabaseが作られたら発火するようにします。
  2. 時間計算処理

    • {{zap_meta_timestamp}} という変数?を使うとZap実行時間のUNIX時間が取得できるのでこれを利用します。

      • 私は定例資料を 前日 に作りたかったので、翌日を表すにはこのUNIX時間に 86400秒(1日) を設定しました。
  3. フォーマットを変換

    • UNIX時間だと人間の目で見ると、ナンノコッチャなので、YYYYMMDD形式に直します。
  4. Notionページの件名を修正

以上です!私はついでに、Slack通知もNotionでやってもらうことにしました。

ちょっと怖いところ

  • Step4で「あんたループしてますよ」とエラー表示されている。
  • そんなことないと思うんだけどな。。

参考にさせていただいた記事(感謝)

https://help.zapier.com/hc/en-us/articles/8496275717261-Insert-the-time-your-Zap-runs-into-a-field#h_01HJ1D5RZTSWA5DD5F4JHSJYYG

goodpatch-tech.hatenablog.com

hajimarinomachi.com

社内ブログに投稿しました

ヘルプデスク業務を楽にするためにSlackとGitHub Projectsを同期するヘルプデスクツールを自作したtech.mntsq.co.jp  という記事を投稿しました。

こんなこと書いてます。

ヘルプデスク業務を楽にするためのツールを作成した話。
GitHub ProjectのItemとSlackを双方向同期したり、Azure OpenAI等を利用して効率化したりしてます。

hot entryにもなりました(嬉しい)https://x.com/hatebu/status/1727877377370489186?s=20

SlackのEnterprise GridでAdmin APIを使えるようにするまで

この記事は?

  • Slack Enterprise Gridプランで使えるAdmin系のAPIで利用するためのTokenを入手するまでの手順。
    • 公式の手順 には利用するための手順が会たるが、 うん。よくわからん。 となったので試行錯誤して分かったことをまとめます。
    • 通常のSlack AppのようにTokenを入手しようとすると下記のような画面になってしまう。
      • どうやら、Admin APIは通常のTokenとは違う方法で発行しなければいけないらしい?と分かり、それをまとめた形です。
  • 「色々試してうまくいった」という感じなのでお作法やら何やらが間違っている可能性あり。

参考にさせていただいたURL

github.com

この手順書の最終ゴール

作成されたTokenを使って admin.teams.lis のテスターページから、管理化にあるSlackワークスペースの一覧が表示できるようになること。

前提条件

  • 作業環境はMacを想定しています。 ※Windowsの方は適宜、読み替えてください。
  • Node.JSが動く環境を想定しています。
    • Node.JS インストール とうでググれば環境構築手順は多数出てくるので、この資料では環境構築については省きます。

手順概要

  1. [Slack] 適当なSlack Appを作る。
    • アプリ作成時の初期画面で、 From an app manifest を選択して、下記JSONを指定してください。
    • 権限として、"admin.teams:read" を利用することにしているので権限を変えたければ、アプリ作成後に OAuth & Permissions のメニューから必要な権限を選択してください。
    • インストール先のSlackワークスペースはどこでもいいです。
    • {
          "display_information": {
              "name": "admin_teams_read"
          },
          "oauth_config": {
              "redirect_urls": [
                  "https://localhost:3000"
              ],
              "scopes": {
                  "user": [
                      "admin.teams:read"
                  ]
              }
          },
          "settings": {
              "org_deploy_enabled": false,
              "socket_mode_enabled": false,
              "token_rotation_enabled": false
          }
      }
      
  2. 作成された画面のApp Credentialsという項目に、Client IDとClient Secretの項目があるので、それぞれメモしておく。(※あとで使う)
  3. [Slack] Manage Distribution メニューを選択して、Remove Hard Coded Information の欄にチェックを入れて、 Activate Public Distribution を選択する。
  4. [Slack] 同画面の上部に Shareble URL という項目があるので、それに記載してあるURLをメモしておく。(※あとで使う)
  5. [PC] OAuth2サーバ用の自己証明書を作成する。
    • すぐに利用しなくなる証明書なので /tmp 配下に作成しておく。
    • mkdir -p /tmp/slack-oauth2.0-client
      
      cd /tmp/slack-oauth2.0-client
      
      openssl genrsa 2048 > server.key
      
      #※証明書について色々聞かれるが「Locality Name」だけ「JP」と答えて、あとは未入力。
      openssl req -new -key server.key > server.csr
        # You are about to be asked to enter information that will be incorporated
        # into your certificate request.
        # What you are about to enter is what is called a Distinguished Name or a DN.
        # There are quite a few fields but you can leave some blank
        # For some fields there will be a default value,
        # If you enter '.', the field will be left blank.
        # -----
        # Country Name (2 letter code) []:JP <-ここだけJPにする
        # State or Province Name (full name) []:
        # Locality Name (eg, city) []:
        # Organization Name (eg, company) []:
        # Organizational Unit Name (eg, section) []:
        # Common Name (eg, fully qualified host name) []:
        # Email Address []:
        # 
        # Please enter the following 'extra' attributes
        # to be sent with your certificate request
        # A challenge password []:
      
       openssl x509 -days 3650 -req -sha256 -signkey server.key < server.csr > server.crt
      
  6. [PC]作業ディレクトリを作成し、そこにOAuth2サーバー用のスクリプトを配置する。
    • 配置するのは下記のapp.jsとpackage.jsonです。
      • app.js
        • const request = require('request');
          const express = require('express');
          const app = express();
          const fs = require("fs");
          
          const slack_client_id = process.env.SLACK_CLIENT_ID;
          const slack_client_secret = process.env.SLACK_CLIENT_SECRET;
          
          app.get('/', (req, res) => {
              // 認可コードの取得
              const code = req.query["code"];
          
              // 認可コードを使って、アクセストークンをリクエストする
              request({
                  url: "https://slack.com/api/oauth.v2.access",
                  method: "POST",
                  form: {
                      client_id: slack_client_id,
                      client_secret: slack_client_secret,
                      code: code,
                      redirect_uri: "https://localhost:3000/"
                  }
              }, (error, response, body) => {
                  // レスポンスからアクセストークンを取得する
                  const param = JSON.parse(body);
                  console.log(param);
                  const access_token = param['access_token']; // アクセストークン
              })
          })
          
          // http サーバ
          var http = require("http").Server(app);         // http サーバを立てる
          http.listen(80);                                // 80番ポートで待つ
          
          var opt = {                                     // SSL 認証のパラメータ
            key:  fs.readFileSync("/tmp/slack-oauth2.0-client/server.key"),          // 秘密鍵
            cert: fs.readFileSync("/tmp/slack-oauth2.0-client/server.crt"),          // 証明書
            //passphrase: "password",                     // パスワードを設定した場合
          };
          var https = require("https").Server(opt, app);  // https サーバを立てる
          
          https.listen(3000, () =>{
                  console.log('HTTP Server(3000) is running.');
          });
          
      • package.json
        • {
            "dependencies": {
              "cors": "^2.8.5",
              "express": "^4.17.0",
              "request": "^2.88.0"
            }
          }
          
  7. [PC]npm install コマンドで初期化しておく。
  8. [PC]手順2でメモしておいた Client IDとClient Secretを下記のように一時的に環境変数に入れておく。
    • export SLACK_CLIENT_ID="メモしたClient ID"
      export SLACK_CLIENT_SECRET="メモしたClient Secret"
      
  9. node app.js でOAuth2サーバを起動して待ち受けておく。
  10. [PC] 手順4でメモしたShareble URLの末尾に&redirect_uri=https://localhost:3000/ とつけたURLを適当なブラウザで開く。
  11. [PC] Slackの認証画面が表示され、画面右上の方にSlackワークスペースを選択する画面が表示されるので、オーガナイゼーションのSlackワークスペース(一番親のワークスペース)を選択して、 Allow ボタンを選択。
  12. [PC]手順9で立ち上げていたOAuth2サーバのコンソールに access_token という値があるのでそれが今回の目的のSlack Tokenなので、それをメモしておく。
    • 手順11でアクセスしたSlackの画面はグルグルとロード画面のままになっているが☓ボタンで閉じてOK。
  13. 以上

試してみる

  • admin.teams.list のテスター画面にて取得したTokenを指定してみる。
    • 意図した結果になればOK。

情シス向けのローカル環境でのTerraformテスト環境構築方法

この記事について

  • 社内の情シスメンバー向けに勉強会的なものをやったときにステップバイステップで環境構築できるように説明した資料。
    • ※SREなどガチガチのインフラ屋さんなどには情報量が薄いので、この記事の内容は適しませんので、このページはそっ閉じしてください。
    • 勉強会時には記述していたが、ブログ記載にあたり記述内容を削除、修正しているところがあります。故に、一部説明が不十分な箇所があります。
      • 特に肝心な認証周りの記述については、記載内容薄めです。
        • 社内勉強用には認証周りの記述もしていたのですが、さすがに機微な情報なので...。
  • 既に社内でTerraform環境によるデプロイができている状態の人向け。
    • 他の人がTerraformによるCI/CD環境構築してくれているが、「管理者が自分に変わってしまった!」等で、サクッと自分のPC(Macを想定)でTerraformの挙動を試してみたい方向け。
  • お題として、「AzureAD環境にあるユーザーを操作する」 みたいな感じで書いてますが、適宜ご自身の会社の環境に読み替えてください。
    • 余談:AzureADをTerraform管理下に置くためのファーストステップには以前にそんな感じの記事を書いたのでそちらを参照ください。 ※記事の内容が古いのでいずれ直します。。

最終形

下記のようなことができるようになること。

  1. terraformコマンドの基本的なものが理解できる。
  2. ローカルPCにてTerraformのインストール & バージョン切り替えができる。
  3. terraform planでtfファイルと実環境の差分を見れること。
  4. 特定リソース(今回はダミーのAzureADユーザーを作成)をimportできること。
  5. やらかしてしまった ときのterraform stateの修正方法。

実践編1: terraformコマンドの基本を理解

情シス的に下記を知っていればだいたいは対処できる系のコマンド(多分)

  • terraform init
    • terraformコマンドを叩くための初期化コマンド
      • これを実行すると各種providerなど必要なものをダウンロードして実行環境整えてくれる
  • terraform plan
    • 現行のtfファイルと相手先の環境が合っているかの確認コマンド
  • terraform apply
    • 現行のtfファイルの内容で相手先環境を更新
  • terraform import
    • 相手先リソースの内容をstateファイルに書き込む
  • terraform state pull > 出力先ファイルパス.json
    • 現行の構成状態(stateファイル)を取得 ※テキストに出力したい場合は > とかで外部出力する。
      • ※出力したファイルを別のフォルダとかにコピーしておくと更に安全。
      • バックアップファイル自体を削除したり、改変しちゃったときに別場所にコピーしたものからも復旧できるので。(バックアップはいくつあってもいい)
  • terraform state -force push
    • ローカルにあるstateファイルの内容で更新。
      • forceつけとかないと大概の場合うまくいかない。
      • これを実施するときは最終手段。(何かしらのリカバリ系)
  • 地味に使う技: コマンドに -var "変数名=値"
    • tfファイルに環境ごとで違う変数をわたしたいときに使う
      • 例: -var “env=prod” とするとenvという変数にprodを入れた状態でTerraformを実行できる。

実践編2: terraformをローカルPCにインストールする。

  • Terraformはバージョンを変えることが割とあります。
    • バージョンが違うとtfファイルの書き方が変わるなど
  • そのため、Terraformのバージョン変更や変更が容易な tfenv を用います。

  • 手順

    1. ターミナルで brew install tfenv コマンドでtfenvをインストール。
    2. パスを通すために、一旦ターミナルを終了、再度起動。
    3. tfenv --version でバージョンが表示されることを確認。
    4. ご自身のプロジェクトで何のTerraformバージョンが使われているか調べるために terraform { と言ったキーワードで検索。
      • required_version = "1.2.5" みたいになっていれば、それがそのプロジェクトのバージョンです。
      • まぁ確認しなくても、違うバージョン使うと このバージョン使ってね! というエラーが出て、怒られるのでこんなことしなくても大丈夫そう…
    5. tfenv install <<バージョン>> で指定されたTerraformのバージョンをインストールしつつ、 tfenv use <<バージョン>> で利用するTerraformバージョンを指定する。
    6. terraform --version で指定されたバージョンがインストールされたことを確認。

実践編3: terraform planでtfファイルと実環境の差分を見れること。

※下記は環境により異なるので一例。

  1. 各環境に合わせた認証情報をターミナル上でセットする。
    • 例:
      • AzureAD環境の場合
      • AWS環境の場合
        • aws configureコマンドなどで、対象のAWSアカウントの認証情報をセットする。

応用編1: AzureADの特定リソース(今回はAzureADユーザー)をimportする

  1. AzureADで適当なユーザーを作成。
  2. そのユーザーのページを開いて、 オブジェクト ID をメモする。
  3. 作業ミス時リカバリ対応のため現状のstateファイルのバックアップを取得しておく。
    • terraform state pull > statefile_backup.txt
  4. importする。今回使うリソースは azuread_user。
    1. リンク先の末尾に import文の例がある。
      1. 今回だと terraform import azuread_user.my_user 00000000-0000-0000-0000-000000000000
        1. my_user の部分がtfファイルに記載した名前。 000000〜 の部分にオブジェクトIDを指定する。
  5. user-test.tf と言った形の拡張子.tf の適当なテキストファイルを用意し、下記のように作成する。
    jsx resource "azuread_user" "my_user" {
  6. 試しに terraform plan してみる。
    1. 差分が表示されるので、差分がなくなるように作成したtfファイル(上記例だとuser-test.tf)を追記、修正する。

応用編2: やらかしてしまった ときのterraform stateの修正方法。

※上記の 応用編1 の変更内容を「やらかしてしまった」と仮定して、応用編1の変更内容をなかったことにします。
(この操作によりリカバリ操作の雰囲気がつかめるはず)

  1. 応用編1 で取得したバックアップファイルの statefile_backup.txt を使います。
  2. terraform state push -force statefile_backup.txt を実行。
    • これをすることで応用編1 の変更内容の前の状態に戻せる。
  3. terraform plan -var "env=prod" を実行。
    • 応用編1 と違い、新規リソースが作成しようとする挙動になることを確認。