LoginSignup
0
0

More than 1 year has passed since last update.

aws-vaultを使ってAWS SAMのデプロイを行ってみる

Posted at

はじめに

AWSのSAMを使うとlambda関数の開発がかなり楽になることを知りました。
本記事ではそんなsamのインストールからデモアプリのデプロイまでをまとめてみました。

AWS SAMとは

SAMとは(Serverless Application Model)の略です。AWSのサーバーレスサービス、Lambdaの関数をローカルで開発する際に非常に便利なサービスとなっています。

SAMを用いるメリット

SAMを用いてLambda関数を開発すると以下のような利点があります。

  • ローカルのエディタを用いてLambda関数のコーディングが可能
  • ローカル上でLambda関数に似た実行環境を用意できるためテストが簡単
  • pythonのパッケージを用いる場合zipファイルなどにまとめレイヤー分けをする必要がなくなる

使ってみる

準備

前提

本記事はarm系cpuの搭載されたmacOSでまとめています。

$ sw_vers
ProductName:	macOS
ProductVersion:	12.5
$ uname -m
arm64

本記事では以下のコマンドは使える前提となっていますので、未インストールの場合はインストールを行うことを推奨します。

  • brew
  • Docker
  • python3 <- 本記事ではpythonですが、好きな言語を使ってください

本記事執筆時には以下のようなバージョンを使っています。

$ brew -v
Homebrew 3.5.9
$ Docker -v
Docker version 20.10.17, build 100c701
$ python3 -V
Python 3.10.6

SAM CLIインストール

基本的にはaws公式の手順を追ってインストールを行います。windowsのインストール方法も公式にあるのでwindowsを使っている方はそちらを参考にしてください。

$ brew tap aws/tap
$ brew install aws-sam-cli

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

$ sam --version
SAM CLI, version 1.55.0

認証設定

普段、aws-vaultを使っているのでその設定を行います。
aws-vaultを使わない認証方法については公式ドキュメントに記載があります。

また、aws-vaultのインストールや設定については別の記事で紹介しているのでそちらを参照ください。

.aws配下のconfigファイルを以下のように編集します。

~/.aws/config
[default]
region = ap-northeast-1
credential_process = aws-vault exec --json default

[profile <profile_name>]
role_arn=arn:aws:iam::<account_id>:role/<role_name>
role_session_name=<iam_user_name>
mfa_serial=arn:aws:iam::<account_id>:mfa/<iam_user_name>
region=ap-northeast-1

不安な方は以下のコマンドでs3バケットのリストが返ることを確認してください。

$ aws-vault exec <profile_name> -- aws s3 ls

aws-vaultを通して実行されるコマンドで権限が足りない場合は、iam_userではなく、roleに権限を付与してください。

デプロイしてみる

任意のディレクトリで以下のコマンドをうち、初期化を行います。今回はデモとして以下ような設定で初期化しました。

$ sam init
 ...
Which template source would you like to use?
	1 - AWS Quick Start Templates
	2 - Custom Template Location
Choice: 1
Choose an AWS Quick Start application template
	1 - Hello World Example
	2 - Multi-step workflow
	3 - Serverless API
	4 - Scheduled task
	5 - Standalone function
	6 - Data processing
	7 - Infrastructure event management
	8 - Lambda EFS example
	9 - Machine Learning
Template: 1
Use the most popular runtime and package type? (Python and zip) [y/N]: y

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

Project name [sam-app]:

上記が成功したら、sam-appディレクトリの中でビルドし、実際にデプロイしてみましょう。

$ cd sam-app
$ sam build

ビルドが正常に行われたら、デプロイをやってみます。今回はテストなのですべてyesを選んでデプロイしてみます。

$ aws-vault exec {profile名} -- sam deploy --guided
 ...
	Stack Name [sam-app]:
	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 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]:

最後にSuccessfully created/updated stack - sam-app in ap-northeast-1と返ってくればデプロイ成功です。

初期の権限ではデプロイができない可能性があるので、Role関係のエラーが出た場合は足りない権限をiam_userではなく、ロールに付与してください。

最後にawsコンソールでsam-appがあることを確認もできます。
スクリーンショット 2022-08-20 0.34.05.png

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0