AWS Serverless Application Model

【AWS SAM】LambdaからFSxにサーバレスでアクセスする。

はじめに

この記事ではSAM CLIでテンプレートのビルド~AWSコンパネとFSxと連携しているEC2から動作確認する箇所までを紹介します。

検証環境の構成図

検証に用いるために準備した環境の図になります。

EC2とADはそれぞれWindows Server 2019、Managed MicroSoft ADを使用しています。
EC2をADにドメイン参加させる方法についてはこちらの記事参考にしていただければと思います。
AWS Systems Managerでとてもお手軽なEC2ドメイン参加 | DENET技術ブログ

つくりたい環境の構成図

前提条件

  • 上記にて紹介したEC2, Directory Service(microsoft AD), FSx for Windowsがデプロイされた環境
  • AWS CLI
  • AWS SAM CLI
  • python 3.7.2 (pyenv)
  • Windows 10にて検証

AWS CLI, AWS SAM CLIの導入手順はこちら参考になるかと思います。
【Windows10】AWS CLIを導入してS3のファイルをダウンロードする。

AWS SAM CLI のインストール | AWS Documentation

AWS SAMでLambda SMBクライアント作成

  • AWS SAM CLIが動作すること確認
> sam --version
SAM CLI, version 1.53.0
  • AWSが公開しているサンプルプロジェクトをクローン
> git clone https://github.com/aws-samples/aws-lambda-smb-shares.git
Cloning into 'aws-lambda-smb-shares'...
remote: Enumerating objects: 85, done.
remote: Counting objects: 100% (85/85), done.
remote: Compressing objects: 100% (77/77), done.
Receiving objects:  28% (24/85)used 2 (delta 0), pack-reused 0 eceiving objects:  27% (23/85)
Receiving objects: 100% (85/85), 23.76 KiB | 2.38 MiB/s, done.
Resolving deltas: 100% (28/28), done.
  • クローンしたディレクトリに移動して確認
> cd .\aws-lambda-smb-shares\
aws-lambda-smb-shares> ls

    Directory: D:\aws-lambda-smb-shares

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2022/01/45     00:00                src
-a----        2022/01/45     00:00            313 CODE_OF_CONDUCT.md
-a----        2022/01/45     00:00           3219 CONTRIBUTING.md
-a----        2022/01/45     00:00            942 LICENSE
-a----        2022/01/45     00:00           1413 README.md
-a----        2022/01/45     00:00           6537 templateDotNet.yaml
-a----        2022/01/45     00:00           6997 templatePython.yaml
  • sam build (失敗)
> sam build -t .\aws-lambda-smb-shares\templatePython.yaml
Building layer 'SMBLayer'
Running PythonPipBuilder:CleanUp
Clean up action: .aws-sam\deps\f0cc3764-14f9-489f-b01b-3ec89a62ebf4 does not exist and will be skipped.
Running PythonPipBuilder:ResolveDependencies

Build Failed
Error: PythonPipBuilder:ResolveDependencies - {cryptography==37.0.4(sdist)}

pip install cryptography==37.0.4実行後、再度buildしてみたらできました。

中略
~~
Build Succeeded

Built Artifacts  : .aws-sam\build
Built Template   : .aws-sam\build\template.yaml

Commands you can use next
=========================
[*] Validate SAM template: sam validate
[*] Invoke Function: sam local invoke
[*] Test Function in the Cloud: sam sync --stack-name {stack-name} --watch
[*] Deploy: sam deploy --guided
  • buildしたものをdeploy -gで対話式で設定します。
    vpcやFSxなどのidを入力して進めていきます。
aws-lambda-smb-shares> sam deploy -g

Configuring SAM deploy
======================

        Looking for config file [samconfig.toml] :  Not found

        Setting default arguments for 'sam deploy'
        =========================================
        Stack Name [sam-app]:
  • デプロイされるリソース確認してy

  • デプロイ始まったらこの時点でエラーでなければ適当にほったらかして大丈夫かと思います。

何もなければ構築は完了してるはずです。

動作確認

試しに動かしてみます。

  • SecretManagerにFScredentialsという名前でシークレット作成されていて、Lambdaがこちらを参照するので適当な値設定しておきます。

実行されるコードについてはこちらを参照いただければと思います。
GitHub | aws-lambda-smb-shares/src/pythonSMB/function/lambda_function.py

  • 作成されたLambdaに動作確認用のテストイベントを作成

  • 実行結果

ファイル生成されてLambdaから書き込みされていました。

おわりに

この記事では、構成図の環境に対してAWSのGitHubにて公開されているLambda SMBクライアントをデプロイできるテンプレートをAWS SAM CLIを利用して構築しました。

この記事のどこかしら何かしらが参考になれば幸いです。

参考にさせて頂いた記事

https://aws.amazon.com/jp/blogs/storage/enabling-smb-access-for-serverless-workloads/

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA