Dockerコンテナで開発環境を構築しましたよ その2

2021/03/18

はじめに

前回に引き続き、VSCodeのRemote - Containersを使って開発環境を構築していきます。

Remote - Containersでは標準で、Go, Python, PHP, Ruby, Node, Java, Rust, C, swift など、多くの開発環境が用意されています。
提供されている環境のリストは以下リンクから確認することができます。 https://github.com/microsoft/vscode-dev-containers/tree/master/containers

今回はこのリストに載ってない AWS SAM(SAM、Serverless Application Model)の開発環境を構築してみます。

構築手順

  1. 適当なディレクトリ(今回はdev-sam)を作成しVSCodeで開きます。
    (このディレクトリの中に開発用コンテナ情報とソースコードが格納されます。)

  2. VSCodeからコマンドパレットを開き、Remote-Containers: Add Development Container Configuration Files と入力する。

  3. 開発環境として使用するベースのコンテナとして、Docker in Dockerを選択する。

  4. Dockerfileを編集する。
    .devcontainer/Dockerfileの末尾に以下を追記する。

RUN apt-get update &&\
    apt-get install -y gcc build-essential curl file git vim
USER vscode
WORKDIR /home/vscode
ENV LANG=en_US.UTF-8 \
    PATH=/home/vscode/.linuxbrew/bin:/home/vscode/.linuxbrew/sbin:$PATH \
    SHELL=/bin/bash
RUN git clone https://github.com/Homebrew/brew /home/vscode/.linuxbrew/Homebrew \
    && mkdir /home/vscode/.linuxbrew/bin \
    && ln -s ../Homebrew/bin/brew /home/vscode/.linuxbrew/bin/ \
    && brew config
RUN git config --global http.postBuffer 2M &&\
    brew tap aws/tap &&\
    brew install aws-sam-cli &&\
    brew install node
  1. 右下の通知アイコンから、Reopen in Containerを選択する。
    linux brew を使って色々インストールしているので初回は時間がかかります。 (数時間かかるので寝る前にでもやっておきましょう)

SAM プロジェクト作成

とりあえずnode.jsのサンプルプロジェクトを実行してみます。
オプションは初期設定でポチポチしていきます。

vscode ➜ /workspaces/sam-container $ sam init
Which template source would you like to use?
        1 - AWS Quick Start Templates
        2 - Custom Template Location
Choice: 1
What package type would you like to use?
        1 - Zip (artifact is a zip uploaded to S3)
        2 - Image (artifact is an image uploaded to an ECR image repository)
Package type: 1

Which runtime would you like to use?
        1 - nodejs14.x
        2 - python3.8
        3 - ruby2.7
        4 - go1.x
        5 - java11
        6 - dotnetcore3.1
        7 - nodejs12.x
        8 - nodejs10.x
        9 - python3.7
        10 - python3.6
        11 - python2.7
        12 - ruby2.5
        13 - java8.al2
        14 - java8
        15 - dotnetcore2.1
Runtime: 1

Project name [sam-app]: 

Cloning app templates from https://github.com/aws/aws-sam-cli-app-templates

AWS quick start application templates:
        1 - Hello World Example
        2 - Step Functions Sample App (Stock Trader)
        3 - Quick Start: From Scratch
        4 - Quick Start: Scheduled Events
        5 - Quick Start: S3
        6 - Quick Start: SNS
        7 - Quick Start: SQS
        8 - Quick Start: Web Backend
Template selection: 1

    -----------------------
    Generating application:
    -----------------------
    Name: sam-app
    Runtime: nodejs14.x
    Dependency Manager: npm
    Application Template: hello-world
    Output Directory: .
    
    Next steps can be found in the README file at ./sam-app/README.md

ビルドして、ローカル(DevContainer内)で実行します。

cd sam-app
sam build
sam local start-api

ローカル環境から、ブラウザやcurlで http://127.0.0.1:3000/hello にアクセスすると、{"message":"hello world"}が返ってきます。

まとめ

時間はかかりましたが、SAM環境を構築することができました。 他のコンテナをベースにすればもっとスマートに環境を構築できるかもしれません。
もっといい方法があれば教えてください(´・ω・`)

DockerAWS

『エンジニアリング組織論への招待 ~不確実性に向き合う思考と組織のリファクタリング』を読みましたよ。

Dockerコンテナで開発環境を構築しましたよ