LoginSignup
18

More than 5 years have passed since last update.

毎回5分かけてたAWS Lambdaへのデプロイを20秒にしよう

Last updated at Posted at 2016-03-14

AWS LambdaのデプロイをJenkinsで自動化しようぜ。という記事です。

はじめに

  • 今回も小ネタ。
  • はじめはHelloWorldで遊んでいても、複雑なものを作り始めると繰り返しFunctionの再登録をしたくなるわけですが、AWSのマネジメントコンソールからjarをアップロードしてFuctionの再登録する手間が面倒になってくるわけです。
  • また、気付いたら依存ライブラリが多くなってしまい5MBくらいのjarになったあたりからアップロードするまでの時間がかかりすぎて段々イライラしてきます。
  • ということでJenkinsを使ってLambdaFunctionを自動登録する方法をご紹介します。Jenkinsになれた人なら30分くらいあればできると思います。

処理の流れ

  1. BitBucketへのコミット
  2. BitBucketのweb hookでJenkinsのビルド起動
  3. ビルド(Jenkins)
  4. S3へのjarのアップロード(Jenkins)
  5. S3からLambdaFunctionの登録(Jenkins)

私の環境では上記のような感じで稼働していますが、webhookとかそんなに目新しい話でもないので4と5についてご紹介します。

前準備

  • S3へのファイルアップロードもS3からLambdaへのFunction登録もAWS上のJenkinsから行います。
  • S3とLambdaへのアクセスするときにアクセスキーとシークレットアクセスキーは使いません。
  • 代わりにInstanceProfileを利用しますので事前にJenkinsが稼働するEC2のインスタンスに対してS3とLambdaにアクセスできる権限をIAM Roleで付与しておいてください。

S3へのjarのアップロード

  • S3プラグインを使うことでビルド後にできたjarファイルをS3にアップロードしてくれます。
  • [Jenkinsの管理] - [システムの設定] - [Amazon S3 profile]に以下のように設定します。

システムの設定 [Jenkins] 2016-03-14 15-00-27.png

  • Jenkinsのビルド設定画面で[ビルド後の処理の追加] - [Publish artifacts to S3 bucket]をクリックして以下にならって設定します。

2.cmp-activity Config [Jenkins] 2016-03-14 15-21-11.png

  • これで設定は完了です。超簡単ですね。

S3からLambdaFunctionの登録

  • AWS Lambda Pluginを使用します。
  • S3に登録されたモジュールを取得してLambdaFunctionに登録してくれるプラグインです。
  • Jenkinsのビルド設置画面で[ビルド後の処理の追加] - [AWS Lambda Deployment]をクリックします。
  • 設定の内容はAWSのマネジメントコンソールでの設定と変わりませんが注意点はロール名でして、ARNで記載する必要があります。また、LambdaのVPN対応も行われていまして、[高度な設定]をクリックするとVPCとSecurityGroupを登録することができます。

2.cmp-activity Config [Jenkins] 2016-03-14 15-14-05.png

Lambda Functionが更新されているのか?

  • 実はマネジメントコンソールからだと更新されているかどうかがよくわかりません。
  • そういう場合はaws cliを使ってfunctionのLast Modifiedを見てあげるとか、Descriptionにビルド時間を入れてあげると良いと思います。
  • ちなみにLastModifiedは以下のようなコマンドでみることができます。
[ec2-user@ip-10-0-1-26 target]$ aws lambda get-function --function-name Ec2InstanceState --region ap-northeast-1 | jq
{
  "Code": {
    "RepositoryType": "S3",
    "Location": "https://xxxxxx"
  },
  "Configuration": {
    "FunctionName": "Ec2InstanceState",
    "MemorySize": 512,
    "CodeSize": 8802205,
    "FunctionArn": "arn:aws:lambda:ap-northeast-1:194851312534:function:Ec2InstanceState",
    "Handler": "jp.gr.java_conf.uzresk.cmp.activity.aws.ec2.Ec2InstanceActivity::xxxx",
    "Role": "arn:aws:iam::123456789012:role/LambdaFunction",
    "Timeout": 300,
    "LastModified": "2016-03-14T06:09:37.885+0000",
    "Runtime": "java8",
    "Description": "getting ec2 instance status"
  }
}

まとめ

  • 1 Function入れ替えるのに5分くらいかかっていたのが20秒で済むようになりました。
  • 私が使っているLambdaFunctionはせいぜい10個〜20個程度なのでいちいち設定すれば良いのですが、たくさんになった場合は再考が必要ですね。ということで小ネタでした。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18