Terraform Enterprise, Terraform Cloud Business で利用できるTerraform Cloud Agent をカスタマイズした際のメモです。
Terraform Cloud Agent(以下TFC Agent) は、有償版のTerraform のTerraform Enterprise(以下TFE)、Terraform Cloud Business(以下TFCB) で利用出来る機能です。
実行形態としては、x86_64 のLinux OS上で稼働させるか、Docker イメージを利用し、コンテナとして稼働させるかの2通りを選択する事が出来ます。TFC Agent のDocker イメージをカスタマイズして稼働させてみたので、その際の手順になります。
Dockerfile 作成とコンテナビルド
TFC Agent のコンテナにAnsible のパッケージを入れてみます。こちらのレポジトリにサンプルがあります。
TFC Agent のコンテナイメージをカスタマイズする際は、こちらの「Optional Configuration: Running an Agent using Docker」が参考になります。
コンテナビルドします。
$ docker build . -t tfc-agent-with-ansible
[+] Building 28.2s (9/9) FINISHED
=> [internal] load build definition from Dockerfile
=> => transferring dockerfile: 603B
=> [internal] load .dockerignore
=> => transferring context: 2B
=> [internal] load metadata for docker.io/hashicorp/tfc-agent:latest
=> [1/5] FROM docker.io/hashicorp/tfc-agent:latest@sha256:10452a023264f739ad2958c36f2951d77a953d4d4a983451a8a397e61048f89a
=> CACHED [2/5] RUN apt-get -y install sudo
=> CACHED [3/5] RUN echo 'tfc-agent ALL=NOPASSWD: /usr/bin/apt-get , /usr/bin/apt' >> /etc/sudoers.d/50-tfc-agent
=> CACHED [4/5] RUN sudo apt update
=> [5/5] RUN sudo apt-get --assume-yes install ansible
=> exporting to image
=> => exporting layers
=> => writing image sha256:51b28d2726f7978f285d7e76ab3058b32dd6609d119dc9199611c64722f73b31
=> => naming to docker.io/library/tfc-agent-with-ansible
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
無事コンテナビルドが完了しました。
TFC Agent コンテナのカスタマイズには関係ありませんが、Harbor のレポジトリに作成したコンテナをPush して脆弱性のスキャンをしてみます。
docker tag tfc-agent-with-ansible registry.<MYDOMAIN>/my-container-repo/tfc-agent-with-ansible
docker push registry.<MYDOMAIN>/my-container-repo/tfc-agent-with-ansible
インストールしたansible 周りで修正出来る脆弱性がいくつかある様です。
TFC Agent を起動
トークンが作成出来たら、TFC Agent コンテナを起動させます。
export TFC_AGENT_TOKEN=**********
export TFC_AGENT_NAME=tfc-agent-with-ansible
docker run --rm -e TFC_AGENT_TOKEN -e TFC_AGENT_NAME tfc-agent-with-ansible
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
83e5879e2262 tfc-agent-with-ansible "/home/tfc-agent/bin…" 21 seconds ago Up 20 seconds fervent_curie
無事に稼働しました。
コンテナの中身の確認
コンテナ内にアクセスし、パッケージがインストールされているか確認してみます。
docker exec -it 83e5879e2262 /bin/bash
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.3 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.3 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
$ ansible --version
ansible 2.9.6
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/tfc-agent/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
executable location = /usr/bin/ansible
python version = 3.8.10 (default, Sep 28 2021, 16:10:42) [GCC 9.3.0]
$ ansible
ansible ansible-config ansible-connection ansible-console ansible-doc ansible-galaxy ansible-inventory ansible-playbook ansible-pull ansible-vault
ちゃんとansible のパッケージがインストールされている様です。Terraform のconfiguration のlocal-exec
provisioner の内で、TFC Agent コンテナに導入したパッケージを実行出来るはずです。