IaCのCI_CDを実現するSpaceliftを触ってみた

1.3K Views

May 14, 22

スライド概要

詳細ブログ↓
https://zenn.dev/yuta28/articles/spacelift-tutorial

profile-image

フィンテック企業でインフラ運用改善を担当しているSREです。 ブログでまとめたLTスライドをアップロードします。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

IaCのCI/CDを実現する Spaceliftを触ってみた

2.

自己紹介 Name:ユータ Occupation:SRE Twitter:@Y0u281 (オーでなくゼロです) ブログ:https://zenn.dev/yuta28 Twitter

3.

目次 ● Spaceliftについて ● CI/CD実装 ● Policy as Codeについて ● 課題 ● まとめ

4.

Spaceliftについて ● Infra as Codeを実現してくれるCI/CDプラットフォーム ○ Terraform,Pulumiに対応 ○ Gitのリポジトリと連携するだけで自動で CI/CD基盤を構築 ● 実行権限や編集などの権限をコードベースで管理可能(Policy as Code) ● 日本語情報が一切ない(Spaceliftで検索すると私の記事が2番目にHit)

5.

CI/CD実装 GitHubリポジトリをSpaceliftと連携

6.

CI/CD実装 作成リソース ● VPC1個

7.

CI/CD実装 リポジトリ連携後、PRで自動でplan(ドライラン)が起動

8.

CI/CD実装 Dockerコンテナが起動し、その中でTerraformが実行される。

9.

CI/CD実装 TerraformがAWS VPCを作成 AWS VPCが作成された !

10.

CI/CD実装 Spaceliftからコマンド実行も可能

11.

Policy as Codeについて 運用ルールや権限をコードで管理する考え ● ● ● 変更履歴が確認可能 以前のポリシーへのロールバックが容易 Git管理することでコードレビュー、CI/CDを実現 SpaceliftではOpen Policy Agent(OPA)とRegoで実現 https://github.com/spacelift-io/terraform-starter チュートリアル参照

12.
[beta]
Policy as Codeについて
Regoの書き方は割愛

package spacelift
# This task policy only allows you to exectute a few selected
commands.

JSONライクなクエリ言語

# You can read more about task policies here:
# https://docs.spacelift.io/concepts/policy/task-run-policy
allowlist := {
"ls",
"terraform taint random_password.secret" ,

右の例ではSpaceliftからの

}
allowed { allowlist[_] == input.request.command }

コマンド実行を制限

deny["Only selected commands are allowed" ] { not allowed }
# Learn more about sampling policy evaluations here:
# https://docs.spacelift.io/concepts/policy#sampling-policy-inputs
sample { true }

13.

Policy as Codeについて コマンドを制限するポリシーアタッチ後 リソースの削除コマンドが できなくなる

14.

課題 ● Rego言語の知見がまだ日本語記事が少ない ● Contextsの考えがわからない ● モジュール管理で一つのリポジトリで複数のTerraformを実行する場合、同じリ ポジトリで連携し直す必要がある。

15.

まとめ

16.

まとめ 面白いプロダクトだけど日本語が少なく 使いこなせる自信がない (泣) LinkedInで開発者とつながっているので、 興味ありましたらおつなぎします。

17.

ありがとうございました より詳しい内容は以下のブログで↓ TerraformのCI/CD基盤を自動構築してく れるサービスSpaceliftを触ってみた (zenn.dev)