どうもこんにちは。
今回は、以下の記事で書いたAWS SAMの使い方に付随して、AWS Applidation Composerの使い方についてまとめます。
↓アイコンはこれ(クラスメソッドさんの記事から拝借させていただきました。)↓
Application Composerとは?
AWS Application Composer というツールを使用すると、AWS SAMで核となるtemplate.yml
をGUI上で作成することができるそうです。これは、VScodeの拡張機能AWS Toolkit for visual studio code
をインストールすることで使用することができます。もちろん、AWSマネジメントコンソール上でも使用できます。
今回はせっかくなので、VScodeで使用してみます。
また、Application Composer自体は無料で使用することができます。
前提条件
AWS SAM CLIのインストール方法はこちらで説明をしています。
また、sam init
コマンドでサーバーレスアプリケーションのプロジェクトを作成している前提でお話を進めます。
使い方
1. template.ymlをApplication Composerで開く
template.yml
を右クリックすると、下の方に「Open with Application Composer」というメニューが出てくるので、クリックします。
2. Canvasが開く
そうすると、Application ComposerのCanvasが開きます。(画面かっちょいい)
3. ポチポチやってみよう!
雑な説明ですが、この手のツールの操作方法は触ってみるのが一番早いです。
3-1. API Gatewayにメソッド追加/削除
対象のAPI Gatewayをクリックして、「詳細」をクリックします。
「ルートを追加」をクリックして、メソッドとパスを入力して「保存」をクリックします。
保存するとルートが増えます。
3-2. 追加したルートに新しいLambda関数を紐づける
左から「Lambda関数」という要素を右にドラッグして、API Gatewayのbyeメソッドと線で繋ぎます。
3-3. template.ymlを確認
template.ymlを確認してみると、ByeByeFunc
が追加されていると思います。
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: |
sam-test-01
Sample SAM Template for sam-test-01
# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
Function:
Timeout: 10
MemorySize: 128
# You can add LoggingConfig parameters such as the Logformat, Log Group, and SystemLogLevel or ApplicationLogLevel. Learn more here https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html#sam-function-loggingconfig.
LoggingConfig:
LogFormat: JSON
Resources:
SamTestFunc:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: hello_world/
Handler: app.lambda_handler
Runtime: python3.12
Architectures:
- x86_64
Events:
HelloWorld:
Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
Properties:
Path: /hello
Method: get
ByeByeFunc:
Type: AWS::Serverless::Function
Properties:
Description: !Sub
- Stack ${AWS::StackName} Function ${ResourceName}
- ResourceName: ByeByeFunc
CodeUri: src/Function
Handler: handler.handler
Runtime: python3.12
MemorySize: 3008
Timeout: 5
Tracing: Active
Events:
ServerlessRestApiGETbye:
Type: Api
Properties:
Path: /bye
Method: GET
ByeByeFuncLogGroup:
Type: AWS::Logs::LogGroup
DeletionPolicy: Retain
Properties:
LogGroupName: !Sub /aws/lambda/${ByeByeFunc}
Outputs:
# ServerlessRestApi is an implicit API created out of Events key under Serverless::Function
# Find out more about other implicit resources you can reference within SAM
# https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api
HelloWorldApi:
Description: API Gateway endpoint URL for Prod stage for Hello World function
Value: !Sub https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/
SamTestFunc:
Description: Hello World Lambda Function ARN
Value: !GetAtt SamTestFunc.Arn
SamTestFuncIamRole:
Description: Implicit IAM Role created for Hello World function
Value: !GetAtt SamTestFuncRole.Arn
ちょっとすごすぎ...
Application Composerの方でLambdaの関数をlambda_handler
に変えたら、template.yml
の記述も変りました。ただ、プロジェクト内に作成されたファイルの名称までは変わらないようですね。
だとしても十分すぎる機能ではないでしょうか?
これ、会議の中でアーキテクチャ考えるのにも使えますよね!