【AWS】LambdaでS3の署名付きURLを取得してみた【C#】
こんにちは!nomurabbitです。
今回は、S3オブジェクトの署名付きURLを
C#のLambdaで取得してみます。
S3へのファイルの出し入れに便利ですよー!
ソースコード
今回はAWSSDK.S3が必要なので、
nugetでパッケージを追加します。
ソースコードのポイントは下記の通りです。
public GlbResponseBody GetAction(GlbRequestBody glbRequestBody) { try { var s3Client = new AmazonS3Client(RegionEndpoint.APNortheast1); var request = new Amazon.S3.Model.GetPreSignedUrlRequest { BucketName = GlbUtil.S3_NOMURABBIT_BLOG_XXX, Key = glbRequestBody.Key, Verb = HttpVerb.GET, //Verb = HttpVerb.PUT, Expires = DateTime.UtcNow.AddMinutes(5) }; string response = s3Client.GetPreSignedURL(request); GlbResponseBody glbResponseBody = new GlbResponseBody(); glbResponseBody.SignedUrl = response; return glbResponseBody; } catch (System.Exception e) { throw e; } }
AmazonS3ClientのGetPreSignedURLメソッドの引数が
GetPreSignedUrlRequest のインスタンスになっています。
Verbプロパティを変更することで、
GET、PUTなどのHTTPメソッドに対応できます。
GitHubにソースコードを載せていますので、
よろしければ参考にしてください。
オブジェクトをGETするための署名付きURLを返すプログラムです。
以上でS3オブジェクトの署名付きURLを
Lambdaで取得できると思います。
ところで私、最初この方法知らなくて、
LambdaでS3のオブジェクトをバイナリで読み取って、
クライアントでファイルに書き出す方法なんかを試してました。
ただ、それだとちょっと大きなファイル扱うと
Lambdaの制限に引っかかっちゃいますよね。
当時は何にも知らなかったんで、いろいろ試行錯誤してました。
もし、これからS3使ってアプリ作るぞ!
って方がいたら、署名付きURLを
ぜひ使ってみてください。
では!