■ はじめに
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で判断するところ
[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
* 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://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
関連記事
Scala ~ AWS SDK / S3サンプル ~
https://dk521123.hatenablog.com/entry/2023/04/01/002005
Scala ~ AWS 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
Scala ~ YAML ~
https://dk521123.hatenablog.com/entry/2023/03/16/012034
Scala ~ AWS SDK / S3サンプル ~
https://dk521123.hatenablog.com/entry/2023/04/01/002005
Scala ~ AWS SDK / Secrets Managerサンプル ~
https://dk521123.hatenablog.com/entry/2023/04/03/012600
Scala ~ AWS 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