本記事では、AWS Lambdaで「DioDocs(ディオドック)」を使用した .NET CoreベースのLambda関数を作成し、ExcelやPDFファイルをAWS S3へ出力する方法について紹介します。
AWS Lambdaとは
AWS LambdaはAmazon Web Serviceで提供されている、各種イベントをトリガーに処理を実行するサーバーレスなクラウドサービスです。
AWS Lambdaは.NET Core 2.1をサポートしており、C#で .NET CoreベースのLambda関数を作成できます。今回はAWS Toolkit for Visual Studioを使用してVisual Studio 2019でLambda関数を作成し、デプロイして確認してみます。
AWS Toolkit for Visual Studioのセットアップ
AWS Toolkit for Visual Studioのインストールと、AWSの認証情報の設定は以下を参考にして準備しておきます。
AWS Toolkit for Visual Studio をセットアップする – AWS Toolkit for Visual Studio
AWS 認証情報を提供する – AWS Toolkit for Visual Studio
Lambda関数で実装する内容
今回実装する内容は非常にシンプルなモノです。まず、DioDocsを使用してExcelとPDFを作成します。その後、作成したExcelとPDFをAmazon S3に保存します。Amazon S3への保存にはAWS SDK for .NETを使用します。
Lambda関数の作成
以下のドキュメントを参考にLambda関数を作成していきます。
チュートリアル: AWS Toolkit for Visual Studio の AWS Lambda プロジェクトを使用する – AWS Toolkit for Visual Studio
Visual Studio 2019でプロジェクトテンプレート「AWS Lambda Project (.NET Core – C#)」を選択して「次へ」をクリックします。
プロジェクト名DDAWSLambda1
を入力して「作成」をクリックします。
AWS Lambda Projectのテンプレートを選択します。Empty Function
を選択して「Finish」をクリックします。
DDAWSLambda1
プロジェクトが作成されます。
NuGetパッケージの追加
Visual Studioの「NuGet パッケージ マネージャー」からAWS SDK for .NET(Amazon S3)AWSSDK.S3
とDioDocsのパッケージGrapeCity.DioDocs.Excel.ja
、GrapeCity.DioDocs.Pdf.ja
をインストールします。
Amazon S3にバケットを作成
Amazon S3にDioDocsで作成したExcelとPDFの保存先になるバケットdiodocs-storage
(このバケット名はユニークにする必要があるので、実際に試す際には命名規則に従った任意の名称に置き換えてください)を、Visual Studioの「AWS Explorer」から作成します。
DioDocsを使うクラスを追加
DioDocsでExcelファイルを作成するクラスDDExcel
、PDFファイルを作成するクラスDDPdf
を追加します。
それぞれ、以下のコードを追加します。
using Amazon; using Amazon.S3; using Amazon.S3.Model; using GrapeCity.Documents.Excel; using System.IO; : : class DDExcel { private const string bucketName = "diodocs-storage"; private const string uploadExcelName = "Result.xlsx"; public void Create(string input) { // ワークブックの作成 Workbook workbook = new Workbook(); // ワークシートの取得 IWorksheet worksheet = workbook.Worksheets[0]; // セル範囲を指定して文字列を設定 worksheet.Range["B2"].Value = "Hello DioDocs!"; worksheet.Range["B3"].Value = "from " + input; // メモリストリームに保存 MemoryStream ms = new MemoryStream(); workbook.Save(ms, SaveFileFormat.Xlsx); ms.Seek(0, SeekOrigin.Begin); // S3にアップロード AmazonS3Client client = new AmazonS3Client(RegionEndpoint.APNortheast1); var request = new PutObjectRequest { BucketName = bucketName, Key = uploadExcelName, InputStream = ms }; client.PutObjectAsync(request); } }
using Amazon; using Amazon.S3; using Amazon.S3.Model; using GrapeCity.Documents.Pdf; using GrapeCity.Documents.Text; using System; using System.Drawing; using System.IO; : : class DDPdf { private const string bucketName = "diodocs-storage"; private const string uploadPdfName = "Result.pdf"; public void Create(string input) { // PDFドキュメントを作成します。 GcPdfDocument doc = new GcPdfDocument(); // ページを追加し、そのグラフィックスを取得します。 GcPdfGraphics g = doc.NewPage().Graphics; // ページに文字列を描画します。 g.DrawString("Hello DioDocs!" + Environment.NewLine + "from " + input, new TextFormat() { Font = StandardFonts.Helvetica, FontSize = 12 }, new PointF(72, 72)); // メモリストリームに保存 MemoryStream ms = new MemoryStream(); doc.Save(ms, false); ms.Seek(0, SeekOrigin.Begin); // S3にアップロード AmazonS3Client client = new AmazonS3Client(RegionEndpoint.APNortheast1); var request = new PutObjectRequest { BucketName = bucketName, Key = uploadPdfName, InputStream = ms }; client.PutObjectAsync(request); } }
関数ハンドラの更新
FunctionHandler
のコードを以下のように修正してDDExcel
とDDPdf
で実装したDioDocsの処理を呼び出します。
public class Function { public string FunctionHandler(string input, ILambdaContext context) { var ddexcel = new DDExcel(); var ddpdf = new DDPdf(); try { ddexcel.Create(input); ddpdf.Create(input); return "OK"; } catch (Exception e) { return e.ToString(); } } }
デバッグ実行で確認
「Mock Lambda Test Tool」をクリックしてデバッグ実行します。
ブラウザが起動し以下の画面が表示されます。
「Function Input」のフォームに、デバッグ実行しているLambda関数に渡す値AWS Lambda
を入力して「Execute Function」をクリックします。
成功すると「Response」のラベルにOK
が表示されます。
AWS Explorerからdiodocs-storage
をクリックして、DioDocsで作成したExcelとPDFが保存されているか確認できます。なお、デプロイした後にも確認するので保存されているExcelとPDFはここで一旦削除しておきます。
デプロイして確認
実際にAWS Lambdaに作成したLambda関数をデプロイして確認します。ソリューションエクスプローラーからプロジェクトDDAWSLambda1
を右クリックして「Publish to AWS Lambda」をクリックします。
「Function Name」にDioDocsLambdaFunction1
を入力して「Next」をクリックします。
「Role Name」にNew role based on AWS managed policy: AWSLambdaFullAccess
を設定して「Upload」をクリックします。
※2021年3月1日よりAWSLamdaFullAccessは非推奨になりました。代わりにAWSLambdaExecuteを設定してください。
成功すると以下の画面が表示されます。
AWS ExplorerにデプロイしたLambda関数DioDocsLambdaFunction1
が表示されます。こちらをクリックすると以下の画面が表示されます。
DioDocsLambdaFunction1
に渡す値"AWS Lambda Function!!"
を入力して動作を確認できます。
AWS Explorerからdiodocs-storage
をクリックして、DioDocsで作成したExcelとPDFが保存されているか確認できます。
Lambda関数で作成したExcelとPDFはこちらです。
以上のように、Visual StudioとAWS Toolkit for Visual Studio、そしてAWS SDK for .NETと組み合わせて利用することで、DioDocsはAWSでも使うことができます。
追記(2021.11.17)
Amazon API Gatewayと連携した実装方法は以下の記事で紹介しています。こちらも参考にしていただければと思います。
弊社Webサイトでは、製品の機能を気軽に試せるデモアプリケーションやトライアル版も公開していますので、こちらもご確認いただければと思います。
また、ご導入前の製品に関するご相談やご導入後の各種サービスに関するご質問など、お気軽にお問合せください。