{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateTags", "ec2:Describe*", "ec2:Get*", "ec2:List*" ], "Resource": "*" } ] }
创建一个SNS主题并将其添加到共享帐户中。在目标帐户中,订阅SNS主题,并将其添加到必要的IAM角色中。
在共享帐户中使用Python Boto3 SDK编写Lambda函数来共享AMI,并将其添加到SNS主题中。以下是示例代码:
import boto3 import json
def lambda_handler(event, context):
ec2 = boto3.client('ec2')
filters = [{'Name': 'tag:Name', 'Values': ['my-ami']}]
images = ec2.describe_images(Filters=filters)
if len(images['Images']) > 0:
image = images['Images'][0]
image_id = image['ImageId']
response = ec2.modify_image_attribute(
Attribute='launchPermission',
ImageId=image_id,
OperationType='add',
UserIds=[''],
)
sns = boto3.client('sns')
message = json.dumps({'ami_id': image_id})
response = sns.publish(
TopicArn='',
Message=message
)
import boto3 import json
def lambda_handler(event, context):
ami_id = json.loads(event['Records'][0]['Sns']['Message'])['ami_id']
ec2 = boto3.client('ec2')
instances = ec2.describe_instances()
for reservation in instances['Reservations']:
for instance in reservation['Instances']:
if instance['State']['Code'] == 16 and instance['Tags']:
for tag in instance['Tags']:
if tag['Key'] == 'Name' and tag['Value'] == 'my-instance':
response = ec2.create_image(
InstanceId=instance['InstanceId'],
Name='my-ami-copy',
Description='My AMI Copy',
DryRun=False,
)
ec2.create_tags(
Resources=[response['ImageId']],
Tags=[
{
'Key': 'SharingAccountId',
'Value': ''
},
{
'Key': 'SharingTime',
'Value': ''
}
]
)
注意:在