ガンバラナイ

AWS Application Composerを試してみた

2023-03-10

技術BLOG

AWS

AWS Application Composerを試してみた

AWS Application Composerを試してみました。
いくつか躓いた箇所があったのでまとめておきます。

AWS Application Composerとは

API Gateway,Lambda,S3,DynamoDBなどを使った、サーバーレスアプリの構成を、ビジュアルで分かりやすく簡単に作成するツールです。

使ってみた

この辺りを参考に、サーバーレスアプリの設計図っぽいものをドラッグアンドドロップで作っていきます。

自分は簡単に、「API Gatewayに画像データをPOSTするとLambdaでS3にどんどん保存していく」みたいな単純なものを作ってみました。

AWS Application Composer

これだけで、これらのサービスを構築するのに必要な設定やファイルのひな形が作成されます。
簡単です!!

あとは、ひな形ができているLambdaのコードを書いたりしていきます。

ここまでは、Application Composerで簡単に出来ましたが、この後のビルドとデプロイはコマンドを打っていきます。

sam build
sam deploy -g

この2つのコマンドを実行するだけなのですが、AWSに慣れていないせいかいくつかハマりました。

ハマりポイント

AWS CLIのインストール

AWS SAM CLIだけでなく、AWS CLIもインストールする必要がある。

sam deployするのにいろいろ権限が必要

sam deployするための権限を持ったユーザーをIAMで作成し、そのユーザーのアクセスキーなどをaws configureで設定する必要があります。

必要な権限は、

  • AWSCloudFormationFullAccess
  • IAMFullAccess
  • CloudWatchFullAccess

あと、使うサービスに必要な権限。今回の場合は、

  • AmazonAPIGatewayAdministrator
  • AWSLambda_FullAccess
  • AmazonS3FullAccess

API Gateway —> Lamda間が、Proxy設定になる

Application Composerを使わずにAPI Gatewayを使ったときは、POSTした内容がそのままLamdaの関数にわたっていました。
Application Composerを使うと、Proxy設定になるようで、POSTしたデータ以外にもいろいろLamda関数にわたります。その中のbody要素がPOSTしたデータでした。

この設定はGUIでは変更できないようです。
(template.yamlファイルを修正すれば変更できそうです)

良かったこと

  1. GUIでわかりやすくサービスをつなげられる。
    後で見てもわかりやすく、人に伝えるのにも良い。
  2. ローカル上のファイルの変更を検知して差分ビルド&デプロイしてくれる。
    $ sam sync --watch --stack-name sam-app
    とコマンドを打っておくと、ローカルのファイル変更を検出して勝手にやってくれる。
    lamdaのプログラム変更とかすごく楽!
  3. ひとまとまりのサービス全体をリポジトリで管理できそう!

追加設定

S3を公開設定にする

template.yamlを以下のように変更、追加して、S3のファイルを外部公開できるようになりました。

  Bucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Sub ${AWS::StackName}-bucket-${AWS::AccountId}
      WebsiteConfiguration:
        IndexDocument: index.html
  BucketPolicy:
    Type: AWS::S3::BucketPolicy
    Properties:
      Bucket: !Ref Bucket
      PolicyDocument:
        Version: 2012-10-17
        Statement:
          Sid: PublicReadGetObject
          Action:
            - s3:GetObject
          Effect: Allow
          Principal: '*'
          Resource: !Join
            - ''
            - - 'arn:aws:s3:::'
              - !Ref Bucket
              - /*