Docker에서 boto3을 사용하여 EC2 중지
Dockerfile
AWSCLI v2도 함께 넣어 둡니다.
FROM python:3
USER root
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
unzip \
jq \
less \
vim \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
RUN unzip awscliv2.zip
RUN ./aws/install
RUN pip install --upgrade pip
RUN pip install --upgrade setuptools
RUN pip install boto3
docker-compose.yml
boto3에서 AWS에 연결하기 위한 인증은 AWSCLI의 자격 증명을 사용합니다.
PC 로컬 홈 디렉토리 $HOME/.aws/credentials
에 이미 액세스 키 정보를 작성했으므로 볼륨으로 연결하여 공유합니다. Docker 안에 들어가고 나서 aws configure
로 설정하거나 환경 변수를 설정하는 방법도 있습니다만, 일회용을 생각하면 이 방법이 즐거울 것 같습니다.
version: '3'
services:
python3:
build: .
container_name: 'python3'
working_dir: '/root/'
tty: true
volumes:
- ./:/root
- $HOME/.aws/:/root/.aws/
컨테이너를 시작하고 연결
# ビルドと起動
docker-compose up -d --build
# 確認
docker-compose ps
Name Command State Ports
---------------------------------
python3 python3 Up
# 接続
docker-compose exec python3 bash
root@bbb321efbfea:~#
EC2 중지 스크립트 실행
EC2는 AmazonLinux2의 인스턴스를 실행하고 있으며 AmazonLinux01
라는 이름 태그를 붙입니다.
통상은 client.stop_instances()
에 인스턴스 ID를 직접 써 주면 OK입니다만, 이번은 Name 태그를 기초로 인스턴스 ID를 취득해 변수에 격납해, 그 변수를 건네주는 방식으로 해 보았습니다.
main.pyimport boto3
# variables
instance_name = "AmazonLinux01"
# get instance id
client = boto3.client("ec2")
instance_id = client.describe_instances(
Filters=[{"Name": "tag:Name","Values": [instance_name]}]
)["Reservations"][0]["Instances"][0]["InstanceId"]
# stop ec2
response = client.stop_instances(
InstanceIds=[
instance_id
]
)
print(response)
실행해 보면 다음과 같은 응답이 반환됩니다 (print)
# EC2停止
python main.py
{'StoppingInstances': [{'CurrentState': {'Code': 64, 'Name': 'stopping'}, 'InstanceId': 'i-00e79808cbf3f76a8', 'PreviousState': {'Code': 16, 'Name': 'running'}}], 'ResponseMetadata': {'RequestId': 'dccb6bc8-35e7-45a0-8cc4-ce8c14df7a65', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'dccb6bc8-35e7-45a0-8cc4-ce8c14df7a65', 'cache-control': 'no-cache, no-store', 'strict-transport-security': 'max-age=31536000; includeSubDomains', 'content-type': 'text/xml;charset=UTF-8', 'content-length': '579', 'date': 'Wed, 07 Apr 2021 22:14:40 GMT', 'server': 'AmazonEC2'}, 'RetryAttempts': 0}}
콘솔 화면에서 보면 '정지됨'으로 바뀌었습니다.
덧붙여서 client.stop_instances()
의 stop
를 start
로 바꾸면 EC2를 기동시킬 수 있습니다.
참고 링크
Docker 컨테이너에서 위로 이동하는 AWS SDK에 로컬 자격 증명(~/.aws/credentials)을 로드합니다.
Boto3 Docs - client.stop_instances()
Reference
이 문제에 관하여(Docker에서 boto3을 사용하여 EC2 중지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/m-oka-system/items/aa55fb21540711807bd3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
FROM python:3
USER root
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
unzip \
jq \
less \
vim \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
RUN unzip awscliv2.zip
RUN ./aws/install
RUN pip install --upgrade pip
RUN pip install --upgrade setuptools
RUN pip install boto3
boto3에서 AWS에 연결하기 위한 인증은 AWSCLI의 자격 증명을 사용합니다.
PC 로컬 홈 디렉토리
$HOME/.aws/credentials
에 이미 액세스 키 정보를 작성했으므로 볼륨으로 연결하여 공유합니다. Docker 안에 들어가고 나서 aws configure
로 설정하거나 환경 변수를 설정하는 방법도 있습니다만, 일회용을 생각하면 이 방법이 즐거울 것 같습니다.version: '3'
services:
python3:
build: .
container_name: 'python3'
working_dir: '/root/'
tty: true
volumes:
- ./:/root
- $HOME/.aws/:/root/.aws/
컨테이너를 시작하고 연결
# ビルドと起動
docker-compose up -d --build
# 確認
docker-compose ps
Name Command State Ports
---------------------------------
python3 python3 Up
# 接続
docker-compose exec python3 bash
root@bbb321efbfea:~#
EC2 중지 스크립트 실행
EC2는 AmazonLinux2의 인스턴스를 실행하고 있으며 AmazonLinux01
라는 이름 태그를 붙입니다.
통상은 client.stop_instances()
에 인스턴스 ID를 직접 써 주면 OK입니다만, 이번은 Name 태그를 기초로 인스턴스 ID를 취득해 변수에 격납해, 그 변수를 건네주는 방식으로 해 보았습니다.
main.pyimport boto3
# variables
instance_name = "AmazonLinux01"
# get instance id
client = boto3.client("ec2")
instance_id = client.describe_instances(
Filters=[{"Name": "tag:Name","Values": [instance_name]}]
)["Reservations"][0]["Instances"][0]["InstanceId"]
# stop ec2
response = client.stop_instances(
InstanceIds=[
instance_id
]
)
print(response)
실행해 보면 다음과 같은 응답이 반환됩니다 (print)
# EC2停止
python main.py
{'StoppingInstances': [{'CurrentState': {'Code': 64, 'Name': 'stopping'}, 'InstanceId': 'i-00e79808cbf3f76a8', 'PreviousState': {'Code': 16, 'Name': 'running'}}], 'ResponseMetadata': {'RequestId': 'dccb6bc8-35e7-45a0-8cc4-ce8c14df7a65', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'dccb6bc8-35e7-45a0-8cc4-ce8c14df7a65', 'cache-control': 'no-cache, no-store', 'strict-transport-security': 'max-age=31536000; includeSubDomains', 'content-type': 'text/xml;charset=UTF-8', 'content-length': '579', 'date': 'Wed, 07 Apr 2021 22:14:40 GMT', 'server': 'AmazonEC2'}, 'RetryAttempts': 0}}
콘솔 화면에서 보면 '정지됨'으로 바뀌었습니다.
덧붙여서 client.stop_instances()
의 stop
를 start
로 바꾸면 EC2를 기동시킬 수 있습니다.
참고 링크
Docker 컨테이너에서 위로 이동하는 AWS SDK에 로컬 자격 증명(~/.aws/credentials)을 로드합니다.
Boto3 Docs - client.stop_instances()
Reference
이 문제에 관하여(Docker에서 boto3을 사용하여 EC2 중지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/m-oka-system/items/aa55fb21540711807bd3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# ビルドと起動
docker-compose up -d --build
# 確認
docker-compose ps
Name Command State Ports
---------------------------------
python3 python3 Up
# 接続
docker-compose exec python3 bash
root@bbb321efbfea:~#
EC2는 AmazonLinux2의 인스턴스를 실행하고 있으며
AmazonLinux01
라는 이름 태그를 붙입니다.통상은
client.stop_instances()
에 인스턴스 ID를 직접 써 주면 OK입니다만, 이번은 Name 태그를 기초로 인스턴스 ID를 취득해 변수에 격납해, 그 변수를 건네주는 방식으로 해 보았습니다.main.py
import boto3
# variables
instance_name = "AmazonLinux01"
# get instance id
client = boto3.client("ec2")
instance_id = client.describe_instances(
Filters=[{"Name": "tag:Name","Values": [instance_name]}]
)["Reservations"][0]["Instances"][0]["InstanceId"]
# stop ec2
response = client.stop_instances(
InstanceIds=[
instance_id
]
)
print(response)
실행해 보면 다음과 같은 응답이 반환됩니다 (print)
# EC2停止
python main.py
{'StoppingInstances': [{'CurrentState': {'Code': 64, 'Name': 'stopping'}, 'InstanceId': 'i-00e79808cbf3f76a8', 'PreviousState': {'Code': 16, 'Name': 'running'}}], 'ResponseMetadata': {'RequestId': 'dccb6bc8-35e7-45a0-8cc4-ce8c14df7a65', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'dccb6bc8-35e7-45a0-8cc4-ce8c14df7a65', 'cache-control': 'no-cache, no-store', 'strict-transport-security': 'max-age=31536000; includeSubDomains', 'content-type': 'text/xml;charset=UTF-8', 'content-length': '579', 'date': 'Wed, 07 Apr 2021 22:14:40 GMT', 'server': 'AmazonEC2'}, 'RetryAttempts': 0}}
콘솔 화면에서 보면 '정지됨'으로 바뀌었습니다.
덧붙여서
client.stop_instances()
의 stop
를 start
로 바꾸면 EC2를 기동시킬 수 있습니다.참고 링크
Docker 컨테이너에서 위로 이동하는 AWS SDK에 로컬 자격 증명(~/.aws/credentials)을 로드합니다.
Boto3 Docs - client.stop_instances()
Reference
이 문제에 관하여(Docker에서 boto3을 사용하여 EC2 중지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/m-oka-system/items/aa55fb21540711807bd3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Docker에서 boto3을 사용하여 EC2 중지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/m-oka-system/items/aa55fb21540711807bd3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)