みなさんこんにちは。マネージドサービス部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に依存) |
スケーラビリティ | 中規模プロジェクトまで適している | 大規模プロジェクトに適している |
選択の指針
プロジェクトの規模:
- 小規模〜中規模: GitHub Actions
- 大規模: Terraform Cloud
開発環境:
- GitHubを中心とした開発: GitHub Actions
- Terraform中心の開発: Terraform Cloud
セキュリティ要件:
- 厳しいセキュリティ要件: GitHub Actions(自社管理可能)
- クラウドサービス利用可: Terraform Cloud
チーム開発:
- 中央集権的な管理が必要: Terraform Cloud
- 柔軟な権限管理が必要: GitHub Actions
コスト:
- 予算制限がある: GitHub Actions(無料プラン)
- 予算に余裕がある: Terraform Cloud(有料プランの機能を活用)
CI/CD手法についてのまとめ
どちらがいいというよりは、どちらも便利ですので要件に沿って使い分けるのがいいのかもしれません。
Terraform Cloudを使ったCI/CD
全体の構成
Terraform Cloudを使った場合、ざっくりと下記のような構成になると考えています。
Terraform Cloudを試してみた
githubなどのレポジトリを更新した後にどのように振舞ってほしいかで設定は変わりますが、レポジトリが更新されたら自動的にplanまで実行するような構成を想定した場合は、下記のような設定が必要となります。
Workspaceを作成
Version Control Workflowを選択
GitHubを選択
Github Appを選択し、認証を行う
連携するレポジトリを選択する
Workflow名やコメントを入れてCreateをクリックする
Variablesから環境変数を登録する
- 環境変数にAPIキーを登録する場合は、Key、Value以外の設定として、必ずSensitiveにチェックを入れてください
start new planをクリックした後から、レポジトリの更新をチェックしてくれるようになります。
レポジトリのファイルを更新します
Terraform CloudのRunsを確認するとPlannedの状態で止まっていることが確認できます
※検証時はAuto Apply設定をOFFにしていますので、Plannedの状態で停止するのは正しい挙動になりますCurrent Runをクリックすると下記のような画面が表示されますので、Confirm & applyをクリックすることで実環境へ反映できます
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