おひとり

できる限りひとりで楽しむための情報やプログラミング情報など。

【サーバーレスバッチ処理ハンズオン】1章 SAMでプロジェクトを初期化

※この記事は「AWSでサーバーレスなバッチ処理を作るハンズオン」の1章です。こちらの記事からスタートできます。

f:id:hitoridehitode:20211127160918p:plain
SAMを使ってプロジェクトを初期化!

では、さっそくSAMを使ってプロジェクトを初期化しましょう!!

SAMのインストール

SAM(Serverless Application Model)はAWS上でサーバーレスなサービスを開発するためのフレームワークです。(Serverless Frameworkのような感じ。)
Lambda関数のソースコードやCloud Formationによるリソースのデプロイまで行えます。

まずはSAMをインストールします。
以下のドキュメントを参照して利用している環境に合わせてインストールしてください。

docs.aws.amazon.com

なお、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を立ち上げます。

www.ohitori.fun