re:Invent 2022 が終わり、日本に無事帰国しましたが、疲労が完全回復していない人です。
12/2 Werner Vogels氏 の Keynote で発表された AWS Application Composer、早速ですが試してみました。
現状は Public Preview なので、GA するまでにアップデートがあると思いますが、とりあえず現段階で試してみて、その感想です。
Demo をやってみる
AWS Application Composer のコンソールで Open Demo をクリックして、Demo 画面を起動します。
ダイアログが出てきます。
PC 上のローカルディレクトリを指定することで、コンソールでの変更が同期されます。
Create ボタンを押すと、色々ポップアップが出てくるので、この辺 OK にします。Mac&Chrome だけかな?
なお、ローカル同期に対応していない Firefox だと、こうなります。
Demo だとこんな感じの Amazon API Gateway – AWS Lambda -> Amazon DynamoDB のアプリケーションになります。
Lambda のところをクリックすると、こんな感じの設定画面が出てきます。
API Gateway はこんな感じです。
同期設定すると、ローカルにファイルが生成されています。
さて、このファイル群をどうするかですが、答えは生成された README.md に書いてあります。
ということで、AWS SAM で Build して Deploy してみます。
完了したら、API Endpoint ができているはずなので、API Gateway のコンソールで確認します。
(Deploy 終了時に Output で出てきてくれるといいですね。FeedBack しますかね。※テンプレート直せよ説あり)
あとは、README.md に書いてあるように、POST リクエストを送って、データを登録して、GET してみます。
wada4:demo wada$ curl -d '{"type": "Car", "color": "Blue"}' https://vbox2cdt2a.execute-api.us-east-1.amazonaws.com/Prod/items wada4:demo wada$ curl -d '{"type": "Animal", "name": "Giraffe"}' https://vbox2cdt2a.execute-api.us-east-1.amazonaws.com/Prod/items wada4:demo wada$ curl -d '{"type": "Product", "name": "AWS Application Composer", "favorite": true}' https://vbox2cdt2a.execute-api.us-east-1.amazonaws.com/Prod/items wada4:demo wada$ curl https://vbox2cdt2a.execute-api.us-east-1.amazonaws.com/Prod/items {"ids":[{"S":"8ad3751a-3aaa-42a8-a7fa-e2a67102bba4"},{"S":"5606ab7e-6943-4dc7-8507-d2dd9e1409a8"},{"S":"2fd5a68c-0729-47ae-82f3-4510e6190372"}]}
DynamoDB のテーブルを見ると、Post されたデータが登録されているのがわかります。
一通り、Demo で作ったアプリケーションの動作確認まで終わりました。
Blogの内容で作ってみる
次は、リリース時の Blog に沿ってやってみます。
最初の方は、基本一緒で、Local と同期するかどうかの選択になります。
「New blank project」を選んだ場合は、template.yaml が存在しないディレクトリを選ばないとエラーになりますのでご注意ください。
なお、「Load existing project」を選んで、以前同期したディレクトリを選択して、そこにある template.yaml を選ぶと復元できます。
Blog に沿って、リソースを配置してみましょう。
最終形はこんな感じになります。
Lambda 関数用のコードは生成してくれますが、中身はほぼ空の関数でした。
流石に Demo と違い作ってくれないので、実装が必要ですね。
なお、Lambda の Source path を途中で変更すると、変更前の Source path がそのまま残るようです。
削除もしくはリネームしてくれると嬉しいな・・・は望みすぎでしょうか?
wada4:sample wada$ tree . ├── samconfig.toml ├── src │ ├── Function │ │ ├── index.js │ │ └── package.json │ ├── Function2 │ │ ├── index.js │ │ └── package.json │ ├── evaluate-code │ │ ├── index.js │ │ └── package.json │ └── send-to-invoice │ ├── index.js │ └── package.json └── template.yaml
生成された template.yaml の中身はこんな感じになります。
xray の設定等も自動で入っています。
Transform: AWS::Serverless-2016-10-31 Resources: Api: Type: AWS::Serverless::Api Properties: Name: !Sub - ${ResourceName} From Stack ${AWS::StackName} - ResourceName: Api StageName: Prod DefinitionBody: openapi: '3.0' info: {} paths: /: post: x-amazon-apigateway-integration: httpMethod: POST type: aws_proxy uri: !Sub arn:${AWS::Partition}:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${EvaluateCode.Arn}/invocations responses: {} EndpointConfiguration: REGIONAL TracingEnabled: true EvaluateCode: Type: AWS::Serverless::Function Properties: Description: !Sub - Stack ${AWS::StackName} Function ${ResourceName} - ResourceName: EvaluateCode CodeUri: src/evaluate-code Handler: index.handler Runtime: nodejs18.x MemorySize: 3008 Timeout: 30 Tracing: Active Events: ApiPOST: Type: Api Properties: Path: / Method: POST RestApiId: !Ref Api Environment: Variables: TABLE_NAME: !Ref CodesTable TABLE_ARN: !GetAtt CodesTable.Arn QUEUE_NAME: !GetAtt CodesQueue.QueueName QUEUE_ARN: !GetAtt CodesQueue.Arn QUEUE_URL: !Ref CodesQueue Policies: - DynamoDBCrudPolicy: TableName: !Ref CodesTable - SQSSendMessagePolicy: QueueName: !GetAtt CodesQueue.QueueName EvaluateCodeLogGroup: Type: AWS::Logs::LogGroup DeletionPolicy: Retain Properties: LogGroupName: !Sub /aws/lambda/${EvaluateCode} CodesTable: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: id AttributeType: S BillingMode: PAY_PER_REQUEST KeySchema: - AttributeName: id KeyType: HASH StreamSpecification: StreamViewType: NEW_AND_OLD_IMAGES CodesQueue: Type: AWS::SQS::Queue Properties: MessageRetentionPeriod: 345600 SendToInvoice: Type: AWS::Serverless::Function Properties: Description: !Sub - Stack ${AWS::StackName} Function ${ResourceName} - ResourceName: SendToInvoice CodeUri: src/send-to-invoice Handler: index.handler Runtime: nodejs18.x MemorySize: 256 Timeout: 30 Tracing: Active Events: CodesQueue: Type: SQS Properties: Queue: !GetAtt CodesQueue.Arn BatchSize: 1 SendToInvoiceLogGroup: Type: AWS::Logs::LogGroup DeletionPolicy: Retain Properties: LogGroupName: !Sub /aws/lambda/${SendToInvoice} Metadata: AWS::Composer::Groups: Group: Label: group Members: - CodesTable - CodesQueue
今回は、試してみるという観点から、Lambda のコードは作らず、このまま、AWS SAM で Build->Deploy を実施しましたが、特に問題なく Deploy まで完了しました。
まとめ
- 自分みたいな CloudFormation のテンプレートファイルを手で書くなんてできない!という人向けかな。
・AWS CDK あるからいいだろうと思ったりもする。 - 現状はローカルに生成されたコード、テンプレートファイルを AWS SAM で Build して Deploy する流れなので、コンソール上で Deploy までできちゃうと本当に Quickly なのではと思いました。
・現段階ではなかなか難しそうですが。 - Demo だと、AWS Lambda の関数のコードも生成されるけれど、通常だと空の Lambda 関数のコードが出力されるだけなので、結局そこの実装は必要らしい。
・無論、Lambda を挟まないアプリケーションであれば不要なんですが・・・。 - Demo が進化して、BluePrint として、いくつかの実装パターンが選べて、必要に応じて Lambda のコードも出てくるようになったらといいんじゃないかなって思う。
- ふと触ってみて、色々思ったので、FeedBack してみるのもありかな。と思っています。
・re:Invent で AWS Application Composer のセッション出たのですが、FeedBack ページから FeedBack してくれよって言っていたと思います。
・AWS CDK 対応も FeedBack に入れてね!っていう話が流れていたような・・・。
という感じで、Public Preview なので、どういう進化を遂げるかわかりませんが、なかなか面白い、ちょっとしたものを作るのには便利になりそうなサービスなんじゃないかと思います。
とりあえずやってみたので、もうちょっと色々作ってみようかなと思います。
アイレットなら、AWS で稼働するサーバーを対象とした監視・運用・保守における煩わしい作業をすべて一括して対応し、経験豊富なプロフェッショナルが最適なシステム環境を実現いたします。AWS プレミアティアサービスパートナーであるアイレットに、ぜひお任せください。
その他のサービスについてのお問合せ、お見積り依頼は下記フォームよりお気軽にご相談ください。
https://www.iret.co.jp/contact/service/form/