前提条件
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
- Name
- AWS keys
- デプロイ用のユーザーで作成した認証情報Access Key ID/Secret Access Keyを登録
- Environment variables