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 |
- 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に接続して確認する
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
aws s3 rb s3://nodejs-handson --force
インストール
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
cd /vagrant
npm install eslint --save-dev
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
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
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"
},