このドキュメントレベル:初めて学ぶ人向け
Lambdaの良いデプロイフローはないかと思って調べた記録です。
Lambdaのデプロイにはいくつか種類があるようです。
Serveless
Apex
Lamvery
LambCI
CodeShip
前回は「Serveless」AWS Lambdaデプロイ方法を求めて:Serverlessフレームワーク - Qiitaについて調べましたが、
今回は「CodeShip」について、どんなものかを触りだけ調べています。
Codeship
stackshareのDevOpsでなかなか人気もののようです
無料枠で使いましょう。
■ 注意しないといけない点
Codeshipでは Lambda関数を事前に作っておかなくてはいけません!
あと、エイリアス「PROD」も作っておかないと、後半のデプロイで失敗してしまいます。
■ AWSコンソールで、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とも連携できますね!
テストのパイプラインも設定できます。
今回は、「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
今回はserverless.ymlは不要です・・・。前回の実験の名残です。
準備できました!
■ 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の環境変数に設定します
デプロイのためのCustomScriptを書きます
■ gitHubにpush
gitHubのpushをトリガーにして、テストが実行され、OKであればデプロイされて、結果が表示されます。
感想
お手軽感はありますね。ただ、事前にlambda関数を作成したりと一手間かかるので、全てyamlでというserverless方式とはちょっと違います。
コードを苦手な人向け?なのかな。