1

我正在构建一个放大反应应用程序并尝试将其连接到我的 CodeArtifact 存储库中的私有 npm 包。

在构建文件amplify.yml中,我添加了

preBuild:
      commands:
        - aws codeartifact login --tool npm --repository myrepo --domain mydomain --namespace mynamespace --domain-owner myid
        - yarn install

并为放大服务角色提供以下策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codeartifact:GetAuthorizationToken",
                "codeartifact:GetRepositoryEndpoint",
                "codeartifact:ReadFromRepository"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "sts:GetServiceBearerToken",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "sts:AWSServiceName": "codeartifact.amazonaws.com"
                }
            }
        }
    ]
}

此设置适用于 CodeBuild 构建 Lambda 函数,但在 Amplify 中,我得到

Successfully configured npm to use AWS CodeArtifact repository

在登录命令之后

error An unexpected error occurred: "<some-package-url>: Request failed \"401 Unauthorized\"".

安装依赖项时。

我在放大构建中调试了环境,没有找到任何 AWS 访问密钥 ID 或秘密,但也不知道为什么。

4

1 回答 1

0

好的,我通过删除yarn.lock并将其添加到.gitignore.

问题是,yarn 将解析的包地址缓存在yarn.lock. 该地址在我的 CodeArtifact 存储库中,因为我在我的开发机器上安装依赖项时已登录。由于默认情况下yarn.lock不在.gitignore,我只是将其推送到构建中。当 yarn 在 build 中安装依赖时,它使用缓存的地址,无法再访问。

于 2021-11-06T11:10:23.407 回答