[aws] vpc 内部にある lambda から SageMaker を触る

vpc 内部にある lambda の function から、SageMaker のオブジェクトを触る機会があったのですが、
設定に四苦八苦して、うまく疎通が出来なかったので方法を記載しておきます。

SageMaker 以外のサービスでもSageMakerの部分を読み替えれば同様にいけると思います。

ソースは、python でソースの書き方は、sagemaker boto3 とかで適当に検索すれば辿り着くと思います!

  1. role に permissions を追加する
    1. Configuration から、 Permissions を選択し、Role の リンクを押下(赤い部分)
      lambda の role リンク
    2. Permissions で、Add permissions で 権限を追加。すでに権限がある場合は Attach policies でもいいです。
      今回は新規に作成することにします。 Create inline policy をクリック(赤い部分)
      role の persmissions
    3. JSON タブを選択して、以下のJSONを指定します。

      Review policy を押下します。名前は適当にわかりやすい名前をつけて下さい
      permission sage maker all

      SageMaker に関する権限を大幅に付与しましたが、制限する場合は適宜ActionなりResourceなりを絞って下さい。
  2. vpc が 所属している Security groups を確認
    lambda vpc link

    赤い所を覚えておく
    そして、vpc のリンクを押下
  3. Endpoints を押下
    vpc endpoint link
  4. Create endpoint を押下
    create endpoint
  5. Service category で、 AWS services を選択
    Services から、 com.amazonaws.us-east-1.sagemaker.api を選択。
    今回は、モデル一覧の取得という処理だったのでこのサービスを選択したが、
    Notebook や、Studioをいじる場合はサービスが分かれているので適宜選択する。
    choose service
  6. vpc では、lambdaと同じvpcを選択
    vpc select

  7. 接続に使うサブネットを選択する
    choose subnet

    こちらは、labmbdaが利用しているsubnetを同様にします。

  8. セキュリティーグループを設定
    lambdaのvpcの設定で利用しているのと同じセキュリティーグループにします。
    choose security group

とりあえず、lambda から SageMaker を触るための設定です。

[micronaut] GORMを利用したアプリをLambdaで起動するとエラー

ローカル環境では一切問題がないが、AWS Lambda 上で動かすと下記エラーが発生した。

環境
Java: java 11 corretto
Micronaut: 2.3.2 / 2.4.4

エラーとなっているサービスは、GormServiceのクラス。
原因は、@Service annotation を使っていたサービスで一部実装部分があったため、abstract class として利用していたのが原因。

@Service を利用する箇所は全て interface を利用し実装部分は普通の class を作成してそこに記載するようにした。