アルアカ - Arcadia Academia

Arcadia Academiaは「エンジニアリングを楽しむ」を合言葉に日本のデジタル競争力を高めることをミッションとするテックコミュニティです。

AWS SAMの使い方ガイド:サーバーレスアプリケーションを簡単にデプロイする方法

Featured image of the post

前提条件

  • AWS CLIが使える
AWS SAMとは?

AWS SAM(Serverless Application Model)は、サーバーレスアプリケーションの構築とデプロイを容易にするフレームワークです。AWS Lambda、API Gateway、DynamoDB、S3などのリソースを一元的に管理し、簡潔なテンプレートを使ってアプリケーションの定義を行えます。これにより、サーバーレスアプリケーションの開発が効率化され、インフラストラクチャの設定やデプロイにかかる時間を大幅に削減できます。

AWS SAMのインストール

AWS SAMを使用するには、まず開発環境にCLIツールをインストールします。以下の手順で進めましょう。

  1. Homebrewを使用してインストール(macOS/Linuxの場合):
    brew tap aws/tap
    brew install aws-sam-cli
  2. Windowsの場合:
    Windowsインストーラを公式サイトからダウンロードしてインストールします。

インストールが完了したら、以下のコマンドでインストールが成功しているか確認します。

sam --version
SAM用にディレクトリを作成

今回はsam-tutorialというディレクトリを作成し、そちらに移動しましょう。

初期化コマンドを実行

sam init

初期化コマンドを実行すると対話型のプロンプトがはじまります。

Which template source would you like to use?
	1 - AWS Quick Start Templates
	2 - Custom Template Location

今回は1を選択します。

Choose an AWS Quick Start application template
        1 - Hello World Example
        2 - Data processing
        3 - Hello World Example with Powertools for AWS Lambda
        4 - Multi-step workflow
        5 - Scheduled task
        6 - Standalone function
        7 - Serverless API
        8 - Infrastructure event management
        9 - Lambda Response Streaming
        10 - Serverless Connector Hello World Example
        11 - Multi-step workflow with Connectors
        12 - GraphQLApi Hello World Example
        13 - Full Stack
        14 - Lambda EFS example
        15 - DynamoDB Example
        16 - Machine Learning

今回は1を選択します。

ランタイムは自分で選択します。

Use the most popular runtime and package type? (Python and zip) [y/N]: N

Which runtime would you like to use?
        1 - aot.dotnet7 (provided.al2)
        2 - dotnet8
        3 - dotnet6
        4 - go (provided.al2)
        5 - go (provided.al2023)
        6 - graalvm.java11 (provided.al2)
        7 - graalvm.java17 (provided.al2)
        8 - java21
        9 - java17
        10 - java11
        11 - java8.al2
        12 - nodejs20.x
        13 - nodejs18.x
        14 - nodejs16.x
        15 - python3.9
        16 - python3.8
        17 - python3.12
        18 - python3.11
        19 - python3.10
        20 - ruby3.3
        21 - ruby3.2
        22 - rust (provided.al2)
        23 - rust (provided.al2023)
Runtime: 12

今回は12を選択します。

パッケージ形式を聞かれます。

What package type would you like to use?
        1 - Zip
        2 - Image

今回は1を選択します。

X-Ray tracingを有効にするか聞かれます。

Would you like to enable X-Ray tracing on the function(s) in your application?  [y/N]: y
X-Ray will incur an additional cost. View https://aws.amazon.com/xray/pricing/ for more details

今回はNoを選択します。

CloudWatch Application Insightsを使うか聞かれます。

Would you like to enable monitoring using CloudWatch Application Insights?
For more info, please view https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html [y/N]:

今回はNoを選択します。

Lambda 関数に JSON 形式で構造化ログを設定しますか?と聞かれます。

Would you like to set Structured Logging in JSON format on your Lambda functions?  [y/N]:

今回はNoを選択します。

最後にプロジェクト名が聞かれます。

Project name [sam-app]: sam-app-tutorial

今回はsam-app-tutorialとしています。

Image in a image block

このようにsam-app-tutorialが作成されていたら成功なので、sam-app-tutorialに移動しましょう。

SAMでアプリケーションをビルド

テンプレートが用意できたら、次はアプリケーションのビルドです。ビルドプロセスでは、SAMがテンプレートに基づいて必要な依存関係を解決し、デプロイ可能なパッケージを生成します。

sam build

ビルドが成功すると、.aws-sam/buildディレクトリにパッケージが作成されます。

AWSにデプロイ

ローカルでのテストが完了したら、いよいよ本番環境にデプロイします。AWS SAMでは、sam deployコマンドを使用して簡単にデプロイできます。

プロファイルを指定しない場合はデフォルトのプロファイルのaws環境にデプロイされます。下記のコマンドでプロファイルを確認してください。

cat ~/.aws/credentials

デプロイ先を確認後、以下のコマンドでデプロイしてください。--guidedオプションは初回だけでOKです。

sam deploy --guided

このコマンドを初めて実行すると、デプロイ時の設定を対話形式で入力するよう促されます。

Configuring SAM deploy
======================

        Looking for config file [samconfig.toml] :  Found
        Reading default arguments  :  Success

        Setting default arguments for 'sam deploy'
        =========================================
        Stack Name [sam-app-tutorial]:
        AWS Region [ap-northeast-1]: 
        #Shows you resources changes to be deployed and require a 'Y' to initiate deploy
        Confirm changes before deploy [Y/n]: y
        #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
        #Preserves the state of previously provisioned resources when an operation fails
        Disable rollback [y/N]: y
        HelloWorldFunction has no authentication. Is this okay? [y/N]: y
        Save arguments to configuration file [Y/n]: y
        SAM configuration file [samconfig.toml]: 
        SAM configuration environment [default]: 

基本的には上記の形で良いと思います。

S3が作成されずにエラーになることがあるのでその場合は、S3を作成後に、samconfig.tomlのs3_bucketで明示的にS3を指定してください。

※resolve_s3はfalseに変更してください。

[default.deploy.parameters]
capabilities = "CAPABILITY_IAM"
confirm_changeset = true
resolve_s3 = false
s3_bucket = "your-existing-bucket-name"
s3_prefix = "sam-app-tutorial"
region = "ap-northeast-1"
disable_rollback = true
image_repositories = []

s3_bucketの項目を編集後に再度デプロイしてみてください。

sam deploy

設定が完了すると、アプリケーションが指定したAWSアカウントのリソースとして作成されます。

デプロイの確認

デプロイが完了すると、AWSコンソールからデプロイされたリソースを確認できます。また、デプロイ時に表示されるURLを使ってアプリケーションの動作を直接確認することも可能です。

まとめ

AWS SAMは、サーバーレスアプリケーションを効率的に開発・デプロイするための強力なツールです。CLIの操作に慣れておくと、アプリケーションの管理やデプロイが非常にスムーズになります。これからサーバーレスアーキテクチャに取り組む方は、このフレームワークを活用してみてください。また今回のひな形をもとにいろいろ試してみると理解が深まると思いますので、ぜひ、試してみてください。

あなたを爆速で成長させるメンタリングプログラムはこちらから↓↓

RUNTEQ(ランテック) - 実践型Webエンジニア養成プログラミングスクールの入会