- samとは何か
- samを使ったデプロイの方法
samとは?
samとは、AWSのサーバレスのリソースをCLIで構築できるフレームワークです。
samはCloudFormationの拡張機能であるため、samを実行した裏側ではCloudFormationが動作しています。
そのため、コンフィグファイルはCloudFormationをベースとしたものとなっています。
ざっくりと言うと、CloudFormationにサーバレスサービスも対応したものがsamということです。
sam(AWS SAM CLI)環境の構築
まずsamコマンドが使えるように、sam(AWS SAM CLI)をインストールします。
インストールにはpipを使用します。
pip3 install aws-sam-cli
正常にインストールできているかバージョンを確認してみましょう。
sam --version
SAM CLI, version 1.13.1
バージョンが表示されれば、無事にインストールできています。
ちなみに、samを使うためにはAWS-cliが使えることが前提になっています。
AWS-cliを使う準備はこちらの記事に掲載しています。

samを使ったデプロイ手順
公式サイトのチュートリアルに則りsamでデプロイしていきます。
samを使ったデプロイは以下の4ステップで進めていきます。
- ステップ1アプリケーションの作成
- ステップ2アプリケーションのbuild
- ステップ3デプロイ
アプリケーションの作成
デプロイしたいアプリケーションを以下のようなフォルダ構成で作成します。
sam-app/ # プロジェクト名 ├── README.md ├── events/ # ローカルで動作確認するときの入力値 │ └── event.json ├── hello_world/ # アプリのソース │ ├── __init__.py │ ├── app.py #Contains your AWS Lambda handler logic. │ └── requirements.txt ├── template.yaml #デプロイするリソースを定義する設定ファイル └── tests/ # テスト用のディレクトリ
今回はsamで用意されたサンプルアプリを使用していきます。
sam init
どんなアプリを使うかいくつか質問されるので、答えていきます。
Which template source would you like to use? 1 - AWS Quick Start Templates 2 - Custom Template Location Choice: 1
AWSで用意されたサンプルアプリを使用するため、1を選択。
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に固めてS3にアップロードする方法でデプロイするので、1を選択。
(samにはDocker imageをアップロードしてデプロイする方法もあります。)
Which runtime would you like to use? 1 - nodejs12.x 2 - python3.8 3 - ruby2.7 4 - go1.x 5 - java11 6 - dotnetcore3.1 7 - nodejs10.x 8 - python3.7 9 - python3.6 10 - python2.7 11 - ruby2.5 12 - java8.al2 13 - java8 14 - dotnetcore2.1 Runtime: 2
python3.8を使ったアプリにしたので、2を選択。
Project name [sam-app]: Cloning app templates from https://github.com/aws/aws-sam-cli-app-templates
プロジェクト名はsam-appとしたので、デフォルト値(空欄)を指定。
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: 1 ----------------------- Generating application: ----------------------- Name: sam-app Runtime: python3.8 Dependency Manager: pip Application Template: hello-world Output Directory: . Next steps can be found in the README file at ./sam-app/README.md
サンプルアプリの内、Hello World Exampleを指定。
これらの質問に答えたことでsam-appプロジェクトとして、Hello World Exampleの資材一式がカレントディレクトリに作成されます。
アプリケーションの構築
アプリケーションをbuildして、AWSにアップロードできる形に変換します。
cd sam-app
sam build
buildが成功したメッセージが表示されると思います。
Building codeuri: hello_world/ runtime: python3.8 metadata: {} functions: ['HelloWorldFunction'] Running PythonPipBuilder:ResolveDependencies Running PythonPipBuilder:CopySource Build Succeeded Built Artifacts : .aws-sam/build Built Template : .aws-sam/build/template.yaml
buildの結果は.aws-samディレクトリの中に作成されます。
sam-app/ # プロジェクト名 ├── .aws-sam/ │ └── build/ # build結果の成果物 │ └── build.toml # buildに関する設定
デプロイ
samにはアプリケーションのデプロイコマンドが用意されています。
更に、–guidedオプションを付けると、質問への回答に応じて自動で設定ファイルを作成してくれます。
sam deploy --guided
Configuring SAM deploy ====================== Looking for config file [samconfig.toml] : Not found Setting default arguments for 'sam deploy' ========================================= Stack Name [sam-app]: AWS Region [us-east-1]: ap-northeast-1 #Shows you resources changes to be deployed and require a 'Y' to initiate deploy Confirm changes before deploy [y/N]: n #SAM needs permission to be able to create roles to connect to the resources in your template Allow SAM CLI IAM role creation [Y/n]: y HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y Save arguments to configuration file [Y/n]: y SAM configuration file [samconfig.toml]: SAM configuration environment [default]:
質問に答え終わると自動でリソースが作成され、アプリがデプロイされます。
ここで設定した内容は指定したファイル名(今回の場合はsamconfig.toml)に保存され、次回以降も同じリソースに対して更新することができます。
以上でsamを使ったアプリケーションのデプロイは完了です。
まとめ
今回はsamを使ったデプロイの方法について解説しました。
デプロイするためには、アプリケーションの作成・アプリケーションのbuild・デプロイの3ステップがあります。
samを使うとサーバレスのサービスとリソースが設定ファイルで紐づくため、管理もしやすくなります。
コメント