AWS CDK+Serverless Next.js構成で、APIからAWSリソースにアクセスできるようにIAMロールを更新する

AWSアドベントカレンダー / AWS Amplifyアドベントカレンダー / Next.jsアドベントカレンダー 9日目のクロスポストです。 Next.jsのAPIから、AWSのAPIを呼び出したい たとえば「外部サー […]

広告ここから
広告ここまで

目次

    AWSアドベントカレンダー / AWS Amplifyアドベントカレンダー / Next.jsアドベントカレンダー 9日目のクロスポストです。

    Next.jsのAPIから、AWSのAPIを呼び出したい

    たとえば「外部サービスのAPI TokenをSystems Managerから取得したい」など、Next.jsのAPI処理内部でAWS APIを呼び出したくなるケースはいくつか存在します。

    AWS CDKでデプロイしている場合には、Constructを上書きすることで更新できます。

    コードサンプル

    const app = new NextJSLambdaEdge(this, "NextJsApp", {
      serverlessBuildOutDir: "./build",
    });
    const targets = [app.defaultNextLambda, app.nextApiLambda];
    targets.forEach((target) => {
      target.addToRolePolicy(
        new PolicyStatement({
          resources: ["*"],
          actions: ["ssm:GetParameter"],
        })
      );
    });

    コード概説

    AWS CDKでServerless Next.jsを利用する場合、NextJSLambdaEdgeコンストラクタを利用します。そしてこの中には、デプロイするLambda@Edgeのリソースが含まれています。

    APIやgetServerSitePropsなどを実行するLambda@edgeのリソースがわかれば、あとはそれに対してaddToRolePolicyを実行してIAMポリシーを追加してやればOKです。

    対象となるLambda@edgeのattribute名

    addToRolePolicyがforEach内で実装されているのは、設定が必要なFunctionが複数あったためです。

    参考: https://github.com/serverless-nextjs/serverless-next.js/blob/master/packages/serverless-components/nextjs-cdk-construct/src/index.ts#L55-L59

    • defaultNextLambda
    • nextApiLambda
    • nextImageLambda

    next/imageでAWS APIを叩くことはあまりない気がしますので、上の2つに必要に応じて設定する方法で良いかとは思います。

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark