AWS Lambdaデプロイ方法を求めて: Codeship

  • 3
    いいね
  • 0
    コメント

このドキュメントレベル:初めて学ぶ人向け

Lambdaの良いデプロイフローはないかと思って調べた記録です。
Lambdaのデプロイにはいくつか種類があるようです。

Serveless
Apex
Lamvery
LambCI
CodeShip

前回は「Serveless」AWS Lambdaデプロイ方法を求めて:Serverlessフレームワーク - Qiitaについて調べましたが、
今回は「CodeShip」について、どんなものかを触りだけ調べています。

Codeship

stackshareのDevOpsでなかなか人気もののようです

Codeship

無料枠で使いましょう。

スクリーンショット 2017-05-11 7.16.13.png

■ 注意しないといけない点

Codeshipでは Lambda関数を事前に作っておかなくてはいけません!
あと、エイリアス「PROD」も作っておかないと、後半のデプロイで失敗してしまいます。

■ AWSコンソールで、lambda関数を作成

ここで、コミットするハンドラー名称と関数名と合わせておくようにしましょう

lambda関数

  • sample-lambda関数
  • handler.jsのhelloを呼び出します、なのでハンドラ名は「handler.hello」にします
  • エイリアス「PROD」を作成
  • テスト実行

use strict';

module.exports.hello = (event, context, callback) => {
  const response = {
    statusCode: 200,
    body: JSON.stringify({
      message: 'Good Good Morning CodeShip!!Your function executed successfully!',
      input: event,
    }),
  };

  callback(null, response);

};

■ Codeshipにサインアップでプロジェクトを作成します

プロジェクトタイプはBasicを選択

プロジェクトタイプの洗濯

今回はGitHubと連携してデプロイします
GitLabとも連携できますね!

GitHub連携

テストのパイプラインも設定できます。
今回は、「npm test」だけ実行します

なので、「package.json」側にとりあえず通るダミーを設定しています。

テストパイプライン

package.json


{
  "name": "sample-lambda",
  "version": "1.0.0",
  "description": "",
  "main": "handler.js",
  "scripts": {
    "test": "echo \"OK\" && exit 0" ★無理やりテスト通していますw
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/bohebohe/sample-lambda.git"
  },
  "author": "",
  "license": "ISC",
  "bugs": {
    "url": "https://github.com/bohebohe/sample-lambda/issues"
  },
  "homepage": "https://github.com/bohebohe/sample-lambda#readme"
}

gitHubのsample-lambdaリポジトリのマスターと連携します

gitHubのマスターと連携します

連携するgitHub
今回はserverless.ymlは不要です・・・。前回の実験の名残です。

連携するgitHub

準備できました!

sample-lambda

■ Codeshipでのデプロイ設定

デプロイできるIAMユーザーを作成します。
そのユーザーに対して、以下のポリシーをアタッチしてください。
ARNの部分を書き換えてください

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "lambda:UpdateFunctionCode",
                "lambda:UpdateFunctionConfiguration",
                "lambda:InvokeFunction",
                "lambda:GetFunction",
                "lambda:PublishVersion",
                "lambda:UpdateAlias"
            ],
            "Resource": [
                "arn:aws:lambda:YOUR_AWS_REGION:YOUR_AWS_ACCOUNT_ID:function:YOUR_FUNCTION_NAME"
            ]
        }
    ]
}

作成したユーザーのAWSのアクセスキーをCodeShipの環境変数に設定します

CodeShipの環境変数

デプロイのためのCustomScriptを書きます

CustomScript

CustomScript

■ gitHubにpush

gitHubのpushをトリガーにして、テストが実行され、OKであればデプロイされて、結果が表示されます。

ダッシュボード

感想

お手軽感はありますね。ただ、事前にlambda関数を作成したりと一手間かかるので、全てyamlでというserverless方式とはちょっと違います。
コードを苦手な人向け?なのかな。

参考サイト