[DOCKER] Comment accéder à un conteneur s'exécutant sur AWS Fargate

introduction

Dans le cas d'AWS Fargate, il est gênant que je ne puisse pas enquêter car ce n'est pas dans le conteneur qui s'exécute lorsqu'il y a un problème, j'ai donc étudié comment entrer dans le conteneur.

Si vous utilisez ssm-agent, vous n'avez pas besoin d'ouvrir le port SSH et de gérer la clé publique vers SSH, j'ai donc utilisé ssm-agent.

Comment installer sshd dans un conteneur

  1. Gardez le port SSH ouvert
  2. Ajoutez la clé publique de l'utilisateur à ssh dans ~ / .ssh / authorzied_keys dans le conteneur
  3. Installez sshd dans le conteneur et démarrez sshd au démarrage du conteneur.

mérite

Démérite

Comment installer ssm-agent dans un conteneur

  1. Créez et enregistrez une activation avec activation hybride lors du démarrage du conteneur et démarrez ssm-agent
  2. Utilisez Session Manager pour entrer dans le conteneur

mérite

Puisqu'il utilise un gestionnaire de session, il présente les avantages suivants.

Démérite

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/activations.html

L'accès aux instances Amazon EC2 est disponible sans frais supplémentaires.

Code source

https://github.com/f96q/fargate-ssm-sample

Inclut Terraform pour créer un environnement qui s'exécute sur Dockerfile et AWS Fargate

Dockerfile

Lors de l'utilisation avec Alpine, il n'y a pas de package ssm-agent, vous devez donc le récupérer depuis la source, le construire et l'installer.

Pour les autres distorsions Linux, nous pouvons fournir un package ssm-agent que vous pouvez installer, auquel cas il vous suffit d'installer ce package. https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-manual-agent-install.html

ARG GOLANG_TAG=1.14.4-alpine3.12
ARG ALPINE_TAG=3.12

# ssm agenet builder
FROM golang:$GOLANG_TAG as ssm-agent-builder

ARG SSM_AGENT_VERSION=2.3.1205.0

RUN apk add --no-cache \
         'make~=4.3-r0' \
         'git~=2.26.2-r0' \
         'gcc~=9.3.0-r2' \
         'libc-dev~=0.7.2-r3' \
         'bash~=5.0.17-r0'

RUN wget -q https://github.com/aws/amazon-ssm-agent/archive/${SSM_AGENT_VERSION}.tar.gz && \
    mkdir -p /go/src/github.com && \
    tar xzf ${SSM_AGENT_VERSION}.tar.gz && \
    mv amazon-ssm-agent-${SSM_AGENT_VERSION} /go/src/github.com/amazon-ssm-agent && \
    echo ${SSM_AGENT_VERSION} > /go/src/github.com/amazon-ssm-agent/VERSION

WORKDIR /go/src/github.com/amazon-ssm-agent

RUN gofmt -w agent && make checkstyle || ./Tools/bin/goimports -w agent && \
    make build-linux

# merge image
FROM alpine:$ALPINE_TAG

RUN apk add --no-cache \
      'jq~=1' \
      'aws-cli~=1.18.55-r0' \
      'sudo~=1.9.0-r0'

RUN adduser -D ssm-user && \
    echo "Set disable_coredump false" >> /etc/sudo.conf && \
    echo "ssm-user ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ssm-agent-users && \
    mkdir -p /etc/amazon/ssm

COPY --from=ssm-agent-builder /go/src/github.com/amazon-ssm-agent/bin/linux_amd64/ /usr/bin
COPY --from=ssm-agent-builder /go/src/github.com/amazon-ssm-agent/bin/amazon-ssm-agent.json.template /etc/amazon/ssm/amazon-ssm-agent.json
COPY --from=ssm-agent-builder /go/src/github.com/amazon-ssm-agent/bin/seelog_unix.xml /etc/amazon/ssm/seelog.xml

COPY docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]

CMD ["amazon-ssm-agent"]

docker-entrypoint.sh


#!/bin/sh

set -e


AWS_REGION=${AWS_REGION:-}
SSM_ACTIVATION=$(aws ssm create-activation --default-instance-name "fargate-ssm" --iam-role "service-role/AmazonEC2RunCommandRoleForManagedInstances" --registration-limit 1 --region $AWS_REGION)

export SSM_ACTIVATION_CODE=$(echo $SSM_ACTIVATION | jq -r .ActivationCode)
export SSM_ACTIVATION_ID=$(echo $SSM_ACTIVATION | jq -r .ActivationId)

amazon-ssm-agent -register -code $SSM_ACTIVATION_CODE -id $SSM_ACTIVATION_ID -region $AWS_REGION

exec "$@"

Ce que vous devez faire manuellement lorsque vous avez fini d'utiliser

https://aws.amazon.com/jp/systems-manager/pricing/#On-Premises_Instance_Management

Procédez comme suit car vous serez facturé pour le temps que vous exécutez.

Recommended Posts

Comment accéder à un conteneur s'exécutant sur AWS Fargate
Comment déployer une application kotlin (java) sur AWS Fargate
Comment obtenir un heapdump à partir d'un conteneur Docker
Comment créer un conteneur Java
Comment déployer l'application Rails sur AWS (résumé de l'article)
Comment créer un serveur Web sur une instance EC2 d'AWS
Comment installer confortablement JDK 11 dans votre Mac
Un mémorandum sur l'utilisation d'Eclipse
Comment obtenir le chemin absolu d'un répertoire s'exécutant en Java
Comment enregistrer des images sur Heroku dans S3 sur AWS
Comment créer un environnement Pytorch sur Ubuntu
Comment installer Ruby sur une instance EC2 d'AWS
Mémo pour créer un environnement Servlet sur EC2 d'AWS
Indiquez comment apprendre de Docker à AKS sur AWS
Comment faire fonctionner JavaScript sur une page spécifique
[Java] Comment obtenir une requête par communication HTTP
À partir d'avril 2018 Comment installer Java 8 sur Mac
[Java] Comment exécuter des tâches régulièrement
[Docker] Comment mettre à jour à l'aide d'un conteneur dans Heroku et comment gérer l'erreur de migration
Comment obtenir le nom d'une classe / méthode exécutée en Java
Comment créer une image de conteneur légère pour les applications Java
Comment créer un serveur d'applications sur une instance EC2 d'AWS
Comment laisser un commentaire
Comment afficher des graphiques dans Ruby on Rails (LazyHighChart)
Comment installer GNOME en tant qu'environnement de bureau sur CentOS 7
Comment démarrer avec JDBC en utilisant PostgresSQL sur MacOS
[jsoup] Comment obtenir la totalité de la documentation
Comment insérer une vidéo
Comment créer une méthode
[Docker] Comment accéder à l'hôte depuis l'intérieur du conteneur. http: //host.docker.internal:
Comment faire fonctionner automatiquement un écran créé en Java sous Windows
Comment installer Adopt OpenJDK sur Debian, Ubuntu avec apt (-get)
Comment utiliser HttpClient de Java (Get)
Comment déployer Laravel sur CentOS 7
Comment démarrer avec Slim
Comment "évider" une vue sur Android
Comment utiliser Ruby on Rails
Comment signer Minecraft MOD
Comment créer un pilote JDBC
Créer un serveur Minecraft sur AWS
Comment déployer Bootstrap sur Rails
Pour exécuter JavaFX sur Docker
Comment obtenir des paramètres dans Spark