---
# System prepended metadata

title: 部署 Lambda 從 25 分鐘到 2 分鐘，你敢信？！
tags: [talk]

---

---
tags: talk
title: 部署 Lambda 從 25 分鐘到 2 分鐘，你敢信？！
---

<style>
.reveal {
    font-size: 28px;
    font-weight: 300;
    color: #ccc;
}

.reveal .slides {
    text-align: left;
}

.reveal section img {
    border: none;
}

.reveal .slides section,
.reveal .slides section > section {
    line-height: 1.6;
}

.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {
    text-transform: none !important;
    color: white;
}

.reveal h1, .reveal h2, .reveal h3 {
    padding-bottom: 3rem;
}

.reveal blockquote {
    width: 90%;
}

.reveal table {
    border: 1px solid;
}

.content-between {
    display: flex;
    align-items: center;
    justify-content: space-around;
}

.blockman {
 display: block;
 margin-left: 140px;
}

</style>



# 部署 Lambda 從 25 分鐘到 2 分鐘，你敢信？！

Jeffery @ Evolutive Labs

---

### 大綱

- 如何認識到 Layer
- Layer 解決了什麼問題
- 如何使用 Layer
- Layer 使用限制

---

### 初次見面 - 準備 Lambda 分享會

---

- 在 Lambda 文件看到 Layer 介紹

![](https://i.imgur.com/fN4B8Hp.png)

---

- 看完文件後，還是不太了解怎麼使用 Layer

![](https://i.imgur.com/095y2jH.png =600x350)

---

### 遇到個人化預覽圖的問題

---

**印刷人員及出貨人員作業上的困擾**

- 有時候會空白沒設計
- 有時候會完全沒有圖片

---

### 開會討論

- 前端程式加了判斷還是無法避免
- 使用者的網路環境不一樣
- 了解預覽圖生成方式
- 嘗試做到後端看看

---

### 遇到後端開發的問題

---

<div class="content-between">
    <ul>
        <li>用 node-canvas 套件沒作用</li>
        <li>用 sharp 套件不會套字型</li>
        <li>用 PhantomJS 套件只支援一張圖片</li>
    </ul>
    <img src="https://i.imgur.com/HMpELcC.png">
</div>

---

用 Puppeteer 套件去測試全部個人化服務終於成功了～

---

### 遇到 Lambda 部署的問題

---

- 打包程式及相依套件超過 250 MB限制
    - 發現 puppeteer 套件就佔 200 MB
- 部署時間變超久
    - 主要花比較多時間在打包相依套件

---

### 解決打包超過 250MB 限制

- 只安裝 puppeteer-core 套件
- 安裝輕量的 chrome 並可在 Lambda 上執行
- 套換原本套件呼叫 puppeteer 的方法

---

到這邊可以部署上去了，但部署時間要花將近半小時左右...

---

### 解決部署時間過久

- 了解哪些是沒有在用的 package
- 了解 Webpack 有沒有最佳化的參數

---

做完之後還是沒有很大的改善，於是想到還有 Layer 

---

### Layer 解決了什麼

---

### 將依存套件與函數程式碼分開部署

- 加快打包速度
- 降低部署的失敗率

---

### 開發程式更敏捷

- 程式碼小於 3 MB，可以使用線上編輯器
- 可以即時切換不同版本的 Package
- 可以與其他 Lambda Function 共用

---

### 了解什麼是 Layer ?

---

<div class="content-between">
    <ul>
        <li>是 Lambda 其中一項功能，用來將依存套件獨立部署</li>
        <li>解壓縮到環境中的 /opt 目錄</li>
    </ul>
    <img src="https://i.imgur.com/RPcRTC1.png" width="300" height="300">
</div>

---

### 如何使用 Layer

---

### Step1 先來打包專案所需要的依存套件

1. 建立以 nodejs 命名的資料夾
2. 新增該專案所需要套件的 package.json
3. npm install 完後把 package.json 檔案移除
4. 壓縮成 zip 檔

---

### Step2 將壓縮檔上傳到S3

![](https://i.imgur.com/CkRUkeE.png)

---

### Step3 打開控制台

![](https://i.imgur.com/2d1KKB7.png)

---

### 建立 Layer

- 輸入 Layer 名稱
- 選擇要上傳的方式(zip、s3 連結)
- 選擇執行環境

---

![](https://i.imgur.com/tG6Ugdj.png =600x550)

---

### Step4 套用到函式

![](https://i.imgur.com/1HEXTb7.png =800x400)

---

![](https://i.imgur.com/F8d8PgJ.png =700x400)

---

設定完成了，讓我們看一下流程圖

![](https://i.imgur.com/cFJbNTR.png =700x300)

---

恭喜你也可以跟我一樣部署只要 2 分鐘內就搞定～

---

### Layer 使用限制

---

- 每個函式一次最多可使用 5 層
- 部署套裝服務大小，解壓縮不能超過 250 MB(包括 Layer)
- 詳細可參考 [AWS Lambda 配額](https://docs.aws.amazon.com/zh_tw/lambda/latest/dg/gettingstarted-limits.html)

---

## Q&A
