AWS-SAM-CLIのDockerFile作ってみた(その1)

諸般の事情でLambdaの開発環境が必要になり。
色々と練習するならローカルでやりたいなぁと考えて
実力もないのにAWSのサーバレスのローカル開発環境を作ろうと
したわけです。

環境はWindows10ですが、家族の共用PCなので開発環境をぶち込むと
マニアックなことになりそうなのでなるべく環境をきれいにと考えて
Dockerです。DockerにAWSのローカル開発環境を作ることにしました。


1.基本の流れ
 さくらのナレッジ参考
 (1)pullしてイメージをダウンロードしてくる。
 (2)イメージに必要になる環境を構築していく
 (3)作成したイメージのコマンドをdockerfileに記述しテストする
 (4)DockerFileをベースにインフラを自動構築させる。

 こんなイメージみたいです。
 どうせだったら、自動で環境構築までできるとかっこいいじゃん。と
 今更時代遅れですがDockerです。

2.Dockerインストール
 (1)DockerHubに登録する
 (2)インストール
  インストーラをダウンロード、Hyper-Vが必要
  Windows10Proなら何もしなくても簡単にインストールできる
  幸いProなのでそのまま


3.開発環境の雛形作成
 で、ひとまずサーバレス開発環境用の仮想コンテナを準備する。
 DockerFile作るので、試行錯誤する。
  powershell使えと言われそうですが、、、
  コマンドプロンプトでやってます。しょせん素人なので
  (1)イメージダウンロード
> docker pull ubuntu

  (2)起動
>docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              113a43faa138        3 weeks ago         81.2MB
>docker run --name dev_ubuntu -it ubuntu /bin/bash
928b93cd4122b700ecf1e8858b9553c69bd70705893392d4aca7b6a9eb7499ca
root@16dc01776f66:/#

  (3)再接続方法
>docker exec -u devuser -it dev_ubuntu /bin/bash

  (4)開発環境をDocker上に構築
  下記を参考に
     https://tetechi.com/python3-6/
     
     SAMローカル用にDocker上のUbuntuにDockerインストール
     
     しようとしたらSAMローカルでインストールトラブル
     下記のエラーでインストール不可

/usr/local/lib/node_modules/aws-sam-local/node_modules/mkdirp/index.js:90
                    throw err0;
                    ^
Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/aws-sam-local/bin'
    at Object.mkdirSync (fs.js:738:3)
    at Function.sync (/usr/local/lib/node_modules/aws-sam-local/node_modules/mkdirp/index.js:71:13)
    at Object.install (/usr/local/lib/node_modules/aws-sam-local/node_modules/go-npm/bin/index.js:161:12)
    at Object. (/usr/local/lib/node_modules/aws-sam-local/node_modules/go-npm/bin/index.js:212:17)
    at Module._compile (internal/modules/cjs/loader.js:689:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
    at Module.load (internal/modules/cjs/loader.js:599:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
    at Function.Module._load (internal/modules/cjs/loader.js:530:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! aws-sam-local@0.2.11 postinstall: `go-npm install`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the aws-sam-local@0.2.11 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2018-07-07T10_26_11_990Z-debug.log
The command '/bin/sh -c sudo npm install -g aws-sam-local' returned a non-zero code: 1

  というわけで最近登場のpipでインストールできるaws-sam-cliに
  切替します。


で環境構築のおおまかな流れは以下な感じ
    ①日本語環境構築
    ②開発環境とユーザ追加
    ③Node.jsインストール
    ④python3とAWS-CLIインストール
    ⑤Dockerインストール
    ⑥AWSローカルSAM開発環境インストール


3.自動構築方法
 gitにdockerfileを入れておいてDockerHubから自動構築できる模様
 今回はgitのリポジトリ用意していないし、そこまでこらないので
 localでイメージを作成するというシナリオで。以下を参照
http://docs.docker.jp/v1.9/docker-hub/github.html
  https://qiita.com/ysomei/items/2bd703ed47d89537d609
    http://www.atmarkit.co.jp/ait/articles/1407/08/news031.html
  http://satoyashiki.hatenablog.com/entry/2017/04/01/175604
    https://qiita.com/kooohei/items/f0352f408056861a8f74

  で、なぜかエラーを吐いて実行できないんで調べると
 ショートカットやマウントしているボリュームだとうまく動かないとのこと
 C直下にDockerフォルダを作成してそこにDockerFileを保管する。
   http://choni-waniwani.blogspot.com/2016/10/docker-builddockerfile_6.html

  あとはsamコマンドが動かんトラブルがあったけど環境変数の話なので
  ログイン時にbashでログインすれば動くのでOK
  https://teratail.com/questions/96425

  (1)ビルド
    > cd C:\Docker
    > docker build -t ujimasa/aws_ubuntu:1.0 ./

  (2)ビルド後のログイン
    >docker images
    REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
    ujimasa/aws_ubuntu   1.0                 380d3f8d2a89        12 seconds ago      673MB
    ubuntu               latest              113a43faa138        4 weeks ago         81.2MB
    >docker run -it --name aws_ubuntu 380d3f8d2a89 /bin/bash


4.DockerFileサンプル
 gitにあげろよとか言われそうですが、、取りあえず載せておきます。
 
 FROM ubuntu
 MAINTAINER devuser

 #Japanese
 RUN apt-get -y update
 RUN apt-get -y install language-pack-ja-base language-pack-ja
 RUN locale-gen ja_JP.UTF-8
 RUN echo export LANG=ja_JP.UTF-8 >> ~/.profile

 #Dev Package Get
 RUN apt-get -y install sudo git vim man curl wget

 #Devuser Add
 RUN groupadd -g 1000 developer && useradd -g developer -G sudo -m -s /bin/bash devuser && echo 'devuser:password' | chpasswd
 RUN echo 'Defaults visiblepw'             >> /etc/sudoers
 RUN echo 'devuser ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
 RUN echo export LANG=ja_JP.UTF-8 >> /home/devuser/.profile

 #Node Install
 RUN su - devuser
 RUN cd /home/devuser
 RUN sudo apt-get install -y nodejs npm
 RUN sudo npm cache clean
 RUN sudo npm install n -g
 RUN sudo n stable
 RUN ln -sf /usr/local/bin/node /usr/bin/node

 #AWS-CLI Install
 RUN sudo apt-get update
 RUN sudo apt-get -y install python3.6 python3.6-dev python-pip python3-pip
 RUN mkdir -p $HOME/bin
 RUN ln -s /usr/bin/python3.6 $HOME/bin/python
 RUN pip install awscli

 #Install Docker
 RUN sudo apt-get update
 RUN sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
 RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
 RUN sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable test edge"
 RUN sudo apt-get update
 RUN sudo apt-get -y install docker-ce

 #AWS SAM LOCAL
 RUN pip install aws-sam-cli

大体30分あれば環境が完成、ひとまずはここまでは完成しました。
後はLambdaのお勉強とDynamoDBをローカルでどう使うかとか色々と
もてあそんでいくつもりです。
次回はあるのかなぁ、、、?

コメント

このブログの人気の投稿

GASでGoogleDriveのサブフォルダとファイル一覧を出力する

証券外務員1種勉強(計算式暗記用メモ)

マクロ経済学(IS-LM分析)