はじめに
こんにちは、クラウド事業部のおほりです。
皆さんは
マウスポチポチだけでIaC出来たら良いのにな...
と思ったことはありませんか?私もそう思います。 一応 CloudFormation Designer という GUI ツールはあるのですが、いまいちイケてないです(サービスアイコンもちょっと古いですね...)
しかし最近になって Application Composer なるツールが GA になりました。
こちらのツールと SAM CLI を組み合わせれば、ゼロから爆速でサーバレスアプリケーションを立ち上げることが出来ます。
やってみよう
SAM で init する
sam init
コマンドで適当なひな形"hello-world-example"を生成します。
$ sam init You can preselect a particular runtime or package type when using the `sam init` experience. Call `sam init --help` to learn more. 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 ...(省略)... ----------------------- Generating application: ----------------------- Name: sam-app Runtime: python3.9 Architectures: x86_64 Dependency Manager: pip Application Template: hello-world Output Directory: . Configuration file: sam-app/samconfig.toml
sam-app/
ディレクトリが生成されテンプレートやSAMの設定ファイル、Lambda関数用のコードなどが格納されました。
$ ls -la sam-app/ total 48 drwxr-xr-x 6 vscode vscode 4096 Mar 20 03:04 . drwxr-xr-x 4 vscode vscode 4096 Mar 20 03:00 .. drwxr-xr-x 2 vscode vscode 4096 Mar 20 03:00 events -rw-r--r-- 1 vscode vscode 3730 Mar 20 03:00 .gitignore drwxr-xr-x 2 vscode vscode 4096 Mar 20 03:00 hello_world -rw-r--r-- 1 vscode vscode 0 Mar 20 03:00 __init__.py -rw-r--r-- 1 vscode vscode 8349 Mar 20 03:00 README.md -rw-r--r-- 1 vscode vscode 836 Mar 20 03:00 samconfig.toml -rw-r--r-- 1 vscode vscode 1570 Mar 20 03:02 template.yaml -rw-r--r-- 1 vscode vscode 0 Mar 20 03:04 template.yaml:Zone.Identifier drwxr-xr-x 4 vscode vscode 4096 Mar 20 03:00 tests
資材を Application Composer で開く
Application Composer はローカルのファイルの読み書きができます(接続モード)
先ほど生成した sam-app/
ディレクトリを選択して読み込ませます。
SAMテンプレートの内容が可視化されました!
未対応リソースについては「読み取り専用リソース」と表示され、編集はできないようです。
Application Composer で編集する
おもむろにDynamoDBテーブルを追加して、Lambdaと線でつなげてみます。
さらにパーティションキーを変更します。基本的なプロパティは右のメニューから変更できるようです。
ローカルにあるテンプレートを見てみると、きちんとDynamoDBテーブルが追加されています。
拡張性を考慮してか、リソースタイプは AWS::Serverless::SimpleTable ではなく AWS::DynamoDB::Table になるようです。
... Table: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: hello AttributeType: S BillingMode: PAY_PER_REQUEST KeySchema: - AttributeName: hello KeyType: HASH StreamSpecification: StreamViewType: NEW_AND_OLD_IMAGES ...
Lambda関数の定義を見ると、ポリシーテンプレート DynamoDBCrudPolicy (Read/Writeを許可する)が設定されていました。IAMロールを書かなくても、DynamoDBテーブルにアクセスできるようSAMがよしなに生成してくれます。 さらに、DynamoDBテーブルの情報(テーブル名とARN)が環境変数として設定されていました!権限回りの設定だけでなく、アクセス時に必要な情報を揃えておいてくれるなんて、至れり尽くせりですね。
... HelloWorldFunction: Type: AWS::Serverless::Function Properties: CodeUri: hello_world/ Handler: app.lambda_handler Runtime: python3.9 Architectures: - x86_64 Events: HelloWorld: Type: Api Properties: Path: /hello Method: get Environment: Variables: TABLE_NAME: !Ref Table TABLE_ARN: !GetAtt Table.Arn Policies: - DynamoDBCrudPolicy: TableName: !Ref Table ...
ビルドしてみる
最後に sam build
コマンドで資材をビルドしてみます。
$ sam build --use-container Starting Build use cache Starting Build inside a container Cache is invalid, running build and copying resources for following functions (HelloWorldFunction) Building codeuri: /workspaces/work/sam-app/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction Fetching public.ecr.aws/sam/build-python3.9:latest-x86_64 Docker container image....................................................................................................................................................................................................................................................................................................................................................................... Mounting /workspaces/work/sam-app/hello_world as /tmp/samcli/source:ro,delegated inside runtime container Running PythonPipBuilder:ResolveDependencies Running PythonPipBuilder:CopySource Build Succeeded
テンプレートに異常はなく、無事ビルド成功しました。このままsam deploy
を実行すればAWS上にデプロイされます。
まとめ
SAM CLI と Application Composer を組み合わせることでコードを書かずにSAMテンプレートを作成・カスタマイズすることができました!
今回のような簡単な構成であれば、ものの5分で立ち上げることができます。
Application Composer はまだ未対応リソースが多いですが、今後の拡充を期待しています。(StepFunctionsのように)
おわりに
私達クラウド事業部はAWSなどのクラウド技術を活用したSI/SESのご支援をしております。
https://www.ap-com.co.jp/service/utilize-aws/
また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。