CircleCI 2.0でServerless Frameworkのプロジェクトをデプロイする
ちょっとハマったので覚書 注意点1:npm i -gはこける ローカルインストールするとLambdaのソースとしてアップロードされてしまうので、Serverless Frameworkはグローバルインストールさせたいとこ […]
広告ここから
広告ここまで
目次
ちょっとハマったので覚書
注意点1:npm i -g
はこける
ローカルインストールするとLambdaのソースとしてアップロードされてしまうので、Serverless Frameworkはグローバルインストールさせたいところです。
なので.circle/config.yml
に以下の様にコマンドを書いてグローバルインストールさせたいところ。
version: 2
jobs:
build:
docker:
- image: circleci/node:7.10
working_directory: ~/repo
steps:
- checkout
- run:
name: install-serverless
command: npm install -g serverless
ですがこのままだと以下のようなエラーでFailします。
npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR! { Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR! errno: -13,
npm ERR! code: 'EACCES',
npm ERR! syscall: 'access',
npm ERR! path: '/usr/local/lib/node_modules' }
npm ERR!
ここはnpm install -g serverless
ではなく、sudo npm install -g serverless
とすると解決します。
注意点2:AWS Permissions
は2.0で動かない(2017/10/22時点)
フォーラムを見ていて気づいたのですが、現時点ではCircle CI2.0はAWS Permissionが未対応の様子です。
AWS keys not recognized – 2.0 Feature Requests – CircleCI Community Discussion
ちなみにそのまま実行すると、こうなります。
Serverless Error ---------------------------------------
Could not locate deployment bucket. Error: Profile default does not exist
Get Support --------------------------------------------
Docs: docs.serverless.com
Bugs: github.com/serverless/serverless/issues
Forums: forum.serverless.com
Chat: gitter.im/serverless/serverless
Your Environment Information -----------------------------
OS: linux
Node Version: 7.10.1
Serverless Version: 1.23.0
ですので、CircleCI 2.0でAWS-CLIの認証情報を必要とする場合はEnvironment Variables
を使うようにします。
また、以下の様にServerless Frameworkのコマンドでcredentialsの設定をしておきましょう。
- run:
name: init-serverless-config
command: sls config credentials -k ${AWS_ACCESS_KEY} -s ${AWS_SECRET_KEY} -p aws
ここまでやると、CircleCI 2.0のプロジェクトでServerless Frameworkのデプロイが実行できるようになりました。
.circleci/config.yml
サンプル
今の所、以下の様な書き方でデプロイさせてます。
version: 2
jobs:
build:
docker:
- image: circleci/node:7.10
working_directory: ~/repo
steps:
- checkout
# Download and cache dependencies
- restore_cache:
keys:
- v1-dependencies-{{ checksum "package.json" }}
# fallback to using the latest cache if no exact match is found
- v1-dependencies-
# install Serverless Framework
- run:
name: install-serverless
command: sudo npm install -g [email protected]
- run: npm install
- save_cache:
paths:
- node_modules
key: v1-dependencies-{{ checksum "package.json" }}
# run tests!
- run:
name: Run unit test
command: npm run test
- run:
name: Check coding standard by ESLint
command: npm run lint
- deploy:
name: Deploy by Serverless Framework
command: |
if [ "${CIRCLE_BRANCH}" == "master" ]; then
sls config credentials -k ${AWS_ACCESS_KEY} -s ${AWS_SECRET_KEY} -p aws
sls deploy
else
echo "Not master branch so not deploying"
fi