LINEで送る
Pocket

私のMacは以下よりBitBarを使ってbrew update/upgradeがあった場合、ステータスバーに表示させてワンクリックでバージョンアップをしています。そこでよくTerraformもバージョンアップしてそのまま気づかずterraform applyなどを実行してしまっているので、開発環境があればバージョンも固定されるし、デバッグもできるし、管理としてはベストなんじゃないかと思い今回構築をしてみました。

[BitBar][Homebrew]brew updateが来た時に自動でMacのステータスバーで表示したいからのupgradeもしたい


構成


開発環境

  • docker

  • docker-compose.yml

  • Dockerfile

まずは開発環境から説明してきましょう。TerraformはDocker hub公式でコンテナが用意されているので現状のバージョンと同じ1.0.5を利用しました。またTerraformはAPI経由での実行なので特にPortも開ける必要がありません。(ちなみにTerraformのImageはAlpine Linuxでした)

AWSでいうクレデンシャルはDigitalOceanだとAPI Keyになるので一旦.bashrcやTerraform Cloudで利用するAPI Keyはgitignoreしてコンテナ内コピーするようにしました。ここらへんAWSだとKMS使って暗号化するべきですね。あとはdocker execでログインしてterraform initとplanやらapplyできれば完了です。物凄くシンプル。開発環境はこんなところです。次はCircleCIでのTerraform CI/CDに課題があったので、少し変更してみました。


Terraform CI/CD

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

以前CircleCIでTerraformのCI/CD環境を実装しました。(上記ブログにて)TerraformのCI(validateやplan)は物凄く重宝しているのですが、Ansible等修正で毎回masterマージでterraform applyされてしまうので非常にリスクもありますし事故ります。まあapplyなんてローカルや開発環境で実行すればいいじゃん〜と思いますが、なるべく他の人でも修正してCircleCIで任意のタイミングでapplyできるような環境を作りたかったというのが目的です。(自分ひとりですがね..草)

なのでどうすればいいのか考えたところ!CircleCIのManual Approvalで承認してからapplyすればいいじゃんというのもありましたが、結局その過程と承認するのがめんどくさかったのと特に運用は変わらないので不採用になりました。なので!

[CircleCI][ECS/Fargate]API v2を使って気楽にステージング環境をデプロイさせる

以前ブログでも書きましたが、CircleCIのAPIを利用してシェルでapplyできるようにすれば任意のタイミングで実行できるし良さそうとのことで実装してみました。

  • terraform-apply.sh

  • .circleci/config.yml

  • 実行

これでmasterマージはterraform validateとplanしか実行されず、シェルでブランチ名の指定、もしくはmasterを引数で指定して実行することによって好きなタイミングでterraform applyを実行することができました。


まとめ

開発環境を作ることでわざわざローカルにTerraformをインストールしなくても済みますし、WIndowsでDockerを利用している方も複数でも簡単に開発ができる環境が整いました。またapplyも実行する環境にとらわれず適用できる環境も整ったので満足です。

次回はAWSでの場合を実装してみたいと思います!むしろもっと他にいい運用方法あれば教えて下さい!!

※追記

CircleCI path-filteringを利用して差分があればapplyみたいなこともできるみたいです。ここは後で試してみよう。しかもOrbsでTerraform CI/CD対応しているのも知らなかったのでこっちに移行したほうが良さそうですね。

https://circleci.com/developer/orbs/orb/circleci/terraform

※追記

APIだと誰でもapply出来てしまうのでpath-filteringを利用しましょう!

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

LINEで送る
Pocket


adachin

1989年生まれのLancers SRE。 ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。好きなツールはAnsible,Terraform,CircleCIで、ECS/Fargateでのインフラ構築を得意とする。副業では数社サーバー保守とベンチャー企業のインフラ改善やMENTAで未経験者にインフラのコーチングを実施している。また、「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。現在はサービスの信頼性向上、可用性、レイテンシ、パフォーマンス、モニタリング、緊急対応、インフラコード化、リファクタリング、セキュリティ強化、新技術の検証、Docker開発環境の提供、AWSでのインフラ構築、ECS/Fargateへ移行、CakePHP4での管理画面作成、メンター、分析基盤の運用を担当している。

0件のコメント

コメントを残す

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