我正在构建一个amplify react应用程序,并试图将其连接到我的CodeArtifact存储库中的私有npm包。
在构建文件amplify.yml
中,我添加了
preBuild:
commands:
- aws codeartifact login --tool npm --repository myrepo --domain mydomain --namespace mynamespace --domain-owner myid
- yarn install
并为amplify服务角色指定了以下策略:
{
"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
在login命令和
之后error An unexpected error occurred: "<some-package-url>: Request failed "401 Unauthorized"".
安装依赖项时。
我在amplify build中调试了环境,没有发现任何AWS访问密钥id或secret,但也不知道为什么。
Ok,我通过删除yarn.lock
并将其添加到.gitignore
来解决我的问题。
问题是,yarn在yarn.lock
中缓存了解决的包地址。这个地址在我的CodeArtifact存储库中,因为我是在我的开发机器上安装依赖项时登录的。由于默认情况下yarn.lock
不在.gitignore
中,我只是将其推入构建中。当yarn在build中安装依赖项时,它使用缓存的地址,这些地址无法再访问。