自動ワークフローを適用する
このユニットでは、自動ワークフロー ツールについて、また Terraform および Azure と統合する方法について学習します。
GitHub Actions について
インフラストラクチャ マネージャーであるあなたは、ビルドとデプロイのワークフローで、プロジェクトと同じバージョン管理を使用する必要があります。
GitHub Actions を使用することで、GitHub リポジトリにリンクされた継続的インテグレーションと継続的デリバリー (CI/CD) のプロセスを実行できます。
GitHub Actions を使用すると、GitHub から直接コードのビルド、テスト、デプロイを実行できます。 また、コード レビューの割り当て、ブランチの管理、イシューのトリアージを行うこともできます。
GitHub Actions のコンポーネント
次の図に示すような、GitHub Actions のさまざまなコンポーネントについて説明しましょう。
- ワークフロー:特定のイベントまたはアクティビティによってトリガーされるワークフローとは、ソフトウェア開発ライフサイクルのタスクを自動化するジョブとステップの集まりのことです。
- ジョブ:ある 1 つのランナーで実行される一連のステップ。
- ステップ:1 つ以上のコマンドまたはアクションを実行できるタスク。 各ステップは、特定のイベント (pull request など) が発生した後で実行される個々のアクションで構成されます。
- アクション:組み合わせてステップとすることができるスタンドアロン コマンド。 複数のステップを組み合わせてジョブを作成できます。 個々のアクションは、ソフトウェア開発タスクを自動化するためのパッケージ化されたスクリプトです。 ワークフローを作成するには、GitHub リポジトリの .github/workflows ディレクトリにある YAML ファイルにアクションを追加します。
Terraform の GitHub アクション
hashicorp/setup-terraform
アクションにより、GitHub Actions ワークフローに Terraform CLI が次のように設定されます。
- Terraform CLI の特定のバージョンがダウンロードされて、
PATH
に追加されます。 - Terraform Cloud または Enterprise のホスト名と API トークンを使用して、Terraform CLI の構成ファイルを構成します。
terraform
バイナリの後続の呼び出しをラップし、その STDOUT、STDERR、終了コードをそれぞれstdout
、stderr
、exitcode
という名前の出力として公開する、ラッパー スクリプトをインストールします。
Azure で GitHub Actions を認証する
Terraform により、Azure で認証を行うためのオプションがいくつかサポートされています。
- Terraform を対話的に使用する場合は、Microsoft アカウントを使用して認証することをお勧めします。
- Terraform をコードから、またはオートメーションで使用する場合は、Azure サービス プリンシパルを使用して認証することをお勧めします。
サービス プリンシパルは、アプリケーション、ホステッド サービス、自動化ツールから Azure リソースへのアクセスに使用する ID です。
次のステップ
次のユニットでは、サンプル プロジェクトを設定し、GitHub Actions と Terraform を使用して Azure にデプロイします。
新しい Azure Pipelines 向けの主要な概念
Azure パイプラインを構成するコンポーネントについて説明します。
- トリガーにより、パイプラインを実行するように指示されます。
- パイプラインは、1 つ以上のステージで構成されます。 パイプラインは、1 つ以上の環境にデプロイできます。
- ステージは、パイプライン内のジョブを整理する方法であり、各ステージに 1 つ以上のジョブを含めることができます。
- 各ジョブは、1 つのエージェント上で実行されます。 ジョブはエージェントレスにすることもできます。
- エージェントごとに、1 つ以上のステップを含むジョブが実行されます。
- ステップはタスクまたはスクリプトにすることができ、パイプラインの最小構成要素です。
- タスクは、REST API の呼び出しやビルド成果物の発行などのアクションを実行する、事前にパッケージ化されたスクリプトです。
- 成果物は、実行によって発行されるファイルまたはパッケージのコレクションです。
ヒント
さまざまなパイプライン コンポーネントとその使用方法の詳細については、「まとめ」セクションに記載されているリンクを参照してください。
Azure Pipelines 用の Terraform タスク
plan
、apply
、destroy
など、Azure を操作するコマンドを実行する場合、タスクにより Azure サービス接続が使用され、対象のサブスクリプションに対する操作が承認されます。
Azure に接続する場合は、Azure サービス プリンシパルにサービス接続をバインドすることをお勧めします。 Azure サービス プリンシパルは、自動化ツールから Azure リソースへのアクセスに使用するために作成する ID です。
次の YAML スニペットでは、Azure パイプライン Terraform プロバイダー azurerm
が使用されます。 サービス接続は、environmentServiceNameAzureRM
入力によって指定されます。
- task: TerraformTaskV1@0
inputs:
provider: 'azurerm'
command: 'apply'
workingDirectory: $(Build.Repository.LocalPath)/terraform
backendAzureRmContainerName: 'tfstate'
backendAzureRmKey: 'tf/terraform.tfstate'
environmentServiceNameAzureRM: $(serviceConnection)
ヒント
Azure パイプラインの Terraform プロバイダーとして azurerm
を使用する場合は、Terraform バックエンドの状態で使用するサービス接続とストレージ コンテナーも指定する必要があります。
パラメーターの引き渡し
terraform コマンドにパラメーターを渡す方法は複数あります。 変数を使用すると、パイプラインのさまざまな部分に重要なデータを簡単に取り込むことができます。
ビルド パイプラインの変数を設定するには、次の手順を行います。
- [パイプライン] ページに移動し、適切なパイプラインを選んで、[編集] を選択します。
- このパイプラインの [変数] を探します。
- 変数を追加または更新します。
- 変数をシークレットとしてマークするには、 [Keep this value secret](この値をシークレットに保つ) を選択します。
- パイプラインを保存します。
Terraform のパイプライン変数への出力
TerraformCLI タスクにより、Terraform の output
コマンドの実行がサポートされています。 CLI が実行されると、パイプライン変数が、terraform output
コマンドから生成される各出力変数から作成されます。
次のステップ
次のユニットでは、サンプル プロジェクトを設定し、Azure Pipelines と Terraform を使用して Azure にデプロイします。