[DOCKER] So gelangen Sie in einen Container, der auf AWS Fargate ausgeführt wird

Einführung

Im Fall von AWS Fargate ist es unpraktisch, dass ich nicht nachforschen kann, da es nicht im Container läuft, wenn ein Problem auftritt. Daher habe ich untersucht, wie der Container betreten wird.

Wenn Sie ssm-agent verwenden, müssen Sie den SSH-Port nicht öffnen und den öffentlichen Schlüssel für SSH verwalten, also habe ich ssm-agent verwendet.

So installieren Sie sshd in einem Container

  1. Lassen Sie den SSH-Port offen
  2. Fügen Sie den öffentlichen Schlüssel des Benutzers zu ssh zu ~ / .ssh / authorzied_keys im Container hinzu
  3. Installieren Sie sshd im Container und starten Sie sshd, wenn der Container startet.

verdienen

Fehler

So installieren Sie ssm-agent in einem Container

  1. Erstellen und registrieren Sie eine Aktivierung mit Hybridaktivierung, wenn Sie den Container starten und ssm-agent starten
  2. Verwenden Sie den Sitzungsmanager, um den Container einzugeben

verdienen

Da ein Sitzungsmanager verwendet wird, hat er die folgenden Vorteile.

Fehler

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

Der Zugriff auf Amazon EC2-Instanzen ist ohne zusätzliche Kosten möglich.

Quellcode

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

Enthält Terraform zum Erstellen einer Umgebung, die unter Dockerfile und AWS Fargate ausgeführt wird

Dockerfile

Bei Verwendung mit Alpine gibt es kein ssm-agent-Paket. Sie müssen es daher aus der Quelle holen, erstellen und installieren.

Für andere Linux-Verzerrungen stellen wir möglicherweise ein ssm-agent-Paket zur Verfügung, das Sie installieren können. In diesem Fall müssen Sie nur dieses Paket installieren. 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 "$@"

Was Sie manuell tun müssen, wenn Sie fertig sind

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

Gehen Sie wie folgt vor, da Ihnen die Zeit, die Sie ausführen, in Rechnung gestellt wird.

Recommended Posts

So gelangen Sie in einen Container, der auf AWS Fargate ausgeführt wird
So stellen Sie eine Kotlin (Java) -App auf AWS fargate bereit
So erhalten Sie einen Heapdump aus einem Docker-Container
So erstellen Sie einen Java-Container
So stellen Sie die Rails-Anwendung in AWS bereit (Artikelzusammenfassung)
So erstellen Sie einen Webserver auf einer EC2-Instanz von AWS
So bringen Sie JDK 11 bequem in den Mac
Ein Memorandum zur Verwendung von Eclipse
So ermitteln Sie den absoluten Pfad eines in Java ausgeführten Verzeichnisses
So speichern Sie Bilder auf Heroku in S3 unter AWS
So erstellen Sie eine Pytorch-Umgebung unter Ubuntu
So installieren Sie Ruby auf einer EC2-Instanz von AWS
Memo zum Erstellen einer Servlet-Umgebung auf EC2 von AWS
Führen Sie auf, wie Sie in AWS von Docker zu AKS lernen können
So funktioniert JavaScript auf einer bestimmten Seite
[Java] So erhalten Sie eine Anfrage per HTTP-Kommunikation
Stand April 2018 So installieren Sie Java 8 auf einem Mac
[Java] Wie man Aufgaben regelmäßig ausführt
[Docker] Wie man mit einem Container in Heroku aktualisiert und wie man mit Migrate Error umgeht
So erhalten Sie den Namen einer Klasse / Methode, die in Java ausgeführt wird
So erstellen Sie ein leichtes Container-Image für Java-Apps
So erstellen Sie einen Anwendungsserver auf einer EC2-Instanz von AWS
Wie hinterlasse ich einen Kommentar?
So zeigen Sie Diagramme in Ruby on Rails an (LazyHighChart)
So installieren Sie GNOME als Desktop-Umgebung unter CentOS 7
Erste Schritte mit JDBC mit PostgresSQL unter MacOS
[jsoup] So erhalten Sie die gesamte Dokumentation
So fügen Sie ein Video ein
So erstellen Sie eine Methode
[Docker] Zugriff auf den Host aus dem Container heraus. http: //host.docker.internal:
So bedienen Sie automatisch einen in Java unter Windows erstellten Bildschirm
So installieren Sie Adopt OpenJDK unter Debian, Ubuntu mit apt (-get)
Verwendung von HttpClient (Get) von Java
So stellen Sie Laravel für CentOS 7 bereit
Wie fange ich mit schlank an?
Wie man eine Ansicht auf Android "aushöhlt"
Verwendung von Ruby on Rails
Wie unterschreibe ich Minecraft MOD?
So erstellen Sie einen JDBC-Treiber
Erstellen Sie einen Minecraft-Server auf AWS
So stellen Sie Bootstrap auf Rails bereit
So führen Sie JavaFX unter Docker aus
So erhalten Sie Parameter in Spark