[AWS]samを使用したサーバなしの導入


👉 serverless?


クラウドネイティブ開発モデルは、開発者がサーバを管理することなくappを構築し、実行できるようにします.
serverless(=サーバなし)ですが、実際にはサーバは存在しません.
ただし、Server lessの場合は、アプリケーションの起動時にのみアクティブになります.
つまり、イベントが発生したときにのみリソースが割り当てられ、実行が終了したときにリソースが無効になるため、コストの観点からも効率的になります.

👉 SAM

SAMは、Serverless Application Modelの略であり、awsが提供するサーバレスアプリケーションを作成するためのリソースの1つである.
lambdaを使用して配置する場合にCloudFormationを使用すると、配置するサービスに比べてCloudFormationは膨大であり、SAMはこれらのCloudFormationを簡単にすることができ、web開発にのみ使用することができる.
生成しやすいが、欠点は多くの制限があることだ.
api gatewayとlambdaを個別に作成し、それらを接続して同じ機能を実現できますが、SAMを使用すると同時に作成と接続が可能になるため、より簡単に実現できます.
端末でSAMを使用するためには、aws-sam-cliをインストールして使用する必要がある.
$> brew tap aws/tap
$> brew install aws-sam-cli

作成▼▼

$> sam init
コマンドでSAMアイテムを生成しようとする場合は、まず生成に使用するtemplateを選択します.

AWSが提供するテンプレートを使用する場合は、使用するテンプレートを選択します.

使用する言語を選択します.

使用するパッケージのタイプを選択します.

プロジェクトに名前を付けるとsam projectが生成されます.

作成が完了すると、次の構造を使用してファイルが作成されます.

その中で重要なファイルはtemplateです.yamlファイルtemplateですyamlにはプロジェクトに関する情報が含まれています.Resourcesの次の表には、ユーザーがアクセスするenpointとアクセス時に実行するlambda関数(handler)がリストされています.
Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: hello_world/
      # 실행되는 lambda handler 함수 지정
      Handler: app.lambda_handler
      Runtime: python3.9
      Architectures:
        - x86_64
      Events:
        HelloWorld:
          # AWS Gateway의 REST API를 생성
          Type: Api
          Properties:
            Path: /hello
            Method: get
実行されるlambda関数(handler)は、CodeUri에 작성된 dir > app.pyファイル内のlambda_handlerという関数です.
関数が存在する디렉토리CodeUriによって記述され、Handler파일명.함수명によってhandler関数が記述される.
lambda_hanlder method 👇
def lambda_handler(event, context):

    return {
        "statusCode": 200,
        "body": json.dumps({
            "message": "hello world",
            # "location": ip.text.replace("\n", "")
        }),
    }

配備9660;▼

$> sam build
まず、上記コマンドを使用してtemplate.yamlの説明に従ってプロジェクトを構築します.
# 최초 수행 시
$> sam deploy --guided

# 이후 수행 시
$> sam deploy
デプロイはdeployコマンドで行います.
初期配置を行うには、--guidedオプションを使用する必要があります.
このオプションを使用すると、プロジェクトのパラメータを設定した後に配置されます.
配置が完了した後に設定されたエンドポイントにアクセスする場合は、handler関数で作成されたように操作できます.
SAMのスタックは配置が完了し、aws console > CloudFormation > stackで見つけることができます.
Lambda関数はaws console > Lambda > Functionsで決定できる.

削除▼▼▼

$> sam delete
生成されたSAMはdeleteコマンドによって簡単に削除することができる.