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
    
    広告ここから
    広告ここまで
    Home
    Search
    Bookmark