我有调用AWS boto3 API的代码。此代码使用iam客户端和ec2客户端执行以下几项操作:
iam_client = boto3.client('iam')
ec2_client = boto3.client('ec2')
对于所有这些调用,角色名和配置文件名都是相同的:MyExampleName
但最后一次呼叫失败,出现如下消息:
INFO”失败:调用AssociateIamInstanceProfile操作时发生错误(InvalidParameterValue):参数iamInstanceProfile.name的值(MyCanpleName)无效。无效的IAM实例配置文件名,帐户ID: XXXXXXXXXXXXX,资源: EC2实例: i-78sd976sd6912"
我刚刚创建了个人资料,那么为什么打电话给associate_iam_instance_profile说它是无效的呢?
使用IAM客户机和EC2客户机时都有一点时间问题。通过iam\u客户端创建的配置文件可能不会立即被
ec2\u客户端使用。通过一些重试逻辑,名称似乎最终会起作用——它并不是真的无效,只是还没有找到:
import time
logger.info('Attaching profile: MyExampleName'))
counter = 0
while counter < 60:
try:
ec2_client.associate_iam_instance_profile(IamInstanceProfile={'Name': 'MyExampleName'},
InstanceId='i-78sd976sd6912')
break
except ClientError as err:
if err.response['Error']['Code'] == 'InvalidParameterValue':
counter = counter + 1
logger.info('The ec2 client did not find the profile yet; wait 1 second and then try again')
time.sleep(1)
logger.info('Finally worked!')
以下日志显示了一个真实世界的日志条目示例,这些日志条目显示EC2客户端最终与IAM客户端一致:
INFO "Attaching profile: MyExampleName"
INFO "The profile is not found yet; wait 1 second and then try again"
INFO "The profile is not found yet; wait 1 second and then try again"
INFO "The profile is not found yet; wait 1 second and then try again"
INFO "The profile is not found yet; wait 1 second and then try again"
INFO "The profile is not found yet; wait 1 second and then try again"
INFO "The profile is not found yet; wait 1 second and then try again"
INFO "The profile is not found yet; wait 1 second and then try again"
INFO "The profile is not found yet; wait 1 second and then try again"
INFO "The profile is not found yet; wait 1 second and then try again"
INFO "Finally worked!"
更方便的方法是依靠专门构建的服务员等待某些资源可用。
waiter = client.get_waiter('instance_profile_exists')
waiter.wait(
InstanceProfileName='string',
WaiterConfig={
'Delay': 123,
'MaxAttempts': 123
}
)
您的方法的问题是,您依赖于资源将在60秒内创建的假设,但情况可能并非总是如此。而服务员则继续轮询,直到资源可用。
阅读更多关于可用服务员的信息https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/iam.html#IAM.Client.get_waiter
问题内容: 我真的尽力找到一种方法,使用javascript加载网页来抓取网站,以便例如我的播放列表抓取。我对chrome驱动程序和phantomjs都不满意。请在下面查看,看看是否可以帮助我解决错误。 我的packages.config文件如下: 问题答案: .NET语言绑定标记了PhantomJS驱动程序类在3.11中已弃用,而这些类在3.14中已删除。PhantomJS项目及其驱动程序将不再
问题内容: 我有一个方法,该方法将为准备好的语句执行带有QueryParameters列表的查询。该和只是小的Java bean和基础上,应该是不言自明的就是你在这里看到。我正在尝试使用,而不是使用,其中是STRING类型,值是。但是,我遇到了错误。我的代码和输出如下。这是怎么回事? 输出: 问题答案: 我相信参数仅适用于 值 -不适用于SQL查询的一部分,例如表格。可能有一些数据库支持您要实现的
为什么这显示错误... 第1行错误: ORA-65096:公用用户名或角色名无效
我刚开始在应用程序中出现以下错误。当安装和运行同一个应用程序时,在安装看似成功之后,我会得到一条错误消息: 应用程序验证未成功
我使用JavaMail和协议imap来组织电子邮件(gmail)。我创建了一个文件夹FOLDER1,代码如下: 我用代码移动消息: 它的工作原理 但我不明白。。。如果我想再次阅读邮件,但不想阅读已阅读的邮件,也不想阅读已创建文件夹中的邮件,则无法再次阅读。该名称已在收件箱中 有什么问题吗? 谢谢你的帮助
我在 Azure 表存储中有下表名称。表名是在我的应用程序中自动生成的,然后使用表创建。创建如果不存在(表名)。有些有效,有些则不然。当我深入研究错误时,扩展的错误信息告诉我资源名称包含无效字符 - 但是我无法弄清楚失败名称中无效的内容 - 任何人都可以发现这一点吗? -指定的资源名称包含无效字符 -指定的资源名称包含无效字符 –工程