📖

サーバレス環境構築の試験

2022/10/24に公開

サーバレス構築::

Serverless Frameworkのインストール

前提

$ node -v
v8.10.0

問題なければServerless Frameworkをインストール

$ npm install -g serverless

完了したら以下のコマンドを叩いてみる

$ serverless

Commands
* You can run commands with "serverless" or the shortcut "sls"
.
.
.
(省略)

エイリアスもあるので以下のコマンドでも同じ

$ sls

Commands
* You can run commands with "serverless" or the shortcut "sls"
.
.
.
(省略)

概要っぽいものがずらっと出てくればOK

そのほか、以下のコマンドでバージョン確認など

$ sls -v
1.26.1

IAMの作成

デプロイするのにアクセスキーIDとシークレットアクセスキーが必要なので、それを作成。
IAMユーザー追加して、「AdministratorAccess」のポリシーを付与。
AWSマネジメントコンソールからぽちぽちしました。

厳密には以下のような状態になってます。

  • グループ作成
  • グループに「AdministratorAccess」のポリシーを付与
  • IAMユーザー作成
  • グループにユーザーを追加

AWSCLI

インストール

作成したIAMユーザーの「アクセスキーID」「シークレットアクセスキー」を設定するために、AWSCLIをインストール。
Homebrewでできる。

$ brew install awscli

完了したら以下のコマンドで確認してみる

$ aws --version
aws-cli/1.14.60 Python/3.6.4 Darwin/16.7.0 botocore/1.9.13

プロファイルの設定

以下のコマンドを叩くと、いろいろ聞かれる

$ aws configure

アクセスキーIDを入力してエンター

AWS Access Key ID [None]: xxxxxxxxxxxxxxxxxxxxxxxxx

シークレットアクセスキーを入力してエンター

AWS Secret Access Key [None]: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

デフォルトで呼び出しを実行する対象のリージョンを入力してエンター(ap-northeast-1 : 東京)

Default region name [None]: ap-northeast-1

デフォルトの出力形式は空のままエンターでスルー
json、text、tableから選ぶが、指定しなければjsonになる

Default output format [None]:

設定内容はこの2つのファイルに保存されてる

~/.aws/
 ├ config
 └ credentials

また、slsコマンドでも設定できるとのこと
serverless.com : AWS - Config Credentials

上記はdefaultの設定をしているが、名前をつけて複数のプロファイルの設定もできる
AWS Documentation : 名前付きプロファイル

プロジェクト

やっと準備できた...のでプロジェクト作っていく

作成

$ mkdir testProject
$ cd testProject
$ sls create -t aws-python3

-t は どのランタイムかを指定で、以下のようなものを指定する

  • aws-nodejs
  • aws-nodejs-typescript
  • aws-python
  • aws-python3

あとはこっちでオプション一覧確認してみてください
serverless.com : AWS - Create

createを実行すると以下のようなファイルが作成される

./
 ├ .gitignore
 ├ handler.py
 └ serverless.yml

  • handler.py
    • Lambdaファンクション。作成時点では HelloWorld 的な中身になってる。
  • serverless.yml
    • 設定ファイル。ファイルの中身やらリファレンスやら読んで適切に設定しよう。

ローカル実行

ドキュメント見ると、Python、Node、Javaならローカルで実行できるっぽい(2018/03/30 時点)

Currently, invoke local only supports the NodeJs, Python & Java runtimes.

コマンド叩いてみる

$ sls invoke local -f hello

{
    "statusCode": 200,
    "body": "{\"message\": \"Go Serverless v1.0! Your function executed successfully!\", \"input\": {}}"
}

データも渡せる

$ sls invoke local -f hello -d "hoge"

{
    "statusCode": 200,
    "body": "{\"message\": \"Go Serverless v1.0! Your function executed successfully!\", \"input\": \"hoge\"}"
}

こんなのも

$ sls invoke local -f hello -d '{"foo":"bar"}'

{
    "statusCode": 200,
    "body": "{\"message\": \"Go Serverless v1.0! Your function executed successfully!\", \"input\": {\"foo\": \"bar\"}}"
}

jsonファイルも

data.json
{
    "aaaaa": "AAAAA",
    "bbbbb": {
        "ccccc": "CCCCC",
        "ddddd": "DDDDD"
    }
}
$ sls invoke local -f hello -p ./data.json

{
    "statusCode": 200,
    "body": "{\"message\": \"Go Serverless v1.0! Your function executed successfully!\", \"input\": {\"aaaaa\": \"AAAAA\", \"bbbbb\": {\"ccccc\": \"CCCCC\", \"ddddd\": \"DDDDD\"}}}"
}

デプロイ

$ sls deploy

serverless.ymlに書いた設定でデプロイされる

Lambdaの実行

デプロイしたLambda関数を実行する

$ sls invoke -f hello

こっちもデータ渡せる

$ sls invoke -f hello -d "hoge"
$ sls invoke -f hello -d '{"foo":"bar"}'
$ sls invoke -f hello -p ./data.json

リソースの削除

これだけでデプロイしたリソースを削除してくれる

$ sls remove

ローカルにあるのもいらないなら適当に $ rm -r testProject みたいな感じで消しちゃえばいいと思います


$ mkdir hello-serverless
$ cd hello-serverless
$

serverless create --template aws-nodejs --name hello


AWS(STD)環境構築

aws configure
AWS Access Key ID [None]: 作成したIAMのアクセスキーID
AWS Secret Access Key [None]: 作成したIAMのシークレットアクセスキー
Default region name [None]: ap-northeast-1
Default output format [None]: ENTER

$ serverless deploy

Discussion