Serverless Framework를 만져봤어요.
14490 단어 AWSlambdaPython3ServerlessFramework
이번에 우리는 AWS를 공급업체로 하여 파이톤3에서 서비스를 제작할 것이다.
■설치
# Serverless Framework 설치
node.nvm에 js를 설치합니다.
# nvm インストール
# https://github.com/nvm-sh/nvm#installing-and-updating
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
# 最新のltsをインストールしてグローバルに設定
nvm install --lts
nvm use --lts
# インストールされているか確認
node -v
npm --version
# serverless frameworkのインストール
sudo npm install -g serverless
sls --version
#docker 설치Python의 외부 프로그램 라이브러리를 사용할 때 필요하기 때문에 설치합니다.
Amazon ECS에서 Docker의 기본 설치
# Pythonの外部ライブラリをパッケージングするときに必要になる
sudo amazon-linux-extras install docker
sudo systemctl enable docker.service
sudo systemctl start docker.service
# ec2-userをdockerグループに追加してsudoなしでdockerを操作できるようにする
sudo usermod -a -G docker ec2-user
# 一度ログアウトして再ログイン
#공급자 계정 설정AWS 콘솔에서 Serverless Framework용 IAM 사용자를 릴리즈합니다.
무엇이든 할 수 있도록 먼저 AdministratorAccess 정책을 수립하십시오.
■ 기본 운영
# 프로젝트 제작
# --template: AWSをプロバイダとしてPython3でプロジェクトを作成する場合は aws-python3 を指定
# --name: 命名規則は ^[a-zA-Z][0-9a-zA-Z-]+$
# --path: プロジェクトを作成するパスを指定します。
sls create --template aws-python3 --name translator --path translator
#로컬에서 기능 수행로컬 실행 프로그램 앞의 함수입니다.
# --function <FUNCTION_NAME>: 実行する関数名を指定します。
# -p <EVENT_FILE>: ファンクション実行時に引数にわたるevent(json形式)を指定することができます。
sls invoke local --function hello -p event.json
#프로그램# --stage <STAGE_NAME>: servers.ymlのprovider.stageをデプロイ時に指定することができます。(default=dev)
# --region <REGION>: servers.ymlのprovider.regionをデプロイ時に指定することができます。
sls deploy --stage prod --region ap-northeast-1
# ファンクション単位でデプロイしたい場合
sls deploy function -f <yourfunction>
# 터미널에서 디버깅된 함수 실행터미널에서 디버깅된 함수를 실행합니다.
# --function <FUNCTION_NAME>: 実行する関数名を指定します
# -p <EVENT_FILE>: ファンクション実行時に引数にわたるevent(json形式)を指定することができます
sls invoke --function hello -p event.json
# 로그지정된 함수의 로그를 찾습니다.
# --function <FUNCTION_NAME>: 対象の関数名を指定します
# -t: ログをtailします
sls logs --function hello
#Giithub의 서비스 로컬 가져오기# ふつうにgit cloneしてもOK
sls install -u <GITHUB URL OF SERVICE>
cd <PROJECT>
npm install
# 플러그인 설치sls plugin install -n <PLUGIN_NAME>
# 서비스 삭제sls remove -v
■ Python의 외부 프로그램 라이브러리를 사용하려면serverless-ptyhon-requirements 플러그인을 사용합니다.
Serverless Python Requirements | Serverless
#serverless-ptyhon-requirements 설치
# インストール
sls plugin install -n serverless-python-requirements
설치 후 다음 설정이 추가됩니다.serverless.yml
plugins:
- serverless-python-requirements
custom:
PythonRequirements: # deploy時のパッケージングの際にpythonライブラリのビルドをdockerコンテナ上で行う設定です。
dockerizePip: true
#venv 설정Serverless Framework 자체의 구조로서 venv에서 파이톤 라이브러리를 관리할 필요는 없지만 관리하기 쉬우므로 venv를 이용한다.
venv 가상 환경에activate
sls invoke local
를 진행하면 로컬에서 함수를 실행할 수 있습니다.cd <PROJECT_NAME>
# .venvディレクトリに仮想環境を作成して、仮想環境を有効化します。
python3.8 -m venv .venv
source .venv/bin/activate
# ライブラリをインストールして、requirements.txtに書き込見ます。
pip install numpy boto3
pip freeze > requirements.txt
#프로그램그리고 디버그 명령만 실행하면 Requirements가 됩니다.txt에 적힌 프로그램 라이브러리를 잘 포장하여 디자인하였습니다.
※ numby 등 바이너리로 구축해야 하는 패키지는 도커 컨테이너(최초 설치된 소프트웨어)에 구축되며, 램파도 정상적으로 작동할 수 있습니다.
sls deploy
■ serverless.파일의 설정 항목# service
서비스 이름을 정의합니다.초기 상태를 유지하면 됩니다.
servers.yml
service: translator
# frameworkVersion프레임 버전을 정의합니다.초기 상태를 유지하면 됩니다.
servers.yml
frameworkVersion: '2'
# provider프로젝트의 기본 정보(예: 공급업체 이름, 운행 시간 및 구역)를 정의합니다.
serveless.yml
provider:
name: aws
runtime: python3.8
lambdaHashingVersion: 20201221
region: ap-northeast-1 # デプロイするリージョンを定義します。deployコマンドの--regionでデプロイ時に指定することも可能
stage: dev # デプロイするステージ情報を定義します。deployコマンドの--stageでデプロイ時に指定することも可能
# package패키지에 포함할 파일을 패턴으로 정의합니다.
정의된 패턴은 후승이기 때문에 모든 파일을 제거하고 필요한 파일만 지정하면 사용하기 쉽다.
servers.yml
package:
patterns:
- '!**' # すべてのファイルをexclude
- 'static/**' # staticディレクトリは以下をinclude
- 'handler.py' # handler.pyをinclude
# functions함수 실행의 시작점 이벤트와 이벤트가 발생할 때 실행되는 함수를 정의합니다.
ファイル名.関数名
형식 지정 함수.API Gateway를 사용하는 http 이벤트, S3 작업을 트리거로 하는 이벤트 등 다양한 이벤트를 정의할 수 있습니다.
https://serverless.com/framework/docs/providers/aws/events
functions:
translate:
handler: handler.translate # handler.pyのtranslate関数を呼び出します。
role: TranslateRole # resourceセクション(後述)で作成したIAMロールをlambdaに設定します。(未指定の場合はデフォルトのロールが利用されます)
events:
- http: # API Gatewayを利用したhttpイベントを設定します。
path: /translate # /translateにPOSTアクセスされたときに関数を実行します。
method: post
cors: true # CORSを許可するオプションみたいですが、効いていない気がします、、、
static:
handler: handler.static # handler.pyのstatic関数を呼び出します。
role: BaseRole
events:
- http:
path: "/static/{any+}" # {hoge} でプレースホルダを設定できます。{hoge+} とするとワイルドカードになります。
method: get
# resourcesCloudFormation의 템플릿을 직접 기술할 수 있습니다.
이번에는 람바다 함수에 사용되는 IAM 역할을 정의했다.
serverless.yml
resources:
Resources:
BaseRole: # handler.static関数にアタッチするロール
Type: AWS::IAM::Role
Properties:
RoleName: translator-role-lambda-base
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- sts:AssumeRole
Principal:
Service:
- lambda.amazonaws.com
TranslateRole: # handler.translate関数にアタッチするロール
Type: AWS::IAM::Role
Properties:
RoleName: translator-role-lambda-translate
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
- arn:aws:iam::aws:policy/service-role/AWSLambdaDynamoDBExecutionRole
- arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole
- arn:aws:iam::aws:policy/TranslateFullAccess
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- sts:AssumeRole
Principal:
Service:
- lambda.amazonaws.com
# plugins사용할 플러그인을 정의합니다.
sls plugin install
명령으로 플러그 인을 설치하면 자동으로 추가됩니다.serverless.yml
plugins:
- serverless-python-requirements
# customDocoment에서 항목을 찾을 수 없지만 플러그인 등 개별적으로 설정된 영역을 설명합니까
servers.yml
custom:
pythonRequirements:
dockerizePip: true
■ 간단한 번역 애플리케이션학습한 내용을 바탕으로 번역 소프트웨어를 만들어 보았다.
■참고보도
Reference
이 문제에 관하여(Serverless Framework를 만져봤어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ktamido/items/ffdad51eaa3dc0d75cbd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)