VPC endpoint로 private subnet 접근

문한성·2023년 6월 15일
0

부트캠프

목록 보기
109/123
post-thumbnail

VPC 생성

VPC 등 옵션을 체크해서 public subnet 2개 private subnet 2개로 구성된 VPC를 생성합니다.

vpc endpoint 생성


aws서비스를 선택한후 ec2를 선택한다.
vpc는 위에서 새로만든 vpc, 가용영역과 private subnet을 선택해준후 생성한다.

ec2 생성

테스트를 위해서 private 서브넷에 ec2를 생성해준다.

lambda 생성



람다 함수를 생성한 후 권한의 정책에 들어가서 정책을 밑의 JSON코드를 붙여넣기 하여 수정 해준다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "LambdaBasicExecution",
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": "arn:aws:logs:*:*:*"
    },
    {
      "Sid": "LambdaVPCAccess",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateNetworkInterface",
        "ec2:DeleteNetworkInterface",
        "ec2:DescribeNetworkInterfaces",
        "ec2:AssignPrivateIpAddresses"
      ],
      "Resource": "*"
    },
    {
      "Sid": "EC2DescribeInstances",
      "Effect": "Allow",
      "Action": "ec2:DescribeInstances",
      "Resource": "*"
    },
    {
      "Sid": "EC2DescribeVpcs",
      "Effect": "Allow",
      "Action": "ec2:DescribeVpcs",
      "Resource": "*"
    },
    {
      "Sid": "EC2DescribeSubnets",
      "Effect": "Allow",
      "Action": "ec2:DescribeSubnets",
      "Resource": "*"
    }
  ]
}
  • AWSLambdaBasicExecutionRole: CloudWatch Logs에 로그를 쓰기 위한 기본 권한을 제공합니다.
  • ec2:DescribeInstances: Lambda 함수가 EC2 인스턴스를 설명하도록 허용합니다.
  • ec2:DescribeVpcs: Lambda 함수가 VPC를 설명하도록 허용합니다.
  • ec2:DescribeSubnets: Lambda 함수가 VPC 내의 서브넷을 설명하도록 활성화합니다.

lambda 코드 로컬에서 작성

로컬에서 폴더를 새로 만들어서 aws-sdk를 받아준다.

npm install aws-sdk

index.mjs 파일을 만들어서 아래의 코드를 입력한다.
ec2에 연결을 확인하는 코드다.

import AWS from 'aws-sdk';

export const handler = async (event, context) => {
  try {
    // Configure the AWS SDK with the appropriate region
    AWS.config.update({ region: 'ap-northeast-2' }); // Replace with your desired region

    // Create a new EC2 instance object
    const ec2 = new AWS.EC2();

    // Specify the EC2 instance ID or any other required parameters
    const params = {
      InstanceIds: ['i-0158856303b88551d'] // Replace with your EC2 instance ID
    };

    // Use the describeInstances method to retrieve information about the EC2 instance
    const result = await ec2.describeInstances(params).promise();

    // Process the result and extract the required information
    const instanceData = result.Reservations[0].Instances[0];

    // Log the retrieved information
    console.log('EC2 Instance ID:', instanceData.InstanceId);
    console.log('EC2 Instance State:', instanceData.State.Name);

    const response = {
      statusCode: 200,
      body: JSON.stringify({ message: 'Communication with EC2 instance successful' })
    };
    return response;
  } catch (error) {
    console.error('An error occurred:', error);

    const response = {
      statusCode: 500,
      body: JSON.stringify({ message: 'An error occurred' })
    };
    return response;
  }
};

연결 확인

lambda의 cloudWatch 로그를 확인한다.

profile
기록하고 공유하려고 노력하는 DevOps 엔지니어

0개의 댓글