AWS EC2 생성
# 기존 코드
...
resource "aws_instance" "ec2_1" {
ami = "ami-04b3f91ebd5bc4f6d" # AMI 코드
instance_type = "t2.micro"
subnet_id = aws_subnet.sub_1.id
vpc_security_group_ids = [aws_security_group.sg_1.id]
tags = {
Name = "${var.prefix}-ec2-1"
}
}
공인 IP 할당
...
resource "aws_subnet" "sub_1" {
vpc_id = aws_vpc.vpc_1.id
cidr_block = "10.0.1.0/24"
availability_zone = "${var.region}a"
map_public_ip_on_launch = true # 추가
tags = {
Name = "${var.prefix}-sub-1"
}
}
...
resource "aws_instance" "ec2_1" {
ami = "ami-04b3f91ebd5bc4f6d"
instance_type = "t2.micro"
subnet_id = aws_subnet.sub_1.id
vpc_security_group_ids = [aws_security_group.sg_1.id]
associate_public_ip_address = true # 공인 IP 할당
tags = {
Name = "${var.prefix}-ec2-1"
}
}
- 공인 IP 할당 후에 EC2 인스턴스 요약 > 연결 > EC2 인스턴스 연결 - 연결 클릭하여 서버 접속
- 'sudo su' 명령어로 root 유저로 변경 가능
EC2를 위한 IAM Role 생성과 인스턴스 프로파일
# EC2를 위한 IAM Role 생성
resource "aws_iam_role" "ec2_role_1" {
name = "${var.prefix}-ec2-role-1"
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Effect": "Allow",
"Sid": ""
}
]
}
EOF
}
# 권한1
resource "aws_iam_role_policy_attachment" "s3_full_access" {
role = aws_iam_role.ec2_role_1.name
policy_arn = "arn:aws:iam::aws:policy/AmazonS3FullAccess"
}
# 권한2
resource "aws_iam_role_policy_attachment" "ec2_ssm" {
role = aws_iam_role.ec2_role_1.name
policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonEC2RoleforSSM"
}
# 인스턴스 프로파일
resource "aws_iam_instance_profile" "instance_profile_1" {
name = "${var.prefix}-instance-profile-1"
role = aws_iam_role.ec2_role_1.name
}
# EC2 생성
resource "aws_instance" "ec2_1" {
ami = "ami-04b3f91ebd5bc4f6d"
instance_type = "t2.micro"
subnet_id = aws_subnet.sub_1.id
vpc_security_group_ids = [aws_security_group.sg_1.id]
associate_public_ip_address = true
iam_instance_profile = aws_iam_instance_profile.instance_profile_1.name
tags = {
Name = "${var.prefix}-ec2-1"
}
}
- 인스턴스 프로파일을 통해 EC2와 Role이 연결된다.
EC2에서 S3 조작하기
- aws configure가 필요 없다.
- 공인 IP 할당 후에 EC2 인스턴스 요약 > 연결 > Session Manager - 연결 클릭하여 서버 접속
bash
sudo su
aws configure list
aws s3 ls
aws s3 mb s3://{bucket-name}
aws s3 rb s3://{bucket-name}
aws configure list => 이미 액세스 키, 시크릿 키가 존재한다.(수명이 짧고, 자동 갱신됨)
aws s3 ls => 오류가 뜨지 않는다.
aws s3 mb s3://{버킷_이름} : 버킷 생성
aws s3 rb s3://{버킷_이름} --force : 버킷 삭제
테라폼으로 버킷 생성하기
resource "aws_s3_bucket" "bucket_yuri_1" {
bucket = "${var.prefix}-bucket-yuri-1"
tags = {
Name = "${var.prefix}-bucket-yuri-1"
}
}
AWS 콘솔에서 퍼블릭 버킷 생성하고 클라우드 쉘에서 파일 업로드하기
- 버킷 생성 후 아래와 같이 버킷 정책을 수정해준다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::{버킷_이름}/*"
}
]
}
- 클라우드 쉘에서 아래와 같이 명령어를 입력한다.
wget {이미지_URL} : 이미지 다운로드
mv {이미지_이름} {이미지_이름}.jpg : 다운로드 받은 이미지 파일에 확장자 붙이기
aws s3 cp {이미지_이름} s3://{버킷_이름} : 이미지 업로드
aws s3 ls s3://{버킷_이름} : 버킷 안의 파일 조회
aws s3 rm {이미지_이름} s3://{버킷_이름/이미지_이름} : 파일 삭제
'프로젝트 & TIL > 일별 공부 기록 (백엔드 스쿨)' 카테고리의 다른 글
91일차 - 테라폼과 AWS 클라우드 프론트 (0) | 2023.07.03 |
---|---|
90일차 - 테라폼의 리소스 생성 순서, AWS 엘라스틱 IP, Virtual Domain (0) | 2023.06.30 |
88일차 - 테라폼, 인터넷 게이트웨이와 라우팅 테이블 (0) | 2023.06.28 |
87일차 - AWS, Git과 테라폼 연결하기, 테라폼 명령어 (0) | 2023.06.27 |
86일차 - AWS, 테라폼 (0) | 2023.06.26 |