【AWS】samを使ってデプロイ

スポンサーリンク
【AWS】samを使ってデプロイAWS
この記事を読んで分かること
  • 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を使う準備はこちらの記事に掲載しています。

【AWS】AWS-cliの使うために必要な準備
この記事を読んで分かること AWS-cliのインストール方法 AWS-cliの操作に必要なIAMユーザの作成方法 AWS-cliのコンフィグの設定方法 AWS-cliのインストール AWS-...

 

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を使うとサーバレスのサービスとリソースが設定ファイルで紐づくため、管理もしやすくなります。

 

参考文献

チュートリアル: Hello World アプリケーションのデプロイ - AWS Serverless Application Model
AWS SAM を使用して、基本的な Hello World アプリケーションを AWS クラウド にデプロイする方法を学びます。

コメント

タイトルとURLをコピーしました