5

私はリアクションフロントエンドを備えた典型的なCRUDサーバーレスインフラストラクチャを作成する優れたガイド()に従ってきました。 AWSにはServerless Frameworkが使用されています。サーバレスフレームワーク:完全な「インフラストラクチャとしてのインフラストラクチャ」を実現する方法は?

私が気に入らないのは、セットアップをブートストラップするためには、GUI(主にAmazonのコンソールインターフェイス)を手動でクリックすることです。私。セットアップはバージョン管理されておらず、容易に再現できません。

  • AWS Cognitoユーザープール
  • AWS Cogniteユーザーのプールアプリケーション
  • AWS:次のリソースを手動で設定する必要があります。この例では、CI/CDプロセスなどでそれを拡張することは容易ではありませんCognitoフェデレーションIDプール
  • AWS DynamoDBのインスタンス
  • AWS S3バケット(X3)(これもfrontendをホスト)
  • AWS CloudFrontの分布
  • AWS Route53ゾーンファイル

は、コードから構築されている唯一のリソースは、サーバーレス機能(ラムダ)自分自身だけでなく、APIゲートウェイインスタンスです。これは、サーバレスフレームワークがファイルserverless.ymlを使用して行うものです。しかし、上記のリソースはすべてで、は自動的に作成されません。 ARNを使用してreferenced toにする必要がある場合もありますが、serverless.yml設定では作成されていません。このようなシステムを本番環境で実行すると(GUIを使用した手動によるサービス作成に大きく依存している)、危険に見えるでしょう。

私は、このソリューションがTerraformまたはCloudformを使用することになると考えていました。しかし、Serverless Framework自体は、Lambdaのセットアップに既にCloudformを使用していますが、他のリソースでは使用できません。だからこのギャップをどのように排除するのだろうか?言い換えれば、コード内でServerless Stackに記載されているセットアップ全体をどのように再構築するのでしょうか?

CloudFormationにServerlessを設定するのは、奇妙に思えるかもしれませんが、おそらく不可能で、ラムダをセットアップする独自のCloudformationテンプレートがあります。 serverless deployで作成する必要がある関数やAPIゲートウェイだけでなく、DynamoDBやCognito User Poolなどの他のリソースを定義するために、Serverless Frameworkを拡張する方が意味があります。すでにこれをやっている人々の例や試みはありますか?

答えて

3

私はこれに関する文書が優れたpull request hereになることに同意します。

serverlessはCloudFormationをフードの下で使用しています。フレームワークは、serverless.ymlresourcesキーを使用して、基盤となるCloudFormationの機械を公開します。

私はthe intent of the frameworkはあなたがregular old CloudFormation syntaxを使用して、あなたのserverless.ymlファイルのresources:セクションで、これらのリソースの残りの部分(Cognitoもの、S3など)を置くということだと思います。

たとえば、このファイルには、サーバーレス機能に加えて、DynamoDBのテーブルとS3バケットを作成します。

service: aws-nodejs # NOTE: update this with your service name 
provider: 
    name: aws 
    runtime: nodejs6.10 
functions: 
    hello: 
    handler: handler.deletecustomer 
    events: 
     - http: 
      path: /deletecustomer 
      method: post 
      cors: true 
resources: 
    Resources: 
    tablenotes: 
     Type: AWS::DynamoDB::Table 
     Properties: 
     AttributeDefinitions: 
      - AttributeName: noteId 
      AttributeType: S 
      - AttributeName: userId 
      AttributeType: S 
     KeySchema: 
      - AttributeName: userId 
      KeyType: HASH 
      - AttributeName: noteId 
      KeyType: RANGE 
     ProvisionedThroughput: 
      ReadCapacityUnits: '5' 
      WriteCapacityUnits: '5' 
    mysamplebucket: 
     Type: AWS::S3::Bucket 
     Properties: 
     WebsiteConfiguration: 
      IndexDocument: index.html 
      ErrorDocument: error.html 
     AccessControl: Private 
     VersioningConfiguration: 
      Status: Suspended 

を使用すると、CloudFormationに新しいしている場合、私はまた、CloudFormerでのぞき見を取ってお勧めします。

0

@Mike Patrickのオプションに基づいて、サーバーレスフレームワークや他の同様のサーバーレスフォーカスツールについての理解を深めました。

前述したように、サーバーレスプロジェクトの場合、多くのリソースが必要です。一緒にそれらを組み合わせることは簡単な仕事ではありません。したがって、適切なツールを選択するのは難しいです。

は、サーバレスフレームワークはサーバレスの専門家で、CloudformationTerraformServerless frameworkを比較、Cloudformationとテラフォームは

GPですCloudformationとテラフォーム完全にほとんどのリソースをカバーしInfrastructure as Codeあります。

サーバーレスフレームワークは、主にサーバレスの関連リソースのみのためのCloudformテンプレートを生成するための中間層です。

すべてをCloudformテンプレートに直接書き込むことはできますが、テンプレートファイルは大きく、JSON/Yamlテンプレートで維持するのは難しいです。 serverless.ymlには数ダースのラインがあり、サーバレスフレームワークでは数千または数千の雲列を生成することができます。それは曇りのコードを扱うのに多くの時間を節約します。

サーバレスフレームワークですべてのAWSリソースを扱えるようにすることは意味がありません。他のツールがすでにうまく機能しています。

サーバレスフレームワークはまだ普及しているため、多くの開発者が毎日機能を追加しています。たぶんいつかあなたが必要なものを手に入れることができるかもしれませんが、今やCloudlessやTerraformや他のツールと一緒にサーバーレスフレームワークを混在させなければならないこともあります。

関連する問題