k2works / aws_sam_nodejs_handson

AWS サーバーレスアプリケーションモデル (AWS SAM) ハンズオン(Node.js)

Home Page:https://k2works.github.io/aws_sam_nodejs_handson/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Aws Sam Node.js Handson

AWS サーバーレスアプリケーションモデル (AWS SAM) ハンズオン(Node.js)

前提

ソフトウェア バージョン 備考
node 8.10.0
npm 5.6.0
sam 0.2.11
docker 17.06.2
docker-compose 1.21.0
vagrant 2.0.3

構成

  1. 構築
  2. 配置
  3. 運用
  4. 開発

構築

開発用仮想マシンの起動・プロビジョニング

  • Dockerのインストール
  • docker-composeのインストール
  • pipのインストール
vagrant up
vagrant ssh

開発パッケージのインストール

  • aws-sam-cliのインストール
  • nvmのインストール
  • Node.jsのインストール
pip install --user aws-sam-cli
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.3/install.sh | bash
source ~/.bashrc 
nvm install v8.10
nvm alias default v8.10

アプリケーションの作成

cd /vagrant
sam init --runtime nodejs
cd sam-app

ローカルでテストする

cd hello_world
npm install
npm test
sam local generate-event api > event_file.json
cd ..
sam local invoke HelloWorldFunction --event hello_world/event_file.json
sam local start-api --host 0.0.0.0

http://192.168.33.10:3000/helloに接続して確認する

ドキュメント環境セットアップ

cd /vagrant
sudo amazon-linux-extras install ruby2.4
gem install bundler
bundle init

Gemfileに以下の内容を追加してパッケージのセットアップを行う

cat <<EOF >> Gemfile
# documents
group :doc do
  gem 'asciidoctor'
  gem 'asciidoctor-diagram'
  gem 'yard'
end
EOF
bundle install --path vendor/bundle

ドキュメントサーバーの起動

 ./docs/server.sh 

http://192.168.33.10:8000に接続して確認する

配置

AWS認証設定

cd /vagrant/sam-app
cat <<EOF > .env
#!/usr/bin/env bash
export AWS_ACCESS_KEY_ID=xxxxxxxxxxxx
export AWS_SECRET_ACCESS_KEY=xxxxxxxxxx
export AWS_DEFAULT_REGION=us-east-1
EOF

アクセスキーを設定したら以下の操作をする

source .env
aws ec2 describe-regions

デプロイ

デプロイ用のS3バケットを用意する

aws s3 mb s3://nodejs-handson

デプロイを実行する

cd /vagrant/sam-app
sam validate
sam package --template-file template.yaml --s3-bucket nodejs-handson --output-template-file packaged.yaml
sam deploy --template-file packaged.yaml --stack-name nodejs-handson --capabilities CAPABILITY_IAM

デプロイが成功したら動作を確認する

aws cloudformation describe-stacks --stack-name nodejs-handson --query 'Stacks[].Outputs[1]'

運用

スタックの削除

aws cloudformation delete-stack --stack-name nodejs-handson

S3バケットの削除

aws s3 rb s3://nodejs-handson --force

git-secretsの設定

インストール

cd /home/vagrant
git clone https://github.com/awslabs/git-secrets.git
cd git-secrets/
make install

既存プロジェクトにフックを設定

cd /vagrant
git secrets --install

拒否条件を設定

git secrets --register-aws --global

レポジトリをスキャンする

cd /vagrant
git secrets --scan -r 

許可ルールを追加する

git config --add secrets.allowed sam-app/hello_world/event_file.json

開発

eslintのセットアップ

cd /vagrant
npm install eslint --save-dev

eslint-config-airbnbのセットアップ

cd /vagrant/sam-app/hello_world/
npx install-peerdeps --dev eslint-config-airbnb
./node_modules/.bin/eslint --init
cat <<EOF > .eslintrc
{
  "extends": "airbnb",
  "plugins": [],
  "parserOptions": {},
  "env": {"mocha": true},
  "globals": {},
  "rules": {}
}
EOF

package.jsonにnpm-scriptを追加する

"scripts": {
    "test": "mocha tests/unit/",
    "lint": "eslint ./"
  },

lintコマンドを実行する

npm run lint

huskyのセットアップ

npm install husky@next --save-dev

package.jsonにnpm-scriptを追加する

"scripts": {
    "test": "mocha tests/unit/",
    "lint": "eslint ./",
    "pre-commit": "npm run lint",
    "pre-push": "npm test"
  },

コマンドを確認する

npm run pre-commit
npm run pre-push

Istanbulのセットアップ

npm install --save-dev nyc

package.jsonにnpm-scriptを追加する

"scripts": {
    "test": "mocha tests/unit/",
    "lint": "eslint ./",
    "coverage": "nyc --reporter=html --reporter=text mocha tests/unit/",
    "pre-commit": "npm run lint",
    "pre-push": "npm test"
  },

参照

About

AWS サーバーレスアプリケーションモデル (AWS SAM) ハンズオン(Node.js)

https://k2works.github.io/aws_sam_nodejs_handson/


Languages

Language:JavaScript 57.2%Language:Shell 37.2%Language:Ruby 5.5%