首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Next.js SSR扩增CDK

用Next.js SSR扩增CDK
EN

Stack Overflow用户
提问于 2021-08-16 18:26:02
回答 2查看 602关注 0票数 5

我试图部署一个next.js ( ssr )应用程序在AWS‘放大器使用CDK,但放大器未能识别应用程序为next.js ssr。但是,当我手动使用AWS时,app被识别为SSR,并按预期工作。

这是由aws/aws-放大v118生成的:

代码语言:javascript
复制
import * as cdk from '@aws-cdk/core';
import * as amplify from '@aws-cdk/aws-amplify';
import codebuild = require('@aws-cdk/aws-codebuild');

export class AmplifyStack extends cdk.Stack {
    constructor(scope: cdk.Construct, id: string, props: cdk.StackProps) {
        super(scope, id, props);

        const sourceCodeProvider = new amplify.GitHubSourceCodeProvider({
            owner: '.....',
            repository: '....',
            oauthToken: cdk.SecretValue.secretsManager('github-token'),

        });
        const buildSpec = codebuild.BuildSpec.fromObjectToYaml(
            {
                version: 1,
                applications: [
                    {
                        frontend: {
                            phases: {
                                preBuild: {
                                    commands: [
                                        "npm install"
                                    ]
                                },
                                build: {
                                    commands: [
                                        "npm run build"
                                    ]
                                }
                            },
                            artifacts: {
                                baseDirectory: ".next",
                                files: [
                                    "**/*"
                                ]
                            },
                            cache: {
                                paths: [
                                    "node_modules/**/*"
                                ]
                            }
                        }
                    }
                ]
            }
        );
        const amplifyApp = new amplify.App(this, "cdk-nf-web-app", {
            sourceCodeProvider: sourceCodeProvider,
            buildSpec: buildSpec
        });

        amplifyApp.addBranch('develop', {
            basicAuth: amplify.BasicAuth.fromGeneratedPassword('dev')
        });
        amplifyApp.addCustomRule({
            source: "</^[^.]+$|\\.(?!(css|gif|ico|jpg|js|png|txt|svg|woff|ttf|map|json)$)([^.]+$)/>",
            target: "/index.html",
            status: amplify.RedirectStatus.REWRITE
        });
    }
}

这与我从UI手动执行时所生成的完全相同。这里的不同之处在于缺乏框架标识,如图所示。有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2021-09-01 08:05:37

为了回答我自己的问题,我错过了这个角色,因为没有它,aws将无法创建必要的资源。(角色:https://docs.aws.amazon.com/cdk/api/latest/docs/aws-iam-readme.html)

编辑详细说明我是如何修复它的:

增加了一个可以通过放大来使用的新角色

代码语言:javascript
复制
const role = new iam.Role(this, 'amplify-role-webapp-'+props.environment, {
        assumedBy: new iam.ServicePrincipal('amplify.amazonaws.com'),
        description: 'Custom role permitting resources creation from Amplify',
    });

并分配了一个策略(AdministratorAccess)该角色。

代码语言:javascript
复制
let iManagedPolicy = iam.ManagedPolicy.fromAwsManagedPolicyName(
        'AdministratorAccess',
    );
role.addManagedPolicy(iManagedPolicy)

然后,在创建应用程序时,我将角色分配给了应用程序:

代码语言:javascript
复制
const amplifyApp = new amplify.App(this, "cdk-nf-web-app", {
        sourceCodeProvider: sourceCodeProvider,
        buildSpec: buildSpec,
        role: role  <--- this line here
    });
票数 2
EN

Stack Overflow用户

发布于 2021-09-11 19:49:39

放大应用程序需要授权才能创建相关资源:

代码语言:javascript
复制
// This is for demonstrations purposes only; Do not give full access for production usage!
amplifyApp.grantPrincipal.addToPrincipalPolicy(new iam.PolicyStatement({
    resources: ["*"],
    actions: ['*'],
}))

源代码展示

Next.JS SSR展示

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68807612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档