Terraform Cloudを使ったNew Relic設定のCI/CD

記事タイトルとURLをコピーする

みなさんこんにちは。マネージドサービス部MSS課の塩野(正)です。 ここ最近急に冷え込んだり、急に暖かくなったりで、気温の変化が激しい今日この頃ですが、体調を崩さないように気を付けたいですね。

さてさて、今回はTerraform Cloudを使ったNew RelicのCI/CDの実現ということで、CI/CDといえばAWSやらGoogle Cloud、Azureなどのリソース展開の方をイメージしがちですが、DatadogやNew Relicなどの監視システムの設定ももちろん対応しています。私は開発者のロールではないのでCI/CDを使った展開をおこなう機会があまりなかったのですが、実際に使ってみるととても便利ですので、機会があればぜひ使ってみてください。

目次

Terraformを使ったCI/CDの選択肢

New Relic環境をTerraformを使って設定する際にCI/CDの構成をとるとするなら、選択肢としてはGitHub ActionsとTerraform Cloudの2つのパターンが考えられます。 主な特徴を比較すると下記のような違いがあります。

GitHub ActionsとTerraform Cloudの比較

特徴 GitHub Actions Terraform Cloud
統合 GitHubリポジトリと密接に統合 Terraformに特化したサービス
柔軟性 高い柔軟性とカスタマイズ性 Terraform特有の機能に最適化
状態管理 自前で設定が必要 組み込みの状態管理機能あり
セキュリティ 秘密情報の管理に注意が必要 リモート実行により認証情報管理が容易
コスト 無料プランで十分な実行時間 リソース数に応じた課金(有料プラン)
セットアップ 比較的簡単 Terraformに特化した設定が必要
変数管理 基本的な変数管理機能あり 環境ごとの変数管理が容易
ワークスペース 手動で管理が必要 ワークスペース間のステート共有が容易
ベンダーロックイン 低い(GitHubに依存) やや高い(Terraform Cloudに依存)
スケーラビリティ 中規模プロジェクトまで適している 大規模プロジェクトに適している

選択の指針

  1. プロジェクトの規模:

    • 小規模〜中規模: GitHub Actions
    • 大規模: Terraform Cloud
  2. 開発環境:

    • GitHubを中心とした開発: GitHub Actions
    • Terraform中心の開発: Terraform Cloud
  3. セキュリティ要件:

    • 厳しいセキュリティ要件: GitHub Actions(自社管理可能)
    • クラウドサービス利用可: Terraform Cloud
  4. チーム開発:

    • 中央集権的な管理が必要: Terraform Cloud
    • 柔軟な権限管理が必要: GitHub Actions
  5. コスト:

    • 予算制限がある: GitHub Actions(無料プラン)
    • 予算に余裕がある: Terraform Cloud(有料プランの機能を活用)

CI/CD手法についてのまとめ

どちらがいいというよりは、どちらも便利ですので要件に沿って使い分けるのがいいのかもしれません。

Terraform Cloudを使ったCI/CD

全体の構成

Terraform Cloudを使った場合、ざっくりと下記のような構成になると考えています。

Terraform Cloudを試してみた

githubなどのレポジトリを更新した後にどのように振舞ってほしいかで設定は変わりますが、レポジトリが更新されたら自動的にplanまで実行するような構成を想定した場合は、下記のような設定が必要となります。

  1. Workspaceを作成

  2. Version Control Workflowを選択

  3. GitHubを選択

  4. Github Appを選択し、認証を行う

  5. 連携するレポジトリを選択する

  6. Workflow名やコメントを入れてCreateをクリックする

  7. Variablesから環境変数を登録する

    1. 環境変数にAPIキーを登録する場合は、Key、Value以外の設定として、必ずSensitiveにチェックを入れてください
  8. start new planをクリックした後から、レポジトリの更新をチェックしてくれるようになります。

  9. レポジトリのファイルを更新します

  10. Terraform CloudのRunsを確認するとPlannedの状態で止まっていることが確認できます
    ※検証時はAuto Apply設定をOFFにしていますので、Plannedの状態で停止するのは正しい挙動になります

    1. Current Runをクリックすると下記のような画面が表示されますので、Confirm & applyをクリックすることで実環境へ反映できます

    2. Confirm & applyをクリック後の画面

各種コード

# /environment/policy/main.tf

module "alert_policy" {
  source      = "../../modules/alert_policy"
  account_id  = var.account_id
  api_key     = var.api_key
  region      = var.region
  policy_name = "example_policy"
}
# /environment/policy/variables.tf

variable "account_id" {
  type        = string
  description = "Your New Relic account ID"
}

variable "api_key" {
  type        = string
  sensitive   = true
  description = "Your New Relic API key"
}

variable "region" {
  type        = string
  description = "The region for your New Relic account (e.g., 'US' or 'EU')"
  default     = "US"
}
# /modules/alert_policy/main.tf
terraform {
  required_version = "~> 1.0"
  required_providers {
    newrelic = {
      source  = "newrelic/newrelic"
      version = "~> 3.12.0"
    }
  }
}

provider "newrelic" {
  account_id = var.account_id
  api_key    = var.api_key
  region     = var.region
}

resource "newrelic_alert_policy" "policy" {
    name      = var.policy_name
    incident_preference = "PER_POLICY"
}
# /modules/alert_policy/variables.tf
variable "account_id" {}
variable "api_key" {}
variable "region" {}
variable "policy_name" {}

まとめ

CI/CDの環境を構築して実際に動作確認するところまで試してみましたが、コマンドをひたすら叩いて設定を適用することを考えると、セキュリティ的にも実際の作業的にもとても快適に使えるのではないかと考えています。今回はTerraform Cloudを使ったCI/CDの動作確認でしたが、Github Actionsもとても便利ですのでまた機会があれば記事にしたいと思います。

この記事がどなたかのお役に立てれば幸いでございます。

宣伝

弊社では、お客様環境のオブザーバビリティを加速するための伴走型のNew Relic導入支援サービスなどもご提供しております。 もしご興味をお持ちの方は、こちらのサービスご紹介ページの一番下にあるお問合せフォームよりお問合せ頂けましたら幸いでございます。

関連記事

https://blog.serverworks.co.jp/github-actions-cicd-configration-for-newrelicblog.serverworks.co.jp

◆ 塩野 正人
◆ マネージドサービス部 所属
◆ X(Twitter):@shioccii
◆ 過去記事はこちら

前職ではオンプレミスで仮想化基盤の構築や運用に従事。現在は運用部隊でNew Relicを使ってサービス改善に奮闘中。