Pocket

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

前回ではDigitalOceanでのTerraform x CircleCIの実装をしましたが、今回はAWSで試してみました。今回は本番の他にStagingが増えただけなので、実装方法は基本変わらない作りとなっています。


■構成

  • Repository

  • CI/CDフロー

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

■.circleci/config.yml

  • Environment Variables

PRD_TERRAFORM_AWS_ACCESS_KEY_ID
PRD_TERRAFORM_AWS_SECRET_ACCESS_KEY

STG_TERRAFORM_AWS_ACCESS_KEY_ID
STG_TERRAFORM_AWS_SECRET_ACCESS_KEY

追加したのは環境ごとのクレデンシャルを読み込ませており、 Jobs でprdとstgを分けています。それに毎回マージするたびに terraform apply されてしまうので怖いのですが、基本planでエラーが出ていれば止まるので、制御文入れればもっと安全ですね。さらに改善する余地がありますな。あとterraformのコンテナイメージは hashicorp/terraform:light にすると最新を持ってきてしまうのでバージョン固定にしています。


■Test push/merge

  • fail

  • push

  • master merge


■まとめ

とりあえずザッーと作ってしまいましたが、実際に運用してみると課題がありそうですな。でも、terraformは頻繁にバージョンアップがあるし、CI回すことで冪等性も保たれるということがメリットになります。ちなみに terraform apply してもエラーが出ることもありますが、Deployサーバーなどでエラーを解決してプルリクを出せば結局問題なく運用できると思います。運用し始めたけどplanまででいいかも。。

※追記

applyはpath-filteringで!

[CircleCI][Orbs][path-filtering]特定ディレクトリに差分が出たらterraform applyを適用するように実装してみた

Pocket

カテゴリー: AWSCircleCITerraform

adachin

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

0件のコメント

コメントを残す

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