こんにちはエンジニアの sakasai です。
YouTubeで配信されているフジロックをずっと垂れ流してます。
さて、みんな大好きAWS Serverless Application Model(SAM)にdeleteコマンドが追加されました。
https://github.com/aws/aws-sam-cli/releases/tag/v1.29.0
※2021-8-21時点ではまだドキュメントには記載されていないようでした。
さっそく試してみようと思います。
AWS SAMとは
AWSがオープンソースで開発しているサーバーレスアプリケーション構築用のフレームワークです。
https://aws.amazon.com/jp/serverless/sam/
SAM CLI を使うことによりローカル環境で開発(ビルド、ローカル実行)、AWS環境へのデプロイなどを行うことが出来、サーバーレスアプリケーションを高速に構築することが出来ます。
AWSリソース(Lambda関数など)の定義はyamlファイルで行い ※1、デプロイを行うとCloudFormationでリソースが作成されます。
deleteコマンドを試す
deleteするためにまずはアプリケーションを構築してデプロイします。
今回はSAM CLIでサンプルで構築できるアプリケーションをそのまま使いました。
バージョン
deleteコマンドが追加された以下のバージョンで実行します。
bash-3.2$ sam --version
SAM CLI, version 1.29.0
helpを見るとdeleteが追加されています。
bash-3.2$ sam --help
Usage: sam [OPTIONS] COMMAND [ARGS]...
AWS Serverless Application Model (SAM) CLI
The AWS Serverless Application Model extends AWS CloudFormation to provide
a simplified way of defining the Amazon API Gateway APIs, AWS Lambda
functions, and Amazon DynamoDB tables needed by your serverless
application. You can find more in-depth guide about the SAM specification
here: https://github.com/awslabs/serverless-application-model.
Options:
--debug Turn on debug logging to print debug message generated by SAM
CLI and display timestamps.
--version Show the version and exit.
--info
-h, --help Show this message and exit.
Commands:
init Init an AWS SAM application.
validate Validate an AWS SAM template.
build Build your Lambda function code
local Run your Serverless application locally for quick development &...
package Package an AWS SAM application.
deploy Deploy an AWS SAM application.
delete Delete an AWS SAM application and the artifacts created by sam
deploy.
logs Fetch logs for a function
publish Publish a packaged AWS SAM template to the AWS Serverless
Application Repository.
pipeline Manage the continuous delivery of the application
deleteコマンドのオプションも確認してみます。
bash-3.2$ sam delete --help
Usage: sam delete [OPTIONS]
The sam delete command deletes the CloudFormation stack and all the
artifacts which were created using sam deploy.
e.g. sam delete
Options:
--stack-name TEXT The name of the AWS CloudFormation stack you want to
delete.
--config-file TEXT The path and file name of the configuration file
containing default parameter values to use. Its default
value is 'samconfig.toml' in project directory. For more
information about configuration files, see:
https://docs.aws.amazon.com/serverless-application-
model/latest/developerguide/serverless-sam-cli-
config.html. [default: samconfig.toml]
--config-env TEXT The environment name specifying the default parameter
values in the configuration file to use. Its default
value is 'default'. For more information about
configuration files, see:
https://docs.aws.amazon.com/serverless-application-
model/latest/developerguide/serverless-sam-cli-
config.html. [default: default]
--no-prompts Specify this flag to allow SAM CLI to skip through the
guided prompts.
--profile TEXT Select a specific profile from your credential file to
get AWS credentials.
--region TEXT Set the AWS Region of the service (e.g. us-east-1).
--debug Turn on debug logging to print debug message generated
by SAM CLI and display timestamps.
-h, --help Show this message and exit.
アプリケーションの作成
initコマンドで構築します。
bash-3.2$ sam init
Which template source would you like to use?
1 - AWS Quick Start Templates
2 - Custom Template Location
Choice: 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
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: 2
Project name [sam-app]: sam-delete-app
Cloning from https://github.com/aws/aws-sam-cli-app-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: 1
-----------------------
Generating application:
-----------------------
Name: sam-delete-app
Runtime: python3.9
Dependency Manager: pip
Application Template: hello-world
Output Directory: .
Next steps can be found in the README file at ./sam-delete-app/README.md
アプリケーション名をsam-delete-app、ランタイムをpython3.9にして、Hello World Exampleのテンプレートで作成しました。
アプリケーションの一部を変更してみます。
# sam-delete-app/hello_world/app.py
...(省略)
print('Hello, Delete App.')
return {
"statusCode": 200,
"body": json.dumps({
"message": "hello delete world",
# "location": ip.text.replace("\n", "")
}),
}
...(省略)
"'Hello, Delete App.'"のprint文を追加し、レスポンスのmessageを"hello delete world"にします。
ビルドして、ローカル環境で実行してみます。
ビルド
bash-3.2$ sam build --use-container
Starting Build inside a container
...(省略)
Build Succeeded
Built Artifacts : .aws-sam/build
Built Template : .aws-sam/build/template.yaml
Commands you can use next
=========================
[*] Invoke Function: sam local invoke
[*] Deploy: sam deploy --guided
Running PythonPipBuilder:ResolveDependencies
Running PythonPipBuilder:CopySource
ローカル実行
bash-3.2$ sam local invoke
Invoking app.lambda_handler (python3.9)
Skip pulling image and use local one: public.ecr.aws/sam/emulation-python3.9:rapid-1.29.0.
...(省略)
START RequestId: 842d237e-9135-4c94-8b2e-04249b73a9c4 Version: $LATEST
Hello, Delete App.
END RequestId: 842d237e-9135-4c94-8b2e-04249b73a9c4
REPORT RequestId: 842d237e-9135-4c94-8b2e-04249b73a9c4 Init Duration: 1.15 ms Duration: 510.01 ms Billed Duration: 600 ms Memory Size: 128 MB Max Memory Used: 128 MB
{"statusCode": 200, "body": "{\"message\": \"hello delete world\"}"}
print文が出力されていることと、レスポンスのmessageが確認できました。
デプロイ
ローカルでの確認ができたのでAWS環境にデプロイします。
bash-3.2$ sam deploy --guided
Configuring SAM deploy
======================
...(省略)
Deploying with following values
===============================
Stack name : sam-delete-app
Region : ap-northeast-1
Confirm changeset : True
Deployment s3 bucket : aws-sam-cli-managed-default-samclisourcebucket-1u6sf62cgex0g
Capabilities : ["CAPABILITY_IAM"]
Parameter overrides : {}
Signing Profiles : {}
...(省略)
Changeset created successfully.
...(省略)
Successfully created/updated stack - sam-delete-app in ap-northeast-1
AWSリソースが新規追加されて、デプロイが正常終了しました。
マネージメントコンソール上でもCloudFormationスタックが追加されていることを確認できます。
デプロイされたAPI Gatewayのエンドポイントにアクセスすると正常にレスポンスが返ってくることが確認できました。
deleteコマンドの実行
それでは今回のメインイベント、deleteコマンドの実行です。
bash-3.2$ sam delete
Are you sure you want to delete the stack sam-delete-app in the region ap-northeast-1 ? [y/N]: y
Are you sure you want to delete the folder sam-delete-app in S3 which contains the artifacts? [y/N]: y
- Deleting S3 object with key sam-delete-app/365fa63208501ce39bac43c73f594399
- Deleting S3 object with key sam-delete-app/5df97803a6e24d8f9a601f3c9c383ab2.template
- Deleting Cloudformation stack sam-delete-app
スタックの削除とS3上のファイルの削除をしてよいか聞かれるので「y」で答えると削除が実行されます。
デプロイした全てのリソースが削除されていることが確認できました。
※Lambdaのログ(CloudWatch Logsのロググループは残ってしまうようなので必要に応じて削除してください)
まとめ
今までCloudFormationのスタックから削除を実行していたのですが、deleteコマンドで削除ができるようになったことで簡単に削除ができるようになりました。
よかったよかった