2021年7月4日日曜日

docker の rainで cloudformation してみる

 

rain の dockerイメージを作ります。

Dokerfileは以下のとおり。

User, Group は、rain を使用するユーザに合わせています。

FROM amazon/aws-cli:latest

ARG RAIN_VER=1.2.0
ARG UID=1000
ARG GID=1000
ARG GNM=ubuntu
ARG UNM=ubuntu

ADD https://github.com/aws-cloudformation/rain/releases/download/v${RAIN_VER}/rain-v${RAIN_VER}_linux-amd64.zip /tmp/rain.zip

# Install Rain
RUN yum install unzip -y \
 && unzip -j /tmp/rain.zip */rain -d /usr/local/bin/ \
 && chmod 755 /usr/local/bin/rain \
 && rm /tmp/rain.zip

# user
RUN echo "${GNM}:x:${GID}:${UID}" >> /etc/group
RUN echo "${UNM}:x:${UID}:${GID}::/home/ubuntu:/sbin/nologin" >> /etc/passwd

ENTRYPOINT ["/usr/local/bin/rain"]


ビルドします。

$ docker build . -t aws-rain


ビルドしたDockerイメージを確認します。

$ id
uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),117(netdev),1001(docker)
$ docker run --rm --entrypoint bash aws-rain -c "id ubuntu"
uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu)
$ docker run --rm aws-rain --version
Rain v1.2.0 linux/amd64


Dockerイメージを実行するスクリプトを用意します。

今回は、/usr/local/bin/rain にします。

内容は以下のとおり。

$ cat /usr/local/bin/rain
#!/bin/bash
docker run -it --rm -v $HOME:$HOME -u ubuntu -w $PWD aws-rain $*

実行権限をつけます。

$ chmod +x /usr/local/bin/rain


rainの動作確認をします。

$ rain ls --profile sandbox
CloudFormation stacks in us-east-1:
  Blue21VpcPoC: CREATE_COMPLETE


docker イメージにはホームディレクトリをマウントしているので、CFNテンプレートをホームディレクトリに置いて、rainを使うようにします。

また、上記の例だと、PC側のubuntuユーザにaws-cli の設定(~/.aws)が必要です。