ユニット 2 / 11

自動化スクリプト: Bash、PowerShell、Python を安全に生成する

利益:

  • 明確な制約と人工知能によるセキュリティ ガードレールを備えた Bash、PowerShell、Python 自動化スクリプトを作成する機能
  • 各スクリプトに冪等性、ドライラン、エラー処理、ロールバックなどの原則を追加し、「生成、強化、検証」サイクルを適用する機能
  • 作成されたスクリプトの実行が安全であることを意味するものではないことを理解し、破壊的な行を読んでテストすることで責任を負う習慣を身につける能力。

自動化スクリプト: AI を使用して Bash、PowerShell、Python を安全に生成する

システム管理者の最大の敵は、反復的な手作業です。各マシンに接続してログをクリーニングし、20 台のサーバーで同じユーザーを開き、毎朝同じヘルス チェックを実行します。この繰り返しでは、時間と人的エラーの両方が発生する可能性があります。自動化スクリプトは、これらの反復をコンピューターに委任する小さなプログラムです。ほとんどの場合、Linux の世界では Bash (シェル コマンド言語)、Windows の世界では PowerShell (Microsoft の自動化シェル)、およびプラットフォームに依存しない作業用の Python で記述されます。 AI は、これらのスクリプトの初稿を非常に速く作成、説明、改善します。しかし、スクリプトはテキストではなく、システム内で働く力です。 Excel の数式とは異なり、間違っている場合はファイルが削除され、サービスが停止され、アクセスが切断されます。だからこそ、このユニットの約束は次のとおりです。AI がスクリプトを書き、ユーザーはそれを読み、テストし、責任を持って実行します。

この単元では、AI を使用して安全で読みやすく、取得可能なスクリプトを作成する方法を学びます。冪等性 (同じスクリプトを 2 回実行しても損傷は生じない) やドライランなどの命を救う原則。そして、スクリプトを本番環境に導入する前に通過する必要があるチェックについて学びます。

AI を使用したスクリプトはなぜ非常に強力なのでしょうか?

経験豊富な管理者であっても、Bash ループの正確な構文、PowerShell コマンドレット (コマンド)、または Python try/Except ブロックを暗記できない場合があります。 AI はこのギャップを瞬時に埋めます。平易なトルコ語で意図を説明すると、実用的なアウトラインが作成されます。さらに、既存のスクリプトを AI に渡して、「これを説明して」「エラー処理を追加して」「もっと読みやすくして」と言うことができます。これにより、学習曲線が短縮され、ジュニア チーム メンバーの学習スピードが向上します。

しかし、権力には責任が伴います。ほとんどの場合、AI が生成したスクリプトは (すべてが順調であれば) 「ハッピー パス」を正しく記述します。ただし、エッジケース (ファイルの欠落、ディスクの満杯、ネットワークのダウン) を見逃したり、危険な想定をしたりする可能性があります。したがって、AI によるスクリプト生成は、生成、強化、検証の 3 段階で考えてください。

ステップバイステップ: 安全なスクリプトの生成

  1. 意図と制約を明確に書きます。どのオペレーティング システム、どのシェル バージョン、どのファイル パス、どのような権限ですか? 「Ubuntu 22.04、Bash 5、root ではなく sudo、/opt/app/logs でのみ実行」のように。曖昧な要求は危険な思い込みを生み出します。
  2. 安全手すりを求めてください。スクリプトに「失敗時に停止」(Bash で -euo Pipefail を設定)、破壊的な操作の確認を求めるプロンプト、操作前のバックアップ、およびドライラン モードを要求します。これらのガードレールは、AI がバイパスするエッジ状態をキャプチャします。
  3. 冪等で書きます。スクリプトを 2 回目に実行するときに、エラーや損傷が発生しないようにする必要があります。 「ユーザーがすでに存在する場合はスキップする」「存在しない場合はディレクトリを作成し、存在する場合はタッチしない」というロジックを確立します。これにより、自動化を安全に何度も実行できるようになります。
  4. 読んで理解してください。生成されたすべての行を読み取ります。 AI に破壊的なコマンド (rm、Remove-Item、DROP) を個別にマークするように依頼します。
  5. ドライランでテストします。まず、実際の操作ではなく、「何をすべきかを伝える」モードで実行します。出力が期待どおりの場合は、最初にテスト マシンでリアル モードに切り替えます。
  6. カムバックの準備をしましょう。スクリプトはバックアップを取りますか?バックアップを復元する方法を知っていますか?ログは記録されていますが、後で何をしているのか確認できますか?
ヒント: 各デストラクター スクリプトに DRY_RUN=true 変数と --apply フラグを含めます。デフォルトの動作では、何も削除せずに何が起こるかを書きます。 --apply が明示的に指定された場合にのみ、実際の削除が機能するようにします。この 1 つの習慣が、キャリアにわたる災難を防ぎます。

ミニケース3個

ケース 1 — 冪等性により 3 時間節約されました。管理者は、25 台のサーバーに同じ監視エージェントをインストールするスクリプトを作成しました。最初のバージョンは冪等ではありませんでした。エージェントがすでにインストールされている場合、2 回目の実行で構成が壊れていました。エンジニアはAIに「インストールされているかどうかを確認し、インストールされている場合はスキップする」ロジックを追加させました。次のメンテナンス期間中に、スクリプトが誤って 2 回トリガーされましたが、害はありませんでした。冪等性により、25 台のサーバーのリカバリが不要になりました。

ケース 2 — ドライランによりルート ディレクトリが保存されました。あるチームは、古いバックアップを削除する Bash スクリプトを受け取りました。変数が空の場合、パスは /backups/ ではなく / になります。これは典型的な危険です。エンジニアは最初にこれを DRY_RUN モードで実行し、出力内に rm -rf / に似た行を見つけたときにフリーズし、変数チェック (: "${BACKUP_DIR:?cannot be empty}") を追加しました。ドライランニングでは、本番環境に入る前にディスク全体を消去するバグが発生しました。

ケース 3 — エラー管理により、ある晩起動できなくなりました。ディスクがいっぱいになったときに、PowerShell スクリプトがログをアーカイブしていました。最初のバージョンは、ネットワーク共有にアクセスできない場合に通知なく失敗し、ディスクがいっぱいになり続けました。 AIに「各ステップで成功を確認し、失敗した場合はメールで通知して停止」が追加されました。 1週間後、ポストが壊れてしまいました。スクリプトは停止して警告され、ディスクはいっぱいではなく、午前 3 時に誰も起きませんでした。

コピー可能な 4 つのテンプレート

1) 安全な Bash スクリプトの生成:

あなたの役割: シニア Linux 自動化エンジニア。 Ubuntu 22.04 / Bash 5 用のスクリプトを作成します。目的:[目的]。ルール:- 「set -euo Pipefail」で開始します。- 「: ${VAR:?}」で必要な変数を検証します。- デフォルトの DRY_RUN=true で破壊的な操作を実行します。 実際のアプリケーションは --apply フラグを使用してのみ実行します。 - 各ステップを標準出力に記録し、エラー時に意味のあるメッセージを表示して停止します。 - 冪等にします (2 回目の実行でダメージが発生しないように)。次に、潜在的に破壊的な行を個別にマークし、運用前にテストする必要がある 3 つのケースを書き込みます。

2) 既存のスクリプトを強化します。

次のスクリプトを実稼働用に準備します。(1) エラー処理とログを追加し、(2) 冪等にし、(3) ドライランの背後に破壊的なコマンドを配置し、(4) 変数へのハードコードされたパスとシークレットを抽出します。変更した各行とその理由を簡単に説明します。スクリプト: [スクリプト]

3) PowerShell による安全な自動化:

あなたの役割: Windows 自動化の専門家。 PowerShell 5.1 互換のスクリプトを作成します。目的: [目的]。ルール:- "$ErrorActionPreference = 'Stop'" で開始します。- デストラクター コマンドレットに -WhatIf サポートを追加します (デフォルトの WhatIf)。- 各アクションを try/catch でラップし、エラーをログに記録します。- 資格情報のハードコーディング。パラメータまたは安全な入力を使用します。破壊的な行をマークし、元に戻す手順を書き込みます。

4) Cron/スケジュール式のデコードと検証:

次の cron ステートメントを平易なトルコ語で説明し、次の 3 つのランタイムを作成します: [式]また、私の目標が「[目的]」である場合、このステートメントは正しいですか、それとも提案する修正はありますか?期間効果にも注目してください。

弱いプロンプト / 強いプロンプト

弱いプロンプト:

ログをクリーンアップするスクリプトを書いてください。

このプロンプトは危険です。どの OS、どのディレクトリ、どの年齢制限、どのセキュリティ ガードレールが明確ではありません。 AI は、ワンライナーで破壊的で検証不可能な rm を提供する可能性があります。

強力なプロンプト:

あなたの役割: シニア Linux 自動化エンジニア。 Ubuntu 22.04 / Bash 用のログ クリーニング スクリプトを作成します。 /opt/app/logs にある 30 日より古い .log ファイルのみを削除します。ルール: set -euo パイプ失敗。 BACKUP_DIR 変数と LOG_DIR 変数を検証します (空の場合は停止します)。削除前のログファイルリスト。 DRY_RUN=true をデフォルトとし、実際の削除は --apply を使用した場合のみです。冪等にしましょう。破壊的なラインをマークし、テストする必要がある 3 つのシナリオを書きます。

特徴

弱い/速いスクリプト

強化されたスクリプト

エラー処理

いや、サイレント失敗

set -euo パイプ失敗、トライ/キャッチ

破壊的な行動

直接動作します

ドライラン + オープンチェックフラグ

再起動

害を及ぼす可能性があります

べき等、安全

秘密管理

ハードコードされた

変数/非表示の入力

元に戻す

なし

バックアップと復元のステップ

よくある間違い

  • 予行演習を行わずに破壊的なスクリプトを実行します。ドライ モードでは、rm、Remove-Item、DROP を含むスクリプトが最初に表示されないため、ディスクが消費されます。
  • null 変数のチェックをスキップします。空のパス変数は /backups/ の代わりに / を作成します。注:必ず「${VAR:?}」で確認してください。
  • 冪等性を忘れる。スクリプトは 2 回実行されると中断され、自動化の信頼性が低くなります。
  • ハードコーディングされた秘密。スクリプトにパスワードとキーを書き込むと、そのスクリプトを共有するときに漏洩します。
  • 本番環境でのテスト。本番で最初の上演を行うということは、ステージでリハーサルを行うことを意味します。まずはテスト機。
注意: 「動作した、つまり正しい」という理由だけで、AI によって与えられたスクリプトを受け入れないでください。機能するからといって、破壊的ではないというわけではありません。スクリプトはハッピー パス上で実行され、エッジ状態でデータを削除できます。本当のテストはエッジケースです。

要約すれば

自動化スクリプトは繰り返しを排除し、人的エラーを削減します。 AI は、これらのスクリプトの生成、説明、強化を驚くほど高速に行います。しかし、スクリプトは強力な力を持っています。スクリプトが間違っている場合は、削除し、停止し、中断します。したがって、「作成、強化、検証」サイクルを確立します。すべての破壊的なスクリプトに、エラー処理、冪等性、ドライラン、およびフォールバックを含めます。シークレットを変数に抽出し、テスト マシンで最初の実行を実行します。 AI スクリプトが書き込みます。それを読んでテストし、責任を持って実行するのがあなたの仕事です。

アプリケーションタスク

ジョブ内で手動で繰り返すタスクを選択します (ログのクリーンアップ、ユーザーのオープン、ヘルスチェックなど)。上記の「Secure Bash スクリプト」または「PowerShell セキュア オートメーション」テンプレートを使用して AI からアウトラインをリクエストします。生成されたスクリプトを 1 行ずつ読み、有害な行をマークします。まずテスト マシンで予行モードで実行し、出力を予想と比較します。次に、スクリプトを AI に返し、「強化」テンプレートを使用して改良し、2 つのバージョン間の 5 つの違いに注目します。

チェックリスト

  • [ ] プロンプトに OS、シェルのバージョン、パス、権限などの制限を含めましたか?
  • [ ] スクリプトは set -euo Pipefail / $ErrorActionPreference='Stop' でフォールト トレラントですか?
  • [ ] 破壊的な操作はドライラン/-WhatIf の背後にあり、明示的なチェック フラグが必要ですか?
  • [ ] スクリプトはべき等ですか (2 回目の実行では安全ですか)?
  • [ ] シークレットをハードコーディングするのではなく、変数/シークレット入力に抽出しましたか?
  • [ ] テストマシンで最初の実行を行い、復帰計画を準備しましたか?