decadence

個人のメモ帳

localstack を aws-sdk-java-v2 で利用する

AWSを活用しているときに、localやCIではAWSのmockとしてlocalstackを利用することがある。 特にS3 / Kinesis / SQS / ...のように複数のAWS Resourceを使う場合にはlocalstackはとても便利だ。 localstackはdocker imageも公式配布されているので本当に便利。

それとは別に、最近ではaws-sdk-javaはv2が主流となりつつある。 こちらはv1と比べてコード生成されたり、非同期APIが提供されたりしている。

aws-sdk-java-v2でlocalstackを利用する際には、以下の点に気をつける必要がある。

  • aws-sdk-java-v2はhttp2でつなぎに行こうとするが、localstackはhttp1.1しか喋れない
  • aws-sdk-java-v2はCBORでやり取りしようとするが、localstackはJSONしか処理出来ない
  • localstackも何も認証情報が取れない環境だとsdkが例外を吐いて通信できないので、どのような環境でも動かせるように、適当なaws key/secretを入れておく
    • もちろんAWS上の本番環境などではaccess key/secretなんかは使わずに、instance profileやexecution roleからassume roleでもして必要なresourceへアクセスされたい
  • USE_SSLssl接続にする際は、awscliにある --no-verify-ssl と同じようにflagを立ててスキップさせる
    • aws-sdk-java-v2ではnettyを利用しているため、他libraryとのnetty dependency hellによりsslがClassNotFoundで実行時エラーになりやすいので、極力localやCI環境でもlocalstackをssl接続にして検証をした方が良い
// disable CBOR
System.setProperty(SdkSystemSetting.CBOR_ENABLED.property(), "false")
// use http1.1 not http2
val sdkAsyncHttpClient = NettyNioAsyncHttpClient
  .builder()
  .protocol(Protocol.HTTP1_1)
  .build()
  // localstackでUSE_SSLしている際には、以下のように変更
  //  .buildWithDefaults(
  //    AttributeMap.builder().put(SdkHttpConfigurationOption.TRUST_ALL_CERTIFICATES, java.lang.Boolean.TRUE).build()
  //  )

// set static credentials
val credentialsProvider = StaticCredentialsProvider.create(
  AwsBasicCredentials.create("unused", "unused")
)
val client = SqsAsyncClient.builder()
  .region(Region.AP_NORTHEAST_1)
  .credentialsProvider(credentialsProvider)
  .endpointOverride(new URI(s"http://localhost:4576"))
  .httpClient(sdkAsyncHttpClient)
  .build()

client.listQueues(
  ListQueuesRequest
    .builder()
    .build()
)

社会人4年目振り返り

年度末振り返り

仕事面

今の会社に入って1年と数ヶ月

取り組み

気持ち

偶然にも証券システムらしい機能開発にも取り組んだりしており、そっち関連の学びがある。他金融業界出身の人の話を聞くのも面白い。At Least Onceで読んだりするのはまだ楽なんだけど、スケールする順序保証を担保したシステムにムズみを感じている。

ユーザにサービスを早く届けたい気持ちと、自分が手を動かした方が早く届けられるという思いから、大体手を動かしている。サービスに直結しなくても他の開発者が便利に思えるものなどを、勝手に作ってシェアしたりしている。マイクロサービスでやっていく中で、各開発者の運用・監視に対する思いが足りなく感じたので、整備してworkshopを開いたりもしている。

人それぞれ働き方・得意分野/苦手分野などは違ってるわけだし、皆が皆模索しながらやっている様子は面白い。ユーザに良いサービスを早く届けたいという自分の中での最も高い優先度に向けて、自分は自分なりに今度もやっていけたらと思う。

副業

副業をやっていたが、やめて、また募集したりもしてる。平日夜・土日のみの稼働でエンジニア足りないと感じてる人は、CVを参考にしつつ、Contactにある連絡先に連絡を下さい。JVM関連のサーバサイド、AWS周りのインフラ、型のある言語によるフロント(firebase etc)などは対応出来る。

https://www.krrrr38.com/#/cv/ja

日常面

  • 引っ越した
    • ルンバ買った
    • ウォーターサーバゲットした
  • 軽井沢・台湾など行った
    • 金融業界には5連休を取らなくてはならないって仕組みがあってだな
  • 将来に向けて何をしようかというのを悩んでいたりする
    • 悩んでる時間ももったいないから副業したりもしている

その他

3月は誕生日

www.amazon.jp