もっと詳しく

AWS SAMとも呼ばれるAWSサーバーレスアプリケーションモデルは、サーバーレスアプリケーションをすばやく簡単に構築できるオープンソースフレームワークです。 このガイド全体を通して、AWS SAMの利点とその仕組みについて、完全に機能する例を含めて説明します。 カバーすることがたくさんあるので、始めましょう!

GrahamBeerによる最新の投稿 (すべてを見る)

なぜAWSサーバーレスアプリケーションモデルなのですか? ^

AWSサーバーレスアプリケーションモデルは、他の多くのAWSリソースと統合して、サーバーレスアプリケーションの構築を容易にします。 AWS Cloud 9を使用すると、AWS SAMCLIおよびAWSCLI(特に)がプリインストールされた完全に機能するIDEを使用できます。 CodeBuild、CodeDeploy、およびCodePipelineを使用すると、安全なデプロイメントパイプラインを構築するためのメカニズムが提供されます。

AWSSAMはAWSCloudFormationの拡張であり、Pythonベースです。 SAMテンプレート内でCloudFormationを使用して追加のリソースを定義できます。 実際、テンプレートや組み込み関数など、CloudFormationで使用できるものはすべてSAMで使用できます。 注意すべきもう1つの領域は、ローカルのデバッグとテストです。 次のような多くの一般的なIDEで利用できるツールキットがあります。 VSCode、デバッグ、テスト、および展開を容易にするのに役立ちます。

Cloud9を使用してAWSSAMを使用する ^

AWS SAMについて話すだけでなく、私たちが何を扱っているのかを理解し始めましょう。 このデモではCloud9を使用して、ソフトウェアをローカルにダウンロードしてインストールするのではなく、完全に機能する環境を構築します。

AWSのCloud9は、基盤となるEC2インスタンス上に構築されたコードを記述、実行、デバッグするためのIDEです。 これが以前に行ったことのない場合は、 AWSによる入門ガイド

このデモのプロジェクトでは、AWSSAMの こんにちは世界 テンプレート。 The こんにちは世界 アプリケーションには、AmazonAPIGatewayとLambda関数を使用する基本的なAPIバックエンドがあります。 次に、GETリクエストをAPIゲートウェイに送信して、ラムダを呼び出します。ラムダは、メッセージとIPアドレスを返します。

取り入れて見るべきことがたくさんあるので、ここから始めるのが良いでしょう。

IDEから、次のように入力します sam init。 これにより、サーバーレスアプリケーションがAWSSAMテンプレートで初期化されます。

はじめにsaminit

はじめにsaminit

に引数を渡すことができます sam init メニューオプションの一部またはすべてをスキップするコマンド。 見てください ここ いくつかの例を参照してください。

AWS SAMは、次の情報を提供するように求めます。

SAMオプションを確認する

SAMオプションを確認する

このデモのソーステンプレートは次のようになります AWSクイックスタートテンプレート、オプション1を選択します。次に、アプリをパッケージ化する方法を尋ねられます。zipファイルまたはAmazon Elastic Container Registryサービス(ECRとも呼ばれます)にアップロードされた画像のいずれかです。 zipパッケージオプションを選択します。 Lambdaで使用できるランタイムのリストが表示されます。 選びます 行け。 ランタイムを選択したら、プロジェクト名を追加する必要があります。

最後に、 HelloWorldの例 セットアップを完了します。

まとめで完了

まとめで完了

プロジェクトが初期化されると、フォルダー構造は次のようになります。

AWSSAMプロジェクトの構造

AWSSAMプロジェクトの構造

重要な領域は、メインコードを含むアプリケーション(hello-world)にちなんで名付けられたフォルダーと template.yaml、アプリケーションのAWSリソースを定義します。

コード ^

The main.go SAMプロジェクトによって生成されたファイルには、次のものが含まれています。

package main
import (
	"errors"
	"fmt"
	"io/ioutil"
	"net/http"

	"github.com/aws/aws-lambda-go/events"
	"github.com/aws/aws-lambda-go/lambda"
)

var (
	// DefaultHTTPGetAddress Default Address
	DefaultHTTPGetAddress = "https://checkip.amazonaws.com"

	// ErrNoIP No IP found in response
	ErrNoIP = errors.New("No IP in HTTP response")

	// ErrNon200Response non 200 status code in response
	ErrNon200Response = errors.New("Non 200 Response found")
)

func handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
	resp, err := http.Get(DefaultHTTPGetAddress)
	if err != nil {
		return events.APIGatewayProxyResponse{}, err
	}

	if resp.StatusCode != 200 {
		return events.APIGatewayProxyResponse{}, ErrNon200Response
	}

	ip, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		return events.APIGatewayProxyResponse{}, err
	}

	if len(ip) == 0 {
		return events.APIGatewayProxyResponse{}, ErrNoIP
	}

	return events.APIGatewayProxyResponse{
		Body:       fmt.Sprintf("Hello, %v", string(ip)),
		StatusCode: 200,
	}, nil
}

func main() {
	lambda.Start(handler)
}

コード例には、単純なものが含まれています ハンドラ のメッセージを返す関数 こんにちは 成功した場合はIPアドレスと一緒に。 次の形式でいくつかのエラーチェックがあります もしも 失敗したリターンを処理するステートメント。

Template.yaml ^

見つめている template.yaml、あなたはそれが典型的なCloudFormationテンプレートのように見えると誤って考えるかもしれません、そしてあなたは正しいでしょう。 AWS SAMテンプレートはCloudFormationテンプレートに厳密に従いますが、いくつかの違いがあります。 以下は、私たちのプロジェクトのテンプレートです。

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  hello-sam

  Sample SAM Template for hello-sam

# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
  Function:
    Timeout: 5

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Properties:
      CodeUri: hello-world/
      Handler: hello-world
      Runtime: go1.x
      Architectures:
        - x86_64
      Tracing: Active # https://docs.aws.amazon.com/lambda/latest/dg/lambda-x-ray.html
      Events:
        CatchAll:
          Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
          Properties:
            Path: /hello
            Method: GET
      Environment: # More info about Env Vars: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#environment-object
        Variables:
          PARAM1: VALUE

Outputs:
  # ServerlessRestApi is an implicit API created out of Events key under Serverless::Function
  # Find out more about other implicit resources you can reference within SAM
  # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api
  HelloWorldAPI:
    Description: "API Gateway endpoint URL for Prod environment for First Function"
    Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/"
  HelloWorldFunction:
    Description: "First Lambda Function ARN"
    Value: !GetAtt HelloWorldFunction.Arn
  HelloWorldFunctionIamRole:
    Description: "Implicit IAM Role created for Hello World function"
    Value: !GetAtt HelloWorldFunctionRole.Arn

最初に気付くのは、宣言変換です。 変換:AWS ::Serverless-2016-10-31、CloudFormationテンプレートをAWSSAMテンプレートとして識別します。

AWSSAMテンプレートには グローバル CloudFormationテンプレートでは使用できないセクション。 ここに、サーバーレスとAPIに共通のプロパティを追加します。 プロパティを定義できます グローバル で使用するセクション 資力 セクション。

The リソース セクションには、CloudFormationおよびSAMからのリソースを含めることができます。 Samには、AWSSAMテンプレートプロパティに5つの特別なリソースがあります。

  • AWS :: Serverless :: Function
  • AWS :: Serverless :: Api
  • AWS :: Serverless :: SimpleTable
  • AWS :: Serverless :: LayerVersion
  • AWS :: Serverless :: Application

SAMには パラメータ セクション。 SAMCLIには sam deploy –guided 追加情報の入力をユーザーに求めるコマンド。 オブジェクトを定義できます パラメータ この追加情報の入力をユーザーに求めるセクション。

アプリケーションの構築 ^

サーバーレスアプリケーションをテストまたはデプロイするには、アプリケーションをビルドする必要があります。 アプリケーションを構築するために、 サムビルド 指図。 SAMビルドコマンドは template.yaml、 アプリケーションコード、および依存関係。

あなたが実行すると サムビルド コマンドを実行すると、ランタイムに応じて、以下のスクリーンショットのような出力が表示されます。

sambuildコマンドの実行

sambuildコマンドの実行

ビルドが完了すると、ソースコードは次の場所にあります。 .aws-sam サブディレクトリ。

アプリケーションのテスト ^

アプリケーションをAWSにデプロイする前にテストできます。 AWS SAMは、コマンドを提供します。 サムローカル、Dockerコンテナを使用してアプリケーションを実行します。 使用されるコンテナは、AWSLambdaの実行をシミュレートします。 マシンにDockerをインストールする必要があります。または、私のようにAWS Cloud 9を使用している場合は、Dockerをそのまま使用できます。

から こんにちはサム プロジェクトフォルダに、次のコマンドを入力します。

サムローカル呼び出し

ここでも、以下に示すような出力が表示されます。

samローカルコマンドの呼び出し

samローカルコマンドの呼び出し

ターミナルに表示される最後の行に注意してください。 StatusCodeが200で、最後にメッセージがあります。 こんにちは IPアドレスと一緒に。 これにより、Lambdaアプリケーションが期待どおりに機能していることが確認されます。

これで、展開する準備が整いました。

アプリケーションをAWSにデプロイする ^

アプリケーションが機能していることを確認し、デプロイする準備が整いました。 SAM CLIを使用して、実行できます sam deploy –guided。 SAMは、アプリケーションをデプロイするための引数の入力を求めます。 以下のスクリーンショットは、必要な情報を示しています。

サムはガイド付きスイッチを使用して展開します

サムはガイド付きスイッチを使用して展開します

SAMが必要な情報を取得すると、IAMロールの作成を開始し、zip形式のアプリケーションをS3に移動します。

画面上の展開では、最初にCloudFormationテンプレートが構築するものが表示されます。

展開画面

展開画面

その後、デプロイメントが続行され、Lambdaアプリケーションの構築が開始され、画面に手順とステータスが表示されます。 CloudFormationを使用したことがある場合、この画面は非常に見覚えがあります。

展開完了画面

展開完了画面

CloudFormationであるSAMテンプレートは、コンソールから表示できます。

CloudFormationで表示されるAWSSAMアプリケーション

CloudFormationで表示されるAWSSAMアプリケーション

[テンプレート]タブを表示することは常に興味深いことです。 トグルをに切り替える 処理されたテンプレートを表示 AWSSAMが私たちのためにどれだけのことをしたかを示しています。 SAMテンプレートファイルのサイズは、44行のコードから98行に倍増しました。

AWS CloudFormationでビルドテンプレートを表示できるだけでなく、AWSLambdaコンソールページでLambdaアプリケーションを表示することもできます。

SAMデプロイメントの出力画面またはコンソール内のLambda関数の構成セクションからAPIエンドポイントURLを使用して、ブラウザー内でアプリケーションを使用できます。

アプリケーションにブラウザを使用する

アプリケーションにブラウザを使用する

概要 ^

この記事の目的は、AWSSAMを起動して実行するための優れた基盤を提供することでした。 SAMを使用すると、Lambdaコードに集中して、APIゲートウェイなどの他のリソースを簡単に構築できます。 数行書くだけです。 次に、SAMは構文をCloudFormationに変換および拡張し、アプリケーションをより迅速に構築します。 Dockerコンテナーを介してアプリケーションをテストする機能があると、便利で便利です。

AWSサーバーレスアプリケーションモデルには、さらに多くのことを検討する価値があります。 AWSサーバーレスアプリケーションリポジトリをお勧めします。ここでは、既製のアプリを見つけてデプロイでき、 コードサンプル

The post AWSサーバーレスアプリケーションモデル(AWS SAM)の使用を開始する– 4sysops appeared first on Gamingsym Japan.