Help us understand the problem. What is going on with this article?

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

More than 5 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を登録

参考文献

tomiyan
最近はAPI Gateway、Lambda、k8sを主にやっています
http://tomiyan.net/
kurashicom
「北欧、暮らしの道具店」を運営するクラシコムのエンジニアチーム。
https://hokuohkurashi.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away