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