iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0
Software Development

從零開始構建能理解語義的 Linebot 架構系列 第 9

使用 AWS Lambda 開發 Serverless Event 接收器: 建立IAM Account / 使用 AWS CLI進行部署

  • 分享至 

  • xImage
  •  

概述:

這篇文章將一步一步完成使用 AWS CLI 進行 Lambda 部署的準備工作。為了讓 Node.js Lambda Function 能夠順利運行,需先建立 IAM 帳戶,然後使用 AWS CLI 來上傳程式碼。
可參考以下腳本deploy.sh:

# 指令範例: function=LinebotHandlerNode ./deploy.sh
# function: AWS Lambda上的Function名稱, 預設值為: "LinebotHandlerNode"
# 這個指令會將 index.js, utils, .env, node_modules 打包成一個 zip 檔案, 並更新 AWS Lambda 上的 Function
functionName="${function:=LinebotHandlerNode}"
zip -r $functionName.zip index.js utils .env node_modules
aws lambda update-function-code --function-name $functionName --zip-file fileb://$functionName.zip

建立IAM Account與 AWS CLI 準備

現在,我們已經對AWS IAM有了基本的認識,將繼續探討如何準備使用 AWS CLI 進行部署。
要使用AWS CLI操作你的AWS資源(像是上傳資料到AWS S3,或更新Lambda Function),你需要先有一個IAM Acoount,我們會使用官方推薦的 IAM Identity Center 來建立這個帳戶。
具體步驟如下:

步驟1.在IAM Identity Center建立部署用的IAM Acount User

1.1 啟用 IAM Identity Center

首先我們要先啟用Identity Center。
IAM Identity Center是AWS提供的權限分配及帳號管理的介面,在這裡可以建立及分配各個工作用帳號對於AWS資源的權限。

https://ithelp.ithome.com.tw/upload/images/20240923/20105227a6rdkyI7Xg.png

1.2 選擇Identity Center directory作為你的身份來源(Identity Source)

在啟用 Identity Center以後,就會進入Dashboard。
Recommended setup steps 中的第一步要選擇 identity source,這邊維持使用default AWS提供的Identity Center directory。
https://ithelp.ithome.com.tw/upload/images/20240923/20105227ekOD80KLg3.png

https://ithelp.ithome.com.tw/upload/images/20240923/20105227iePZCPdP51.png

關於Identity Source的選項

Identity Source是管理Users and Groups 的地方,可以指定以下三種來源。
(本篇我們先維持預設值: Identity Center directory)

  • Identity Center directory — 預設值, 可在AWS的Identity Center directory建立 User 和 Group, 以及指定他們存取AWS account / Application
  • Active Directory — 使用 AWS Directory Service 在 AWS Managed Microsoft AD directory 或者Active Directory (AD)管理Users
  • External identity provider — 在外部 identity provider(IdP)管理Users, Ex: Okta or Azure Active Directory.

https://ithelp.ithome.com.tw/upload/images/20240923/20105227X6HX1j5lpA.png

1.3 建立使用者(User)

點選左側的Users -> Add User, 新增一個名稱叫"henrydev"的User,跟著步驟設定帳號密碼
https://ithelp.ithome.com.tw/upload/images/20240923/20105227POtS5y1cvH.png

https://ithelp.ithome.com.tw/upload/images/20240923/20105227yLGxDwRc9H.png

1.4 建立群組 (Group) 並添加使用者

  • 一樣是左側,點選Groups,建立一個名稱叫”deploy-group”的Group跟著步驟設定即可
  • 點選建立的Group, 選擇Add Users to Group將剛剛建立的User: henrydev加入
    https://ithelp.ithome.com.tw/upload/images/20240923/20105227erT8MLHpvQ.png

1.5 建立administrative Permission set並設定權限

  • 點選左側的Permission sets
    https://ithelp.ithome.com.tw/upload/images/20240923/201052278CiXecdk1e.png

  • Create Permission Set

    • 點選後如下圖,可以選擇預先定義好的Permission Set,或者自定義
    • 這邊選擇AdministratorAccess,以符合我們部署Lambda Function的需求

https://ithelp.ithome.com.tw/upload/images/20240923/20105227QXwZReFsAQ.png

  • 選擇Session Time
    • Default是logging1小時候就會被AWS踢掉,最多可以選到12小時

https://ithelp.ithome.com.tw/upload/images/20240923/20105227qs1zmXdgI7.png

注意: 一旦Session duration time過期,就需要再取得一次credentials,才能正常存取AWS資源

把administrative permission給User/Group

  • 點選左側的AWS Account,在下面的checkbox選擇自己的AWS Account,並且點選Assign users or group

https://ithelp.ithome.com.tw/upload/images/20240923/20105227Vhwn4SztD9.png

  • 把剛剛建立的User和Group都選起來

https://ithelp.ithome.com.tw/upload/images/20240923/201052279urD3SpTui.png

  • 設定User的AWS Account 存取權限
    • 選擇剛剛建立的permission set, 指定給AWS Account: Henry

https://ithelp.ithome.com.tw/upload/images/20240923/20105227wkPJMV8OiJ.png

  • 送出以後會看到Account的右邊多了 AdministratorAccess這個權限
    • 至此帳號的權限設定就大功告成。
      https://ithelp.ithome.com.tw/upload/images/20240923/20105227uYMWuTCFIh.png

2.從AWS access portal 取得Account的temporary security credentials

  • 在Dashboard從AWS access portal URL用User name / password登入

https://ithelp.ithome.com.tw/upload/images/20240923/2010522771JGIB21JQ.png

  • 點選AWS Account -> Command line or programmatic access, 可以拿到設定AWS CLi時需要的Access key ID and secret access key.

https://ithelp.ithome.com.tw/upload/images/20240923/20105227gTBEuzcewX.png

我們已取得Administrator權限的Access key ID and secret access key,這組身份憑證的權限,足以部署AWS資源。下一步就可以用這組身份認證,去設定AWS CLI的驗證資訊。

3.設定AWS CLI使用的驗證資訊

https://ithelp.ithome.com.tw/upload/images/20240923/20105227Mk75KERFXo.png

  • Default region name可在IAM Identity Center-> Dashboard中的Region找到:

https://ithelp.ithome.com.tw/upload/images/20240923/20105227iFzDPIL8qh.png

  • 在console加入access資訊
export AWS_ACCESS_KEY_ID=”你的ACCESS_KEY_ID”
export AWS_SECRET_ACCESS_KEY="你的ACCESS_KEY"
export AWS_SESSION_TOKEN="你的ACCESS_TOKEN"
  • 也可以在~/.aws/credentials貼上:
aws_access_key_id="你的ACCESS_KEY_ID"
aws_secret_access_key="你的ACCESS_KEY"
aws_session_token="你的ACCESS_TOKEN"

至此,我們已完成了所有使用AWS CLI的準備事項。接下來就可以用AWS CLI部署Lambda Function。

使用AWS CLI部署 Node.js Lambda Function

這邊只要依照官網的步驟,透過AWS CLI的 update-function-code這個指令上傳即可。
上傳指令可以參考本篇開頭的腳本內容。需要注意:

  • 當Lambda Function有使用任何npm套件時,需要安裝AWS SDK for javascript (npm install aws-xray-sdk)
  • 上傳前請檢查node-module有相關dependency的存在:
    https://ithelp.ithome.com.tw/upload/images/20240923/20105227VpZ1E4kCPE.png

總結

本篇建立了一個非root的User,並且將Admin權限以及AWS Account 存取權限指派給它:

  • 此帳號非root帳號
  • 因為有指定AdministratorAccess權限,所以可以存取AWS resource,進行部署等工作
  • 使用這個User的credentials(access_key, access_id, access_token),就可以用於AWS CLI使用下指令的方式,進行部署等工作。
  • 如果Duration time過期,需要重新拿credentials才能用

至此就完成了簡單的AWS CLI部署機制,下一篇將一探Node.js Lambda Function本人。


上一篇
使用 AWS Lambda 開發 Serverless Event 接收器: 部署方式
下一篇
使用 AWS Lambda 開發 Serverless Event 接收器: Node.js LINE Bot Handler
系列文
從零開始構建能理解語義的 Linebot 架構12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言