この記事は AWS Community Builders Advent Calendar 2022 3日目の記事です。
※AWS Community Buildersについてはこちらをご覧ください。
AWS re:Invent 2022にて昨日未明、アマゾンのCTOワーナー氏の基調講演が大変盛り上がりました。
恒例の茶番劇(失礼w)から始まり、主にサーバーレス系の新機能がもりもりお披露目。
中でも今回は、注目を集めた AWS Application Composer を軽く紹介しつつ実際に触ってみます!
未来を感じる新機能「Application Composer」
簡単に言うと、 「キャンバス風のGUIでAWSサービスアイコンをポチポチ動かして、アーキテクチャ図をお絵描きするだけで実際のアプリケーション用リソースが構築&管理できてしまう」 というビックリ機能です。
上記AWS Newsブログのほか、クラスメソッドさんも分かりやすい日本語記事を書いてくれているので是非ご覧ください。
実際に使ってみる
すでに東京リージョン含め、プレビュー版が提供されています。
マネコンから検索すると出てきました。
Application Composerコンソールのトップ画面。
Create project
してみます。
プロジェクト作成画面。
作業端末のローカルフォルダーを自動同期してくれる「Local file system connection mode」なる設定があるようです。今回はオフにしておきます。
こんなキャンバス風の専用コンソールが出現します。
右上にクイックツアーも表示してくれます。
よくあるSPAなWebアプリでも作ってみましょうか。
左ペインからS3バケットをドラッグ&ドロップして、右ペインで設定を入れます。ホスティング機能を有効にしました。
こんな感じで、REST APIベースのサーバーレス構成を組んでみました。
右上の Menu
から Save Changes
すると、ローカル端末上にYAMLファイルを保存できます。
これを使ってSAM CLIで実際のリソースをデプロイしてね、という使い方のようです。
ちなみにYAMLの中身は以下のようになっていました。
Resources:
WebServer01:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub ${AWS::StackName}-webserver-${AWS::AccountId}
WebsiteConfiguration:
IndexDocument: index.html
BFF:
Type: AWS::Serverless::Api
Properties:
Name: !Sub
- ${ResourceName} From Stack ${AWS::StackName}
- ResourceName: BFF
StageName: Prod
DefinitionBody:
openapi: '3.0'
info: {}
paths:
/:
get:
x-amazon-apigateway-integration:
httpMethod: POST
type: aws_proxy
uri: !Sub arn:${AWS::Partition}:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${API.Arn}/invocations
responses: {}
EndpointConfiguration: REGIONAL
TracingEnabled: true
Auth:
Authorizers:
Auth:
UserPoolArn: !GetAtt Auth.Arn
API:
Type: AWS::Serverless::Function
Properties:
Description: !Sub
- Stack ${AWS::StackName} Function ${ResourceName}
- ResourceName: API
CodeUri: src/Function
Handler: index.handler
Runtime: nodejs16.x
MemorySize: 3008
Timeout: 30
Tracing: Active
Events:
BFFGET:
Type: Api
Properties:
Path: /
Method: GET
RestApiId: !Ref BFF
Environment:
Variables:
TABLE_NAME: !Ref DB
TABLE_ARN: !GetAtt DB.Arn
Policies:
- DynamoDBCrudPolicy:
TableName: !Ref DB
APILogGroup:
Type: AWS::Logs::LogGroup
DeletionPolicy: Retain
Properties:
LogGroupName: !Sub /aws/lambda/${API}
DB:
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
Auth:
Type: AWS::Cognito::UserPool
Properties:
AdminCreateUserConfig:
AllowAdminCreateUserOnly: false
AliasAttributes:
- email
- preferred_username
UserPoolName: !Sub ${AWS::StackName}-Auth
Transform: AWS::Serverless-2016-10-31
さすがに開発資源を多少なりとも作り込まないとデプロイは出来ない気がしますが、Cloud9で試してみます。
環境を立ち上げ、先ほどのYAMLを template.yaml
という名前でアップロードして sam build
を実行。ここまでは通ります。
そして sam deploy --guided
を走らせると、案の定「APIがねーよ!」エラーで終了してしまいました。
逆に考えると、あとはアプリケーション資材だけ置いてあげれば、先ほどのキャンバスでお絵描きしたアーキテクチャーをお手軽にデプロイ出来るということですね。これはかなり未来的では!?
まとめ
このApplication Composerで作成できるリソースはまだサーバーレス系が中心ですが、こんな風に様々なAWSリソースをGUIでローコード構築できるようになれば、ますますインフラエンジニアは今後不要になるかも?と思えてしまいます。
今回のre:Inverntでは、他にもインフラレイヤーを抽象化するような新機能がいくつも登場したこともあり、今後のキャリアを色々と考えさせられると同時に、クラウドが描く未来に非常にワクワクしました。
VPCのNWレイヤーを抽象化する 「VPC Lattice」
ECSのサービス間通信を手軽に実現する 「ECSサービスコネクト」