AMI

2017-09-23 13 views
0

の暗号化されたコピーを作成しようと私は、次のRubyコードを有する:上記のコードでAMI

sts = Aws::STS::Client.new 

stsresp = sts.assume_role(
    :role_arn => _role_arn, 
    :role_session_name => "provisioning_vpc_query" 
) 

ec2 = Aws::EC2::Client.new(
    session_token: stsresp.credentials["session_token"], 
    region: _region, 
    access_key_id: stsresp.credentials["access_key_id"], 
    secret_access_key: stsresp.credentials["secret_access_key"] 
) 

# ... 
p "got image: #{preimage_id}, create encrypted copy..." 

resp = ec2.copy_image({ 
    encrypted: true, 
    name: oname, 
    source_image_id: preimage_id, 
    source_region: _region, 
    dry_run: false 
}) 

をpreimage_idは、上記で参照領域_regionで既知の画像です。

私はこれを実行すると、私が手:

"got image: ami-71e9020b, create encrypted copy..." 
Aws::EC2::Errors::InvalidRequest: The storage for the ami is not available in the source region. 

ノートラブルで、コンソールから手動でこれを行うことができます。

何が間違っているのか理解できますか?

+1

多分 '_region'に無効な値が含まれていますか? –

+0

可能性のあるエラー、https://forums.aws.amazon.com/thread.jspa?threadID=246931&tstart=0 – Kannaiyan

答えて

0

が判明しました。私は、利用可能になる前にamiをコピーしようとしていました。待機する単一の行を追加すると、そのトリックが行われました。

sts = Aws::STS::Client.new 

stsresp = sts.assume_role(
    :role_arn => _role_arn, 
    :role_session_name => "provisioning_vpc_query" 
) 

ec2 = Aws::EC2::Client.new(
    session_token: stsresp.credentials["session_token"], 
    region: _region, 
    access_key_id: stsresp.credentials["access_key_id"], 
    secret_access_key: stsresp.credentials["secret_access_key"] 
) 

# ... 
p "got image: #{preimage_id}, create encrypted copy..." 

ec2.wait_until(:image_available, {image_ids: [preimage_id]}) 

resp = ec2.copy_image({ 
    encrypted: true, 
    name: oname, 
    source_image_id: preimage_id, 
    source_region: _region, 
    dry_run: false 
})