この記事は約2分で読めます。
この記事は1年以上前に書かれたものです。
内容が古い可能性がありますのでご注意ください。
こんにちは。 サーバーワークスの松井です。
今回は、Serverless Framework使ってAWSリソースをコマンドで一発で立ち上げたいけどserverless.ymlの書き方がいまいち公式ドキュメント読んでもわからないという人向けに参考となるサンプルコードを提供したいと思います。
みんな参考にしてくれよな!
※1 今回は、Serverless Frameworkの環境は自分で用意できていることを前提にしています。
※2 極力シンプルにするためにソースコードにすべて説明を載せています。
※3 あくまで書き方の感覚を掴みたいという方への記事です。
以下は、AWS Lambda (以降、単に Lambda)とLambdaにAWSサービスやリソースへの実行権限を付与したIAMロールを作成し、作成したIAMロールをLambdaにアタッチするyamlファイルになります。
serverless.yml
# Serverless Frameworkのプロジェクト名service: matsui-test# Serverless FrameworkのversionframeworkVersion: "2"provider:# インフラ環境を定義(今回はAWS)name: aws# 言語のversion(今回はpython)runtime: python3.8# オプションlambdaHashingVersion: 20201221# dev or prod(今回は開発)stage: dev# どのリージョンを使うかを定義(今回は東京)region: ap-northeast-1# カスタム変数が定義可能custom:# 外部ファイルの読み込みも可能otherfile:# 別途yamlファイルと同じ階層にconf/config_sample.ymlを作成してその場所を指定config: ${file(./conf/config_sample.yml)}# Lambda関数を作成functions:# 関数の名前を定義(デフォルトだと実際には、サービス名+環境名+関数の名前で表示される)MatsuiTest:# 環境変数を定義(埋め込むのは良くないので設定ファイルから引用できる)# このファイル内で定義した情報を.でつなげることで入力できる# configファイルの取り出したい変数を指定environment: ${self:custom.otherfile.config.environment}# lambda_handler名を定義を定義(pythonファイル名xxx.pyの.py以下を指定することでどのファイルのlambda_handlerかを指定できる)handler: matsuitest.lambda_handler# LambdaにアタッチするIAMロールを選択(resourceでRoleの権限は別途定義して作成する)# Serverless Frameworkは、CloudFormationで作成するので!GetAttでIAMロールのARNを取り出せるrole: !GetAtt MatsuiTestRole.Arn# 各種サービスを作成する# resources以下はCloudFormationと同じ記法が可能resources:Resources:# IAMロールの名前を定義MatsuiTestRole:Type: AWS::IAM::Role# 以下でIAMロールを定義Properties:# IAMロールの内容を定義AssumeRolePolicyDocument:Version: "2012-10-17"Statement:- Effect: "Allow"Principal:Service:- "lambda.amazonaws.com"Action:- "sts:AssumeRole"Path: /Description: MatsuiTest# IAMポリシーを作成Policies:# IAMポリシーの名前- PolicyName: MatsuiTestPolicy# IAMポリシーの内容を定義PolicyDocument:Version: "2012-10-17"Statement:- Effect: "Allow"Action:- "sts:AssumeRole"Resource: "*"
conf/config_sample.yml
environment:ARN: 'xxx:xxx:xxx'
matsuitest.py
import osdef lambda_handler(event, context):# 環境変数を取得print("ARN is: " + os.environ["ARN"])response = {"statusCode": 200,"body": "Go Serverless v1.0! Your function executed successfully!"}return response
ディレクトリ構成
- serverless.yml - conf/ - config_sample.yml - matsuitest.py
あとは、魔法のコマンド serverless deploy -v をポチッとしてみよう! AWSコンソールを見ると自分で書いたAWSリソースが存在してますよ!