我遇到了这样一个问题:当我尝试运行命令将资源导入现有的 pulumi 堆栈时,预览总是失败
错误如下
类型名称 计划信息
pulumi: pulumi:堆栈 dev 1 错误
- aws:ebs:Volume id import 1 错误
诊断:
pulumi:pulumi:Stack (dev):
error:预览失败:出现 1 个错误:
* 配置 Terraform AWS 提供程序:未找到 Terraform AWS 提供程序的有效凭证源。
AWS 提供商
AWS Error: failed to refresh cached credentials, no EC2 IMDS role found, operation error ec2imds:GetMetadata,通过客户端选项或 "AWS_EC2_ METADATA DISABLED" 环境变量禁止访问 EC2 IMDS。
请问为什么会出现这种情况?
我在 cli 上运行了 import 命令来导入 ebs 卷,并指定了资源的 id。pulumi import aws:ebs/volume:Volume id vol-id
而我期待的是一个预览和一些应该生成的 ts 代码。
以下是我的期望
预览导入 (dev)
类型名称计划
+ pulumi:pulumi:Stack dev create
= └─ aws:ebs:Volume id import
资源:
+ 1 创建
= 1 次导入
2 变化
是否要执行此导入?
是
否
详细信息
分析
的问题在于 Pulumi 无法获取有效的 AWS 凭据,导致无法进行资源导入。报错信息显示,Pulumi 尝试了以下几种方式获取凭据,但均失败:
- 缓存的凭据 : Pulumi 首先尝试使用缓存的凭据,但这些凭据可能已过期或无效。
- EC2 IMDS 角色 : Pulumi 尝试从 EC2 实例元数据服务 (IMDS) 获取角色凭据,但这失败了,因为可能没有为实例分配 IAM 角色,或者禁用了 IMDS 访问。
解决方法
要解决此问题,需要确保 Pulumi 可以访问有效的 AWS 凭据。以下是几种常见的方法:
1. 配置环境变量:
这是最常见的设置 AWS 凭据的方法。需要设置以下环境变量:
-
AWS_ACCESS_KEY_ID
: 的 AWS 访问密钥 ID。 -
AWS_SECRET_ACCESS_KEY
: 的 AWS 秘密访问密钥。
可以直接在终端中设置这些变量,或者将它们添加到的 shell 配置文件(例如
~/.bashrc
或
~/.zshrc
)中。
2. 使用 AWS 配置文件:
如果已经在本地配置了 AWS CLI 并使用命名配置文件,则可以使用
AWS_PROFILE
环境变量指定 Pulumi 要使用的配置文件:
export AWS_PROFILE=your_profile_name
3. 使用 AWS SSO:
如果使用 AWS SSO 登录 AWS 账户,则需要配置 Pulumi 以使用的 SSO 凭据。可以参考 Pulumi 文档中的说明进行操作: https://www.pulumi.com/docs/pulumi/aws/setup/#configuring-credentials
4. 启用 EC2 IMDS 角色(如果适用):
如果在 EC2 实例上运行 Pulumi,并且希望使用实例角色,请确保已为实例分配了 IAM 角色,并且未禁用 IMDS 访问。
设置凭据后,请尝试重新运行
pulumi import
命令。
如果仍然遇到问题,请提供以下信息,以便我提供更具体的帮助:
- 使用的 Pulumi 版本。
- 使用的操作系统。
- 是如何安装 Pulumi 的。
- 是否尝试过任何其他故障排除步骤?