Node.js
AWS
CircleCI
gulp
lambda

CircleCIからAWS Lambdaファンクションをデプロイしてみた

More than 3 years have passed since last update.


前提条件

AWS LambdaファンクションをGulpでデプロイでローカルでデプロイできている前提


IAMの設定


Lambda実行用のロール


  • ロール名(例)


    • sampleLambdaExecureRole



  • アタッチするポリシー


    • AWSLambdaExecute



作成したロールARNをメモっておく


  • ロールARN(例)


    • arn:aws:iam::000000000000:role/sampleLambdaExecureRole




デプロイ用のポリシー



  • ポリシー名(例)


    • sampleLambdaDeployPolicy




  • ポリシードキュメント(例)


    • iam:PassRoleのResourceはLambda実行用のロールのARNを指定する



{

"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Action": [
"lambda:CreateFunction",
"lambda:GetFunction",
"lambda:UpdateFunctionConfiguration",
"lambda:UpdateFunctionCode",
"lambda:UpdateEventSourceMapping",
"lambda:CreateEventSourceMapping",
"lambda:ListEventSourceMappings"
],
"Resource": [
"*"
]
},
{
"Sid": "",
"Effect": "Allow",
"Action": [
"iam:PassRole"
],
"Resource": [
"arn:aws:iam::000000000000:role/sampleLambdaExecureRole"
]
}
]
}


デプロイ用のユーザー


  • ユーザー名(例)


    • sampleLambdaDeployUser



  • ユーザーごとにアクセスキーを生成


    • チェックを入れる



  • 認証情報をダウンロードする

  • ポリシーのアタッチ(先ほどさくせいしたポリシー)


    • sampleLambdaDeployPolicy




ソースコード

AWS LambdaファンクションをGulpでデプロイを参考に下記の点を変更する

変更後のソースはこちら

https://github.com/tomiyan/lambda-gulp-sample

circle.ymlを追加


circle.yml

deployment:

production:
branch: master
commands:
- gulp deploy

lambda-config.jsのroleをenvから取得するように修正


lambda-config.js

module.exports = {

region: 'ap-northeast-1',
handler: 'index.handler',
role: process.env.ROLE,
functionName: 'api_v1_hoge',
timeout: 10,
memorySize: 128,
runtime: 'nodejs'
// eventSource: {
// EventSourceArn: <event source such as kinesis ARN>,
// BatchSize: 200,
// StartingPosition: "TRIM_HORIZON"
//}
}

githubにホスティングする


CircleCI

すでにSign Upしている前提


プロジェクトの追加


  • Add Projects


    • GitHubアカウントを選択

    • 今回作成したProjectを選択



  • Project Settings


    • Environment variables


      • Name


        • ROLE



      • Value(例)


        • arn:aws:iam::000000000000:role/sampleLambdaExecureRole





    • AWS keys


      • デプロイ用のユーザーで作成した認証情報Access Key ID/Secret Access Keyを登録






参考文献