※この記事は「AWSでサーバーレスなバッチ処理を作るハンズオン」の1章です。こちらの記事からスタートできます。
では、さっそくSAMを使ってプロジェクトを初期化しましょう!!
SAMのインストール
SAM(Serverless Application Model)はAWS上でサーバーレスなサービスを開発するためのフレームワークです。(Serverless Frameworkのような感じ。)
Lambda関数のソースコードやCloud Formationによるリソースのデプロイまで行えます。
まずはSAMをインストールします。
以下のドキュメントを参照して利用している環境に合わせてインストールしてください。
なお、macでは以下のようにHomebrewを使ってインストールできます。
brew tap aws/tap brew install aws-sam-cli
バージョンを確認してみます。(多少バージョンが異なっても問題ないと思います。)
$ sam --version SAM CLI, version 1.36.0
プロジェクトの初期化
SAMのプロジェクトを作成しましょう。
sam init
コマンドを実行すると、いくつかプロンプトが現れます。
プロンプトの途中で入力を間違えてしまったり、よく分からなくなったらCtrl + c
を押してキャンセルできます。はじめからやり直せます。
では、プロンプトに回答しながらプロジェクトを初期化していきます。
Which template source would you like to use?
Which template source would you like to use? 1 - AWS Quick Start Templates 2 - Custom Template Location Choice: 1
AWS Quick Start Templates
を使って始めますので、1
を選択します。
What package type would you like to use?
What package type would you like to use? 1 - Zip (artifact is a zip uploaded to S3) 2 - Image (artifact is an image uploaded to an ECR image repository) Package type: 1
Zipでアップロードしたいので1
を選択します。
Which runtime would you like to use?
Which runtime would you like to use? 1 - nodejs14.x 2 - python3.9 3 - ruby2.7 4 - go1.x 5 - java11 6 - dotnetcore3.1 7 - nodejs12.x 8 - nodejs10.x 9 - python3.8 10 - python3.7 11 - python3.6 12 - python2.7 13 - ruby2.5 14 - java8.al2 15 - java8 16 - dotnetcore2.1 Runtime: 9
ここでは現時点(2021/11/27)で有効な最新版のPython3.8を使いたいので9
を選択します。
※上記はRuntimeの選択ですが、AWSのアップデートによって選択肢が異なるかもしれません。
その場合、Python3.8
に対応する番号を選択してください。ただし、今回はシンプルなのでPython3のバージョンの影響を受けないと考えられます。最新版を選んでも構いません。
Project name
Project name [***]: simple-serverless-batch
プロジェクトの名前はsimple-serverless-batch
とします。
入力してEnterしてください。
AWS quick start application templates
AWS quick start application templates: 1 - Hello World Example 2 - EventBridge Hello World 3 - EventBridge App from scratch (100+ Event Schemas) 4 - Step Functions Sample App (Stock Trader) 5 - Elastic File System Sample App Template selection: 4
今回はStep Functionsを利用したアプリになります。
シンプルなテンプレートから始められるように 4
を選択します。
cd
プロジェクトが初期化されました。
cd
します。
cd simple-serverless-batch
プロジェクトの構造
以下のようなディレクトリおよびファイルが生成されます。
. ├── README.md ├── __init__.py ├── functions ├── statemachine ├── template.yaml └── tests
functions
にはLambda関数のソースコードを格納します。statemachine
には、Step FunctionsのState Machineの定義を格納します。template.yaml
は、Cloud Formationのテンプレートです。利用するAWSリソースの設定を記述します。tests
にはユニットテスト、およびintegrationテストを格納します。
シンプルで分かりやすいテンプレートですよね。 実際には、生成されたファイルは利用しません。この後、不要なディレクトリやファイルを削除することになります。
ここでプロジェクトの初期化は完了です。
必要に応じてgit commit
しておきましょう。
git init git add . git commit -m 'init project'
次のステップ
次はDockerを使ってローカルにDynamoDB LocalおよびS3互換のMinioを立ち上げます。