Como automatizar o envio ao Amazon Marketplace?

7

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 boto3biblioteca, portanto estou aberto a alternativas.

lawnmowerlatte
fonte
Não tenho certeza do que você está procurando, deseja compartilhar sua ami cozida no mercado ou apenas registrar uma ami para seu próprio uso?
Tensibai 21/03
Quero compartilhar uma AMI preparada no mercado. O processo manual para fazer isso envolve compartilhá-los de uma maneira específica, para que possam ser verificados e, em seguida, enviando metadados sobre as AMIs.
lawnmowerlatte
Não é realmente uma resposta, mas um ponto de partida talvez: Edifício AMIs para AWS mercado
Tensibai
@Tensibai, a seção para compartilhamento da AMI com o AWS Marketplace parece promissora. Manterei essa pergunta atualizada enquanto continuo pesquisando.
lawnmowerlatte

Respostas:

6

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_attributepermitirá 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):

response = snapshot.modify_attribute(
    Attribute = 'createVolumePermission',
    OperationType = 'add',
    UserIds = [
        '679593333241', # Marketplace user ID
    ]
)

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:

https://ec2.amazonaws.com/?Action=ModifySnapshotAttribute
&SnapshotId=ID_HERE
&CreateVolumePermission.Add.1.UserId=679593333241
&AUTHPARAMS

Isso deve adicionar a permissão de que o mercado precisa para acessar sua AMI. Quanto à substituição ID_HEREpelo 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_productfazer 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.

Peter G
fonte
1. O compartilhamento da AMI e do snapshot com o ID do Marketplace coloca-o na fila automaticamente para digitalização? Com base no meu teste manual, você ainda precisa fornecer o nome de usuário do SO e iniciar a verificação manualmente.
lawnmowerlatte
2. Existe uma maneira de verificar o status da verificação da AMI?
lawnmowerlatte
3. Não sei se as funções do ServiceCatalog são o que estou procurando. O produto existe, eu só preciso adicionar uma nova versão. O processo manual é enviar o Formulário de carga do produto, mencionado no Guia do vendedor .
lawnmowerlatte
2
1: Acabei de verificar e não, na verdade não. O mercado não possui uma API, portanto, para esta, você precisará "criar sua própria" com uma conta de usuário especial para acionar coisas diferentes no console de gerenciamento por meio de envios automatizados de formulário. 2: sem API, você precisará fazer isso novamente. 3: Existem funções de atualização no ServiceCatalog como update_product()você pode usar, se ele já existir.
Peter G