Alguém conhece uma maneira de automatizar o envio de uma AMI ao Amazon's Marketplace? Quero pegar uma AMI pública e compartilhá-la no AWS Marketplace para que possa ser verificada quanto à listagem e, em seguida, envie a folha de metadados do produto.
Nosso ambiente preferido é o Python, mas não vi nenhum gancho relevante na boto3
biblioteca, portanto estou aberto a alternativas.
amazon-web-services
continuous-deployment
automation
amazon-ec2
lawnmowerlatte
fonte
fonte
Respostas:
Permissões de instantâneo
O Boto3 possui uma função que permite criar permissões de volume, que é o que o compartilhamento da AMI com o AWS Marketplace exige que você faça.
snapshot.modify_attribute
permitirá que você compartilhe sua AMI com a conta do marketplace da seguinte maneira (você também pode usar uma representação JSON, se preferir, está nos documentos):Também existe uma função oficial da API que ajudará a atingir os requisitos de permissão listados no Compartilhamento da AMI com o AWS Marketplace se você decidir migrar do boto3 (ou se um leitor não estiver usando o boto3). Se a sua AMI for privada, você só precisa fazer esta chamada de API:
Isso deve adicionar a permissão de que o mercado precisa para acessar sua AMI. Quanto à substituição
ID_HERE
pelo ID do snapshot, você pode fazer isso com o boto3 usando a propriedade snapshot_id do objeto snapshotsnapshot.snapshot_id
antes de fazer a chamada da API (dito isso, há poucas razões para você usar essa API, pois é necessário usar o boto3 de qualquer maneira).Metadados do produto
Você deve poder usar as funções relevantes do ServiceCatalog no boto3, como
create_product
fazer upload de metadados do produto. Também existem funções oficiais da API equivalentes (essa é apenas CreateProduct, elas não estão listadas de uma maneira que me permita vinculá-las adequadamente). Vale a pena notar que a API oficial aceita apenas JSON, enquanto o boto3 gera o próprio JSON. Qual deles é mais útil para você depende de como seus dados estão estruturados nos arquivos de metadados do produto. Como eu não sei, não posso escrever diretamente o código para fazê-lo.fonte
update_product()
você pode usar, se ele já existir.