AWS Extraiga el último código del compromiso de código en el inicio de la instancia EC2

Parece haber mucha discusión sobre este tema, pero nada precisamente para mi situación y hasta ahora no lo ha resuelto.

Tengo mi código colocado en Aws codecommit.

Creé una AMI para una de las instancias de ejecución de Ubuntu en AWS y creé una configuration de inicio usando esta AMI junto con un grupo de escalado automático.

Quiero basar / modificar mi AMI de configuration de lanzamiento cada mes para asegurarme de que el AMI tenga código actualizado recientemente y para que las instancias recientemente lanzadas (a través del escalado automático) puedan sacar los últimos cambios del repository de confirmación de código en el lanzamiento, lo que networkinguce el time de inicio.

Para lograr esto, coloqué el código debajo de la secuencia de commands User data (cloud-init) y seleccioné una function IAM que tiene permissions completos sobre todos los permissions EC2 y codecommit así como IAM: Passrole. Sin embargo, en el momento del lanzamiento, el script siempre arroja un error y no realiza cambios (mantuve intencionalmente un file en repository para probar)

Opción 1

#!/bin/bash git config --global cnetworkingential.helper '!aws codecommit cnetworkingential-helper $@' git config --global cnetworkingential.UseHttpPath true cd /path/to/my/folder/ git remote set-url origin https://git-codecommit.ap-southeast-2.amazonaws.com/v1/repos/reponame git pull origin master 

Lanza debajo de error

 Error fatal: $HOME not set fatal: $HOME not set fatal: Not a git repository (or any of the parent directories): .git fatal: could not read Username for 'https://git-codecommit.ap-southeast-2.amazonaws.com': No such device or address 

Opcion 2 –

Intenté esta opción también con SSH (aunque no he intentado ninguna otra solución para esto)

 #!/bin/bash git config --global cnetworkingential.helper '!aws codecommit cnetworkingential-helper $@' git config --global cnetworkingential.UseHttpPath true cd /path/to/my/folder/ git remote set-url origin ssh://git-codecommit.ap-southeast-2.amazonaws.com/v1/repos/reponame git pull origin master 

Tengo un error diferente –

 Errpr: Host key verification failed. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 

¿Alguien puede ayudarme a entender dónde me estoy equivocando?

Gracias.

En la Opción 1, parece que el directory inicial no se creó aún. Cuando configure la configuration de git global, irá al file .gitconfig del directory de inicio. Aunque la opción no necesita ser global, por ejemplo, puede cambiar el order de las líneas a:

cd /path/to/my/folder/ git config cnetworkingential.helper '!aws codecommit cnetworkingential-helper $@' git config cnetworkingential.UseHttpPath true

Esto se debe a que ha configurado las funciones de instancia de EC2 correctamente y que su CLI de AWS puede get las cnetworkingenciales de rol de instancia EC2 de los metadatos EC2 para llamar a las API de AWS.

Aunque no está claro desde el resultado si AWS CLI está instalado. La CLI debe instalarse para las líneas de configuration de git que ha publicado en el trabajo porque va a llamar a "aws codecommit cnetworkingential-helper" para get un nombre de usuario temporal y una contraseña en function de las cnetworkingenciales de las funciones de instancia.

En la Opción 2, no necesita usar el asistente de cnetworkingenciales. Lo siento si eso no estaba claro en la documentation. Sin embargo, necesita cargar una key pública en IAM (instrucciones aquí: http://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-ssh-unixes.html#setting-up-ssh -unixes-keys )

También necesitará encontrar una forma de distribuir su par de keys públicas y privadas a las instancias de EC2 que está tratando de ampliar, esto puede ser bastante problemático.

También puede generar cnetworkingenciales estáticas para CodeCommit ( http://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html#setting-up-gc-iam ) y colocarlas en su instancia de EC2. en algo así como un file .netrc.

La Opción 1 de la OMI parece ser la más segura, ya que no tienes que ocuparte de pasar secretos.