AWS-SAM-CLIのDockerFile作ってみた(その1)
諸般の事情でLambdaの開発環境が必要になり。
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)ビルド
(2)ビルド後のログイン
4.DockerFileサンプル
gitにあげろよとか言われそうですが、、取りあえず載せておきます。
大体30分あれば環境が完成、ひとまずはここまでは完成しました。
後はLambdaのお勉強とDynamoDBをローカルでどう使うかとか色々と
もてあそんでいくつもりです。
次回はあるのかなぁ、、、?
色々と練習するならローカルでやりたいなぁと考えて
実力もないのに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
ログイン時に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をローカルでどう使うかとか色々と
もてあそんでいくつもりです。
次回はあるのかなぁ、、、?
コメント