はじめに
この記事は SRA Advent Calendar 2023 の23日目の記事です。
アドバンスト クラウド エンジニアリング事業部の杉本です。
日々の業務では、ネットワーク、AWS、Azureの基盤の構築・運用を行なっています。
その中で、IaC や自動化を取り入れることもミッションとされています。
今週、忘年会を 3件入れたことを後悔しつつも前向きに、この記事を書いております。
社内の AWS 環境では、Jira と AWS Service Catalog を利用 し、環境の払い出しをしておりますが、昨今の CI/CD パイプラインのブームに乗っかるため、この払い出し方法を考えてみようと思います。
現在の構成
現在は、AWS Service Catalog と Jira を組み合わせて AWS Account の払い出しを行なっています。払い出しには Cloud Formation と一部 Lambda を使用しています。 数年前に Lambad のランタイムの変更で、一度コードを修正したくらいでほぼ手間はかからずでした。
ただ、Lambda で実行するスクリプトを zip して S3 に置くところは、少々面倒さを感じておりました。
こうしてみたい
まず、Cloud Formation ではなく、Terraform を使いたいが一番にあります。Terraform の plan して差分を見て apply する流れに運用する上ではこの上ない安心感があるためです。
次に、リポジトリですが、現在社内では Jira を使用しているので、そのまま使える BitBucket にしました。
最後にワークフローについては Jira をそのまま利用することにしました。
やってみた
まず最初に、Jira のワークフローの部分は間に合わせることが出来ませんでした。そのため、上記の図の BitBucket から右側のみです。 Bitbucket内の Terraform テンプレート リポジトリのマージをトリガーに、Terraform Cloud が plan を自動実行し、その後 apply することで AWS リソースがデプロイされることを確認できました。
それぞれのサービスでは以下を実施しました。
Terraform Cloud
1. Terraform Cloud アカウント作成
2. Project, Workspace 作成
3. AWS アクセス用環境変数作成
- AWS 側で割り当てたロールの ARN を指定
4. Bitbucket で作成したコンシューマキーを登録
AWS
1. IAM で IDプロバイダ として、app.terraform.io を登録
2. ロール割り当て
- AWSアカウント、IAMユーザ・グループ作成のみなので、許可ポリシーは Organizations と IAM のみとした
- 信頼されたエンティティは Terraform Cloud の Project名、Workspace 名で絞った
Bitbucket Cloud
1. Butbucket アカウント作成
2. ワークスペース、リポジトリ作成
3. ワークスペースの設定から OAuth コンシューマキーを作成
- コールバックURL は Terraform Cloud のコンシューマキー登録ページに表示されたものを登録
4. Terraform のテンプレートファイルをリポジトリに追加
まとめ
上記を実施することで、リポジトリにマージされたタイミングで Terraform Cloud が動き、AWSリソースをデプロイすることができました。
Terraform のテンプレートの差分は Bitbucket で、 tfstate の差分は Terraform Cloud とそれぞれで確認することになりますが、それぞれの得意分野での確認なので気になることはなさそうです。
Terraform Cloud は、複数メンバーでデプロイ作業するため環境を統一したいが、サーバを管理対象として持ちたくない場合に便利だと感じました。 tfstate を持つ単位で Terraform Cloud の Workspace を分ける必要があるので、 Workspace を分ける単位は最初にある程度考えた方が良さそうです。
Jira Service Management から繋がることでパイプラインが完成するので、社内の環境払い出しを変えるため、次は Jira にトライしてみる予定です。