0Pricing
CI/CD with GitHub Actions & DevOps Pipelines · レッスン

インフラストラクチャ更新の自動化

レビューと承認のステップを含むワークフローを実装し、インフラストラクチャの変更を安全に計画、適用、破棄します。

「インフラストラクチャ更新の自動化」はCoddyKit上の無料CI/CD with GitHub Actions & DevOps Pipelinesレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCI/CD with GitHub Actions & DevOps Pipelines学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 CI/CD with GitHub Actions & DevOps Pipelinesコースには全4レッスンが含まれています。

IaC の更新を自動化する理由

インフラストラクチャを手作業で管理すると、時間がかかり、ミスも発生しやすくなります。Infrastructure as Code (IaC) は、インフラストラクチャをコードで定義することで、この問題を解決します。

GitHub Actions などのツールで IaC の更新を自動化すると、一貫性と速度が向上し、人為的なミスを減らせます。これにより、インフラストラクチャを常に定義どおりの状態に保てます。

IaC ワークフローのライフサイクル

IaC の自動化には、plan、apply、場合によっては destroy という明確なライフサイクルがあります。各ステップを CI/CD パイプラインに組み込めます。

  • Plan: 変更を実行せずに、提案された変更内容を確認します。
  • Apply: 計画した変更をインフラストラクチャに反映します。
  • Destroy: インフラストラクチャのリソースを削除します(細心の注意を払って使用してください)。

GitHub Actions は、これらのステップを安全に管理するのに役立ちます。

Terraform で変更を計画する

変更を加える前に、何が起こるのかを把握することが重要です。Terraform の plan コマンドを使うと、インフラストラクチャの変更内容を事前に確認できます。

このコマンドは、コードで定義した望ましい状態と、現在のインフラストラクチャの状態を比較し、追加、変更、または削除されるリソースを表示します。

簡単な Terraform プロジェクトで、次のコマンドを実行してみましょう。

echo "Initializing Terraform..."
terraform init

echo "Running terraform plan..."
terraform plan

`terraform plan` のワークフロー

コードが main ブランチにプッシュされるたびに terraform plan を自動実行する GitHub Actions ワークフローを作成しましょう。これにより、提案された変更についてすぐにフィードバックを得られます。

plan の出力は、Pull Request またはワークフローのログで直接確認できます。

name: 'Terraform Plan'

on:
  pull_request:
    branches:
      - main

jobs:
  terraform:
    name: 'Terraform Plan'
    runs-on: ubuntu-latest

    steps:
    - name: Checkout repository
      uses: actions/checkout@v4

    - name: Setup Terraform
      uses: hashicorp/setup-terraform@v3

    - name: Terraform Init
      id: init
      run: terraform init

    - name: Terraform Plan
      id: plan
      run: terraform plan -no-color

Environments による手動承認

インフラストラクチャの変更を自動的に適用するのは危険な場合があります。GitHub Environments を使うと、ワークフローに手動承認のステップを追加できます。

環境(例: "staging"、"production")を定義し、デプロイジョブの実行前に特定のレビュアーによる承認や待機時間を必須にするルールを設定できます。

これにより、重要な操作の前に人による確認の関門を設けられます。

変更を適用するワークフロー

変更を安全に適用するため、保護された GitHub Environment を対象とするワークフローを構成します。ジョブは一時停止し、指定されたチームメンバーの承認を待ちます。

承認された後にのみ terraform apply コマンドが実行され、インフラストラクチャが更新されます。

name: 'Terraform Apply'

on:
  workflow_dispatch:
    inputs:
      environment:
        description: 'Environment to deploy to'
        required: true
        default: 'staging'

jobs:
  terraform:
    name: 'Terraform Apply'
    runs-on: ubuntu-latest
    environment: ${{ github.event.inputs.environment }} # Target environment for approval

    steps:
    - name: Checkout repository
      uses: actions/checkout@v4

    - name: Setup Terraform
      uses: hashicorp/setup-terraform@v3

    - name: Terraform Init
      id: init
      run: terraform init

    - name: Terraform Apply
      id: apply
      run: terraform apply -auto-approve

インフラストラクチャを安全に破棄する

terraform destroy コマンドは、Terraform の構成で定義されているすべてのリソースを完全に削除します。これは非常に強力で、潜在的に危険な操作です。

一時的なテスト環境を解体する場合など、明確に管理された特定の状況でのみ使用してください。実行する前に、必ず内容を再確認してください。

強力な手動ゲートと複数回の確認なしに `destroy` を自動化してはいけません。

echo "Preparing to destroy infrastructure..."
terraform init
terraform plan -destroy
read -p "Are you absolutely sure you want to destroy ALL resources? (yes/no): " CONFIRM
if [ "$CONFIRM" = "yes" ]; then
  echo "Destroying infrastructure..."
  terraform destroy -auto-approve
else
  echo "Destroy operation cancelled."
fi

管理されたインフラストラクチャの破棄

`destroy` の場合でも、保護をさらに強化するために GitHub Environments を活用できます。これにより、適切な権限なしに、誤操作や悪意のある操作で本番リソースが破棄されるのを防げます。

ワークフローでは承認を必須にし、手動でのみ起動できるようにする必要があります。できれば、特定のロールを持つユーザーだけが起動できるようにします。

name: 'Terraform Destroy'

on:
  workflow_dispatch:
    inputs:
      environment:
        description: 'Environment to destroy'
        required: true
        default: 'staging'

jobs:
  terraform:
    name: 'Terraform Destroy'
    runs-on: ubuntu-latest
    environment: ${{ github.event.inputs.environment }} # Target environment for approval

    steps:
    - name: Checkout repository
      uses: actions/checkout@v4

    - name: Setup Terraform
      uses: hashicorp/setup-terraform@v3

    - name: Terraform Init
      id: init
      run: terraform init

    - name: Terraform Destroy
      id: destroy
      run: terraform destroy -auto-approve

IaC 自動化のベストプラクティス

堅牢で安全な IaC パイプラインを維持するには、次の点に注意します。

  • コードレビュー: IaC の変更には、必ずコードレビューを必須にします。
  • 最小権限: ワークフローのトークンとサービスアカウントには、必要最小限の権限だけを付与します。
  • 状態のロック: IaC ツール(Terraform など)で状態ロックを使用し、同時変更を防ぎます。
  • 小さく段階的な変更: 大規模で一括的なインフラストラクチャの更新は避けます。
  • 環境の分離: 承認ルールの異なる環境(dev、staging、prod)を個別に使用します。

IaC ワークフローの確認

リソースの計画、適用、破棄によって IaC の更新を自動化する方法を学びました。ここでは、これらのプロセスを安全にする方法について理解度を確認しましょう。

復習: IaC 更新の自動化

このレッスンでは、GitHub Actions を使って Infrastructure as Code のワークフローを自動化する方法を学びました。次の内容を扱いました。

  • 変更を安全に事前確認するための terraform plan の実行。
  • インフラストラクチャを適用または破棄する前の手動承認ゲートとしての GitHub Environments の使用。
  • 管理された terraform apply と terraform destroy 操作のためのワークフローの実装。
  • 安全で信頼性の高い IaC 自動化のための主要なベストプラクティス。

IaC を自動化すると、クラウドリソースを効率的かつ安心して管理できます。

よくある質問

「インフラストラクチャ更新の自動化」レッスンは無料ですか?

はい。「インフラストラクチャ更新の自動化」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、CI/CD with GitHub Actions & DevOps Pipelinesコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 CI/CD with GitHub Actions & DevOps Pipelinesコースには全4レッスンが含まれています。

「インフラストラクチャ更新の自動化」で何を学びますか?

レビューと承認のステップを含むワークフローを実装し、インフラストラクチャの変更を安全に計画、適用、破棄します。 ブラウザで直接実行するハンズオンコードでCI/CD with GitHub Actions & DevOps Pipelinesを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

CI/CD with GitHub Actions & DevOps Pipelinesを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCI/CD with GitHub Actions & DevOps Pipelinesは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「インフラストラクチャ更新の自動化」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCI/CD with GitHub Actions & DevOps Pipelinesレッスンでコードを書いて実行できますか?

はい。すべてのCI/CD with GitHub Actions & DevOps Pipelinesレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Terraform と GitHub Actions による IaC
  2. クラウドリソースの管理
  3. インフラストラクチャ更新の自動化
  4. Terraform Stateとリモートバックエンドの管理
← CI/CD with GitHub Actions & DevOps Pipelinesに戻る