Docker コンテナで SAM CLI を使用する

ローカルに環境をインストールせずに SAM CLI でビルド・デプロイをおこなう。

コンテナイメージの作成

必要なランタイムおよび SAM CLI がインストールされたイメージを作成する Dockerfile を作成する。(以下は Python 3.7 の例)

FROM python:3.7-alpine
# Install awscli and aws-sam-cli
RUN apk update && \
    apk upgrade && \
    apk add bash && \
    apk add --no-cache --virtual build-deps build-base gcc && \
    pip install awscli && \
    pip install aws-sam-cli && \
    apk del build-deps
RUN mkdir /app
WORKDIR /app

イメージをビルドして適当なタグをつけておく。

docker build -t sam-python37 .

SAM CLI 実行

基本

コンテナ内から AWS リソースにアクセスするため、認証情報を含む ${HOME}/.aws をマッピングして実行する。

$ docker run \
    -v $(pwd):/app \
    -v ${HOME}/.aws:/root/.aws \
    sam-python37 sam ...

認証プロファイルを指定する場合

$ docker run \
    -v $(pwd):/app \
    -v ${HOME}/.aws:/root/.aws \
    -e AWS_PROFILE=${AWS_PROFILE} \
    sam-python37 sam ...

認証情報を直接指定する場合

直接指定する場合は ${HOME}/.aws のマッピングは不要。

$ docker run \
    -v $(pwd):/app \
    -e AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} \
    -e AWS_SERCET_ACCESS_KEY=${AWS_SERCET_ACCESS_KEY} \
    sam-python37 sam ...

alias 設定

お好みのコマンドを alias に設定しておくと楽です。

$ alias sam-python37='docker run ... sam-python37 sam'