
terraform cloud + gitlabの設定を1からやる
gitlabを使う場合まずprojectを作る
なんか適当でもいいから作っといて。ただし空だとエラーになるので。ここではterraformディレクトリに格納した
terraform/providers.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "ap-northeast-1"
}
awsを使うという事を示している。基本的にregionはap-northeast-1を指定している。
terraform cloudでアカウントを作る
無い場合は作っておく
organizationを作る
terraform cloudはまず最上位の階層としてorganizationを準備することになっている。これはurlの一部にも含まれるので適当な名前は付けられないし、terraform cloud内で一意である必要もある(まあurlに含まれますから当然ね)


あとメールも入れとく。
workspaceを作る
organizationの下にぶらさがるモノである。organizationの中にworkspaceがいくつか作れる仕様になっている。これは一意である必要は無いがorganization内では当然ユニークさは求められる。

ここでは「Create a workspace」を行う
トリガーの設定

このように3通りのトリガー方法があり、通常一番左のVersion Control Workflowを使う。ってかそれ以外使った事なし。

このように4つのサービスに対応している。ここではgitlabを使うとする。

ここでNameとRedirect URIが提示される。これはコピペアイコンがあるのでわかるがgitlab側にセットする必要がある。
register a new OAuth Application.
というわけで上記のリンクを押してgitlabに飛ぶ

gitlab側の(どっちかわからんくなるといかんから強調)Add new applicationからNameとRedirect URIを前の画像の例のコピれそうなところからコピって貼り付けとく。

Scopesに関してはは指定の通り「api」のみを選択する。ここで

Application IDとsecretが出てくるのでこれをコピって

こんな感じでConnectする。最終確認でAuthorizeしていいかってところでAuthorizeボタンを押せば接続できるはず。
続くssh関連はsubmoduleとかうんぬんでのadvancedな奴なのでskipしておいてよい。
そしたら

冒頭で作っておいたと思われるrepositoriesをチョイスする。無い場合は作っといて。その場合冒頭でも書いたけど中に何も入ってないとエラーになるので注意してください。その場合前に戻ってとりあえずaws providerでも放りこんでおいて

このように適当なワークスペースが出来た。しかしNo variablesといわれているように変数が何もない。これは変数がないとawsに接続できないということでもある
aws 接続
IAMの作成
terraformは特に強いアクセス権限を必要とするのでAdministratorAccessにしておけばまあ間違いないっちゃ間違いないがterraformの構築に一通り満足したら即座にキーを無効にしておくとかしておくこと。

環境変数のセット
ここでのkeyとsecretをセットしていく

このVariablesのセクションにて
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
を設定するんだけどこれはEnvironment variableにセットするのであってTerraform variablesではない。間違えないように。

AWS_SECRET_ACCESS_KEYの方は確実にsensitiveにしておくこと。
最初のplan
ワーキングディレクトリ的なやつの設定(必要であれば)
の前にgitでterraform/ディレクトリとかを切った場合は設定で教える必要がある
これはVersion Controlの設定から行う

planの実行
ではplanしていこう

このStart new planとかそういうところから行っていくと。

プランが終了すればokだ。まあawsの設定しか書いてないので何事もなければ必ず成功するはずである。次回からはちゃんとterraformを用いてawsインフラを作っていくぞい