Terraform Cloud Agent コンテナをカスタマイズする

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 を起動

TFCB の環境で試してみましたので、こちらにある「Managing Agent Pools」を参考に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 コンテナに導入したパッケージを実行出来るはずです。

このブログの人気の投稿

Tanzu Mission Control(TMC) の NetworkPolicy を試してみる