このブログサーバーはDigitalOceanで運用しております。(以下より)もちろんTerraformでインフラコード化をしているのですが、今まではローカル環境で terraform plan,apply をしていく中で、 terraform fmt,validate し忘れたり漏れが発生したことがあったので、今回CircleCIを使って、CI/CD環境を実装してみました。まずは構成と流れを説明していきましょう!


■構成

  • Repository

  • CI/CDフロー

  • 流れ
  1. プルリクを出す
  2. terraform init , terraform fmt , terraform validate, terraform plan
  3. master マージ
  4. terraform init , terraform fmt , terraform validate,terraform plan ,terraform apply

■.circleci/config.yml

  • Environment Variables

TFC_API_TOKEN

DigitalOceanのTerraformはAWSのクレデンシャルで制御するのではなくTerraform Cloudを利用しているため、API経由でkeyを取得して環境変数に指定します。(下記より)  まずは簡単に設定ファイルの説明をしていきます。

3行目references は関数のようなもので、それを Jobs から呼び出しています。コマンドなどを重複することなくキレイに書けるのがメリットですね。

あとは各Jobsに対して terraform_fmt_validate , terraform_plan , terraform_applyの3つを制御しています。最後にworkflowsでmasterマージのみ terraform apply するように指定します。次はテストをしてみましょう。

[DigitalOcean][Terraform]Droplet,Floating IP,Firewall,DNSを設定してみた


■Test

  • Pull Request

テストは適当にインバウンドルール(ポート)指定してリリースできるかやってみました。

  • terraform_fmt_validate

  • terraform validate error

validateに失敗すると次のjobである terraform plan ができないようになっています。

  • terraform_plan

  • master merge

  • terraform_apply

Good!!!!!!!!


■まとめ

実装してみましたが、手元でテストする必要がなくなりCircleCIによるCI/CDで、よりTerraformを安全にリリースすることができました。今後はスケジュール機能を使って1週間に1回は実行するようにすればTerraformのバージョンアップによる動かない問題もすぐに検知できそうなのでやってみようと思います。

AWSも構成は基本同じだと思うので、試したらブログします!(以下より)

[AWS]CircleCIでTerraformのCI/CD環境を実装してみた

参考:https://learn.hashicorp.com/terraform/development/circle



adachin

1989年生まれのFindy/SRE。ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。現在はサービスの信頼性向上、DevOps、可用性、レイテンシ、パフォーマンス、モニタリング、オブザーバビリティ、緊急対応、AWSでのインフラ構築、Docker開発環境の提供、IaC、新技術の検証、リファクタリング、セキュリティ強化、分析基盤の運用などを担当している。個人事業主では数社サーバー保守とベンチャー企業のSREインフラコンサルティングやMENTA/TechBullで未経験者にインフラのコーチング/コミュニティマネージャーとして立ち上げと運営をしている。また、過去「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。

0件のコメント

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください