Alpine Linux に amazon-ssm-agent をインストールする

amazon-ssm-agent は Alpine Linux をサポートする予定はないとのこと。

github.com

こちらの issue には

gist.github.com

このように Alpine Linuxamazon-ssm-agent をインストールする方法が紹介されていたが、この方法だと Systems Manager のManaged instances 一覧で Agent version が 2.3.0.0 となってしまう。

これの何が問題かというと 2.3.0.0 の場合、Session Manager に対応していないので、Alpine Linuxインスタンスに Session Manager 経由で接続することができないです。

色々試した結果、下記の方法で対応できたので記載する。

 FROM golang:1.12-alpine as builder
-ARG VERSION=2.3.930.0
+ARG VERSION=2.3.1205.0
 RUN set -ex && apk add --no-cache make git gcc libc-dev curl bash && \
     curl -sLO https://github.com/aws/amazon-ssm-agent/archive/${VERSION}.tar.gz && \
     mkdir -p /go/src/github.com && \
     tar xzf ${VERSION}.tar.gz && \
     mv amazon-ssm-agent-${VERSION} /go/src/github.com/amazon-ssm-agent && \
     cd /go/src/github.com/amazon-ssm-agent && \
+    echo ${VERSION} > /go/src/github.com/amazon-ssm-agent/VERSION && \
     gofmt -w agent && make checkstyle || ./Tools/bin/goimports -w agent && \
     make build-linux

 FROM alpine
 RUN set -ex && apk add --no-cache sudo ca-certificates && \
     adduser -D ssm-user && echo "ssm-user ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ssm-agent-users && \
     mkdir -p /etc/amazon/ssm
 COPY --from=builder /go/src/github.com/amazon-ssm-agent/bin/linux_amd64/ /usr/bin
 COPY --from=builder /go/src/github.com/amazon-ssm-agent/bin/amazon-ssm-agent.json.template /etc/amazon/ssm/amazon-ssm-agent.json
 COPY --from=builder /go/src/github.com/amazon-ssm-agent/bin/seelog_unix.xml /etc/amazon/ssm/seelog.xml
 CMD ["/usr/bin/amazon-ssm-agent"]

以上、Docker のベストプラクティスには反するけど、ECS on Fargate で管理しているコンテナにはもう全部 amazon-ssm-agent を入れちゃって良いんじゃないかと思う今日この頃でした。