【Scala】Scala ~ AWS SDK ~

■ はじめに

AWS Glue で Scala を使うことになって悪戦苦闘中なのだが
Scalaの実装のしにくさとして、
Pythonのように便利な boto3 がある訳ではないので調べてみた。

とりあえず、以下のサービスを利用したい。
~~~~~
 + S3
 + Secrets Manager
 + SES
~~~~~

目次

【1】AWS SDK
 1)サンプル集
 補足:その他のライブラリ
【2】設定方法
 1)個別に入れたい場合
【3】AWS SDK for Java 2.x
 1)S3
 2)Secrets Manager

【1】AWS SDK

 結局は、Scalaの場合、色々あるが
「AWS SDK for Java」がよさそう

https://aws.amazon.com/jp/sdk-for-java/

1)サンプル集

* Java ではあるが、以下のGithubに豊富にサンプルがある

https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/java/example_code
[1] S3
https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javav2/example_code/s3/src/main/java/com/example/s3/S3ObjectOperations.java
[2] Secrets Manager
https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/java_secrets-manager_code_examples.html
https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/java/example_code/secretsmanager/src/main/java/aws/example/secretsmanager/GetSecretValue.java

補足:その他のライブラリ

* 以下のサイトで取り上げている

https://qiita.com/neilli-sable/items/3696c4c5f4cd3a4a23e6
https://www.utakata.work/entry/scala/aws-library-2021

【2】設定方法

* sbt の場合、公式ドキュメントを参考に
 libraryDependenciesに以下を追加

SDK v2
https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup-project-maven.html

  // From 'Build the entire SDK into your project'
  "software.amazon.awssdk" % "aws-sdk-java" % "2.20.20",

1)個別に入れたい場合

* 以下の公式ドキュメントの「Specifying individual SDK modules」に記載

https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup-project-maven.html

libraryDependencies ++= Seq(
  // ...
  "software.amazon.awssdk" % "s3" % "2.20.30",
  "software.amazon.awssdk" % "secretsmanager" % "2.20.30",
  "software.amazon.awssdk" % "ses" % "2.20.30"
)

S3
https://mvnrepository.com/artifact/software.amazon.awssdk/s3
Secrets Manager
https://mvnrepository.com/artifact/software.amazon.awssdk/secretsmanager
SES
https://mvnrepository.com/artifact/software.amazon.awssdk/ses

【3】AWS SDK for Java 2.x

* ネットの情報だと v1 と混合しているので整理

https://docs.aws.amazon.com/ja_jp/sdk-for-java/latest/developer-guide/home.html

API仕様
https://sdk.amazonaws.com/java/api/latest/index.html

* 以下で、主なAPIを整理

1)S3

[1] ListObjectsV2Request

* ファイル情報をリストとして取得する
 => 注意点としては、ファイル数が多い場合は取り切れないので
  nextContinuationTokenで判断するところ

https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3Client.html#listObjectsV2(software.amazon.awssdk.services.s3.model.ListObjectsV2Request)

[2] getObjectAsBytes

* ネットだと「GetObject」があるのが、
 個人的には、S3にあるファイルの中身をみたいので
 getObjectAsBytes の方が使いやすい

https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3Client.html#getObjectAsBytes(software.amazon.awssdk.services.s3.model.GetObjectRequest)
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/example_s3_GetObject_section.html

2)Secrets Manager

https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/java_secrets-manager_code_examples.html

* withVersionStage については、以下の公式ドキュメント参照

https://docs.aws.amazon.com/ja_jp/secretsmanager/latest/userguide/retrieving-secrets_cache-java-ref_SecretCacheConfiguration.html
https://docs.aws.amazon.com/ja_jp/secretsmanager/latest/userguide/getting-started.html#term_version

[1] getSecretValue

* Secrets Manager で管理している値を取得する

https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/secretsmanager/SecretsManagerClient.html#getSecretValue(software.amazon.awssdk.services.secretsmanager.model.GetSecretValueRequest)

参考文献

https://www.office-matsunaga.biz/dev/description.php?id=15
https://jyuch.hatenablog.com/entry/2018/02/15/230828
https://yu-memorandum.hatenablog.com/entry/2020/08/19/195117

関連記事

ScalaAWS SDK / S3サンプル ~
https://dk521123.hatenablog.com/entry/2023/04/01/002005
ScalaAWS SDK / Secrets Managerサンプル ~
https://dk521123.hatenablog.com/entry/2023/04/03/012600
Scala ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/03/10/193805
Scala ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/03/12/184331
Scala ~ 基本編 / 繰り返し ~
https://dk521123.hatenablog.com/entry/2023/01/24/000000
Scala ~ 基本編 / Option型 ~
https://dk521123.hatenablog.com/entry/2023/03/09/000000
Scala ~ 基本編 / メソッド ~
https://dk521123.hatenablog.com/entry/2023/03/03/000000
Scala ~ 基本編 / クラス ~
https://dk521123.hatenablog.com/entry/2023/03/14/000857
Scala ~ 基本編 / コレクション ~
https://dk521123.hatenablog.com/entry/2023/03/13/000345
Scala ~ 基本編 / 日付・日時 ~
https://dk521123.hatenablog.com/entry/2023/03/08/000000
Scala ~ 基本編 / 正規表現
https://dk521123.hatenablog.com/entry/2023/03/18/034704
Scala ~ 基本編 / ジェネリック
https://dk521123.hatenablog.com/entry/2023/03/21/003817
Scala ~ ファイル名・パスの扱い ~
https://dk521123.hatenablog.com/entry/2023/03/11/000000
Scala ~ ファイルハンドリング ~
https://dk521123.hatenablog.com/entry/2023/01/03/000000
ScalaYAML
https://dk521123.hatenablog.com/entry/2023/03/16/012034
ScalaAWS SDK / S3サンプル ~
https://dk521123.hatenablog.com/entry/2023/04/01/002005
ScalaAWS SDK / Secrets Managerサンプル ~
https://dk521123.hatenablog.com/entry/2023/04/03/012600
ScalaAWS SDK / SESサンプル ~
https://dk521123.hatenablog.com/entry/2023/04/16/003338
JavaでEmail ~ JavaMail / Text ~
https://dk521123.hatenablog.com/entry/2016/07/16/222422
JavaでEmail ~ JavaMail / 添付ファイル ~
https://dk521123.hatenablog.com/entry/2016/07/17/023459
JavaでEmail ~ SMTP認証 ~
https://dk521123.hatenablog.com/entry/2016/11/07/215251
JavaでEmail ~ SMTP認証 / DIGEST-MD5
https://dk521123.hatenablog.com/entry/2016/12/07/222229
JavaでEmail ~ JavaMail / TLS
https://dk521123.hatenablog.com/entry/2017/05/03/163219
JavaでEmail ~ JavaMail / Return-Path・Errors-To ~
https://dk521123.hatenablog.com/entry/2017/05/07/000344
Amazon SES ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2017/04/28/234103
Amazon S3 ~ Boto3編 ~
https://dk521123.hatenablog.com/entry/2019/10/21/230004
Amazon S3 ~ Boto3でファイル存在チェック ~
https://dk521123.hatenablog.com/entry/2022/02/26/182526
AWS Glue ~ Scalaでの実装 ~
https://dk521123.hatenablog.com/entry/2023/03/17/000000
AWS Glue ~ ローカル環境を作成する / Glue v3.0版 ~
https://dk521123.hatenablog.com/entry/2022/01/31/165650
LocalStack ~ ローカルで疑似AWSを作成する ~
https://dk521123.hatenablog.com/entry/2019/12/14/010524
LocalStack ~ ローカルで疑似Lambda/S3/DynamoDBを作成する ~
https://dk521123.hatenablog.com/entry/2019/12/16/231149