SlideShare a Scribd company logo
6
Most read
8
Most read
10
Most read
Lambda LayerをCI/CDパイプラインに組み込む下準備をする
SAMでLambda Layerを
Deployする方法を調べる
自己紹介
• 上田 渉太
• アルパイン株式会社イノベーションラボ所属
• 企画、設計職
• 趣味
• ロードバイク
• ゲーム作り (主にコアワーキングスペース weeyble https://weeyble.com/ で活動しています)
• 3D CG (無印Zbrushで作品を作っています)
• Twitter( @tukkyCG1 )
• Qiita( https://qiita.com/tukkyr )
• Slideshare( https://www.slideshare.net/shotaueda3 )
SAM
AWS Serverless Application Model
serverless application開発をする為のFramework
CloudformationをServerlessに特化した簡易的な
記述方法を提供してくれたり APIGatewayとの連
携
LocalでのLambdaの開発環境を提供してくれたり
PyCharm使っているなら aws tool kitから使うのがオススメ
Lambda Layerとは
事前にLambda Layerとして登録することで複
数のLambdaが利用するような共有ライブラ
リとして利用できる
制限
1つのlambdaあたりLambda layer 5つまで
圧縮解凍後total 250MBまで
Layerのファイル構成
せっかくなのでpython 3.7(dataclass)を試す
python3.6からは呼べないことも確認する
単一ファイル構成、モジュールファイル構成
の両方を試す
フォルダ構成 python/
├── test.py
├── mylib
│ ├── layercheck2.py
│ └── __init__.py
└── layercheck1.py
言語依存
まずはCLIで試してみる
Lambda Layerのデプロイ
publish-layer-version ← 自動でdeploy バージョンがインクリメントされる
aws lambda publish-layer-version —layer-name <layer-name> —license-info "MIT" —zip-file fileb://<zip file name> --
compatible-runtimes <Python3.7 など> <…>
LambdaにLayerをアタッチする
update-function-configuration
aws lambda update-function-configuration
--function-name <lambda name> —layers <layer arn> <layer arn>
layer arn の構成: arn:aws:lambda:<region>:<account ID>:layer:<layer name>:<deploy version>
Lambdaをリリース(lambdaのバージョニング)
publish-version
実行結果を確認
pycharm + aws tool kit が便利
lacalでテストできるようにlayerのルートフォ
ルダはPYTHONPATHに追加する
Version管理
LambdaとLambda Layerのライフサイクが異なる
SAMを使って、デプロイを管理したい
LambdaとLambda LayerのStackは分けたい
Lambda以上にLambda LayerのDeployVersionとLibraryの管理
が難しそう
Libraryのバージョンを直接指定できないため、Deploy時の
バージョンになる
CI TOOLでtagを作成するようにした方がいいかも
Cloudformationを
SAMで実装する
templateが二つに分かれるのでlayerのARNのを参照する必
要がある
Stack間の連携が必要 CrossStack
Layer側 outputs Export
Lambda側 ImportValue で連携する
スタックのネストはTransformを使っていると使えない
実は罠が・・・
SAM Lambda LayerAWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
Resources:
SampleLayer:
Type: AWS::Serverless::LayerVersion
Properties:
CompatibleRuntimes:
- python3.7
Description: demo
LayerName: sample
LicenseInfo: mit
RetentionPolicy: Retain
Outputs:
LayerVersionArn:
Value: !Ref SampleLayer
Export :
Name : !Sub '${AWS::StackName}-Layer-latest'
他のスタックから参照されていると更新不可に
なる
Type: AWS::Lambda::LayerVersion
と異なる部分
過去のバージョンを残すかどうか指定できる
SAM Lambda
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
Resources:
Hello:
Type: AWS::Serverless::Function
Properties:
CodeUri: .
Handler: hello.lambda_handler
Runtime: python3.7
Layers:
- !ImportValue layer-test-sam-Layer-latest
実運用時はパラメータ化するべき?
CompatibleRuntimes
はチェックされない
Deploy Command
Layer側
Lambda側
aws cloudformation package —template-file layer.yaml
—output-template-file layer-output.yaml --s3-bucket <bucket-name>
aws cloudformation deploy —template-file layer-output.yaml 
—stack-name <layer-stack-name> —capabilities CAPABILITY_IAM
aws cloudformation deploy —template-file lambda-output.yaml 
—stack-name <lambda-stack-name> —capabilities CAPABILITY_IAM
aws cloudformation package —template-file lambda.yaml
—output-template-file lambda-output.yaml --s3-bucket <bucket-name>
Zip化しなくて良いので楽ですよ
結果
参照は1:N = Lambda:Layerになることが予想される
LambdaからはLayerのARNをバージョン付きで取得する必要がある
Layer側 outputs Export
Lambda側 ImportValue で連携する
Exportした値がlambdaのスタックで参照されていると更新できない。
組み込み関数ではVersionのみ抜き出すのが辛い
!Selectがスライスに対応していれば…
cliはLayerArnとLayerVersionArnが分かれてるのに…
Lambda Layerを開発する上で
知っておくべきこと
CompatibleRuntimes はlambdaのdeploy時にチェックされない
LayerのLayerArnはcilで取得できる
LayerのデプロイVersionとLayerの実装のバージョン紐付けは
CI toolでgit上にdeployのversion tagを作成する
Cloud formationのExport, Importとは相性が悪そう
複数から参照されると予想されるLayerに対してExportは合わない
参照されていると更新できないため
layerのバージョンが取れない 常に最新のみで運営するなら問題なさそう同一スタックに
した方が良さそう その際は直接参照 同じコードに対してバージョンが複数出来上がるの
は目を瞑る
layerのバージョン管理はしばらくはci の build ステージ行いたい
lambdaのdeploy時はlayer の gitリポジトリからtagをクローンして、cilでlamyerArnを取得
してciを回す?
今後の開発に向けて
codepipelineとcodebuildでci/cdの構築し実証実験
をしていきたい。

More Related Content

What's hot (20)

PDF
AWSからのメール送信
Amazon Web Services Japan
 
PDF
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
 
PDF
AWSの課金体系
Amazon Web Services Japan
 
PDF
AWS Black Belt Online Seminar 2016 AWS CloudFormation
Amazon Web Services Japan
 
PPTX
脱RESTful API設計の提案
樽八 仲川
 
PDF
20190911 AWS Black Belt Online Seminar AWS Batch
Amazon Web Services Japan
 
PDF
AWS Black Belt Online Seminar AWS Direct Connect
Amazon Web Services Japan
 
PDF
AWS Black Belt Online Seminar 2017 Amazon DynamoDB
Amazon Web Services Japan
 
PDF
わたくし、やっぱりCDKを使いたいですわ〜CDK import編〜.pdf
ssuser868e2d
 
PDF
AWSのログ管理ベストプラクティス
Akihiro Kuwano
 
PPTX
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
 
PDF
『SHOWROOM』の大規模化に伴う技術課題のソリューション ~演者・視聴者の熱量を支える負荷対策、HTML5対応など~
DeNA
 
PDF
The Twelve-Factor Appで考えるAWSのサービス開発
Amazon Web Services Japan
 
PDF
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
Trainocate Japan, Ltd.
 
PPTX
[社内勉強会]ELBとALBと数万スパイク負荷テスト
Takahiro Moteki
 
PDF
【Zabbix2.0】snmpttによるトラップメッセージの編集 #Zabbix #自宅ラック勉強会
真乙 九龍
 
PDF
プロトコルから見るID連携
Naohiro Fujie
 
PDF
Amazon Athena 初心者向けハンズオン
Amazon Web Services Japan
 
PDF
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
Amazon Web Services Japan
 
PDF
AWSではじめるDNSSEC
Tomohiro Nakashima
 
AWSからのメール送信
Amazon Web Services Japan
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
 
AWSの課金体系
Amazon Web Services Japan
 
AWS Black Belt Online Seminar 2016 AWS CloudFormation
Amazon Web Services Japan
 
脱RESTful API設計の提案
樽八 仲川
 
20190911 AWS Black Belt Online Seminar AWS Batch
Amazon Web Services Japan
 
AWS Black Belt Online Seminar AWS Direct Connect
Amazon Web Services Japan
 
AWS Black Belt Online Seminar 2017 Amazon DynamoDB
Amazon Web Services Japan
 
わたくし、やっぱりCDKを使いたいですわ〜CDK import編〜.pdf
ssuser868e2d
 
AWSのログ管理ベストプラクティス
Akihiro Kuwano
 
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
 
『SHOWROOM』の大規模化に伴う技術課題のソリューション ~演者・視聴者の熱量を支える負荷対策、HTML5対応など~
DeNA
 
The Twelve-Factor Appで考えるAWSのサービス開発
Amazon Web Services Japan
 
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
Trainocate Japan, Ltd.
 
[社内勉強会]ELBとALBと数万スパイク負荷テスト
Takahiro Moteki
 
【Zabbix2.0】snmpttによるトラップメッセージの編集 #Zabbix #自宅ラック勉強会
真乙 九龍
 
プロトコルから見るID連携
Naohiro Fujie
 
Amazon Athena 初心者向けハンズオン
Amazon Web Services Japan
 
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
Amazon Web Services Japan
 
AWSではじめるDNSSEC
Tomohiro Nakashima
 

Recently uploaded (8)

PDF
20250711_日本IBM ミドルウエア・ユーザー研究会(JIMUC)総会_中村会長資料.pdf
ChikakoInami1
 
PDF
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
PDF
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
PDF
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
PDF
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
NTT DATA Technology & Innovation
 
PDF
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 
PDF
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
PDF
プライバシ保護のためのインターネットアーキテクチャの進化 (2025-07-11)
Jun Kurihara
 
20250711_日本IBM ミドルウエア・ユーザー研究会(JIMUC)総会_中村会長資料.pdf
ChikakoInami1
 
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
NTT DATA Technology & Innovation
 
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
プライバシ保護のためのインターネットアーキテクチャの進化 (2025-07-11)
Jun Kurihara
 
Ad

Lambda layerをDeployする方法を調べる