このページの本文へ

FIXER Tech Blog - Development

FIXER cloud.config Tech Blog

AWS Systems Manager on EC2の検証環境を構築するAWS CLI v2 on PowerShell

2023年06月12日 09時00分更新

文● 村上滉樹/FIXER

  • この記事をはてなブックマークに追加
  • 本文印刷

 本記事はFIXERが提供する「cloud.config Tech Blog」に掲載された「【AWS CLI v2】AWS Systems Manager on EC2 の検証環境を構築するPowerShellを配布しました!」を再編集したものです。

 こんにちは、FIXERの村上です。

 最近、AWS Systems Manager on EC2の技術検証が増えてきたため、AWS CLI on PowerShellで検証環境の構築ができるようにしました。

1. 実行環境

・PowerShell 7
・AWS CLI v2

2. 検証環境の作成

(1) パラメータ を設定する

 PowerShellにて AWS CLIを実行するために必要なパラメーターを定義します。

$vpc_ipv4_cidr_block = '10.0.0.0/16'
$subnet_ipv4_cidr_block = '10.0.0.0/24'
$security_group_name = 'techblog-ssm-sg'
$security_group_description = 'Security group for techblog.'
$key_name = 'techblog-keypair'
$iam_instance_profile_name = 'EC2InstanceProfile'
$role_name = 'CustomRoleEC2Administrator'
$policy_document = @"
{
 "Version": "2012-10-17",
 "Statement": [
 {
 "Effect": "Allow",
 "Principal": {
 "Service": "ec2.amazonaws.com"
 },
 "Action": "sts:AssumeRole"
 }
 ]
}
"@
$ip_permissions = @"
{
 "IpProtocol": "tcp",
 "FromPort": 443,
 "ToPort": 443,
 "IpRanges": [
 {
 "CidrIp": "$vpc_ipv4_cidr_block"
 }
 ]
}
"@
$region = 'ap-northeast-1'

(2) キーペア を作成する(省略可能)

 既存のキーペアを利用される場合は、省略可能です。

 その場合、$key_nameの値に既存キーペア名を設定してください。

# キーペアを作成して、カレントディレクトリ配下に公開鍵をダウンロードする
aws ec2 create-key-pair --key-name $key_name --key-type rsa --key-format pem --output text > "$key_name.pem"


(3) 検証環境 を作成する

 下記のPowerShellを実行します。

# IAMロール を作成する
aws iam create-role --role-name $role_name --assume-role-policy-document $policy_document

# IAMロールの反映まで 30秒待機する
Start-Sleep -Seconds 30

# IAMロールに [AmazonSSMManagedInstanceCore] を付与する
aws iam attach-role-policy --role-name $role_name --policy-arn 'arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore'

# IAM インスタンスプロファイル を作成する
aws iam create-instance-profile --instance-profile-name $iam_instance_profile_name

# IAM インスタンスプロファイル に IAMロール を割り当てる
aws iam add-role-to-instance-profile --instance-profile-name $iam_instance_profile_name --role-name $role_name

# VPC を作成する
$vpc_id = aws ec2 create-vpc --cidr-block $vpc_ipv4_cidr_block --query 'Vpc.VpcId' --output text

# VPCのDNS属性で DNSホスト名とDNS解決 を有効にする
aws ec2 modify-vpc-attribute --vpc-id $vpc_id --enable-dns-hostnames '{"Value":true}'
aws ec2 modify-vpc-attribute --vpc-id $vpc_id --enable-dns-support '{"Value":true}'

# サブネット を作成する
$subnet_id = aws ec2 create-subnet --vpc-id $vpc_id --cidr-block $subnet_ipv4_cidr_block --query 'Subnet.SubnetId' --output text

# セキュリティグループ を作成する
$sg_id = aws ec2 create-security-group --group-name $security_group_name --description $security_group_description --vpc-id $vpc_id --query 'GroupId' --output text

# AWS Systems Manager用のインバウンドルール を追加する
aws ec2 authorize-security-group-ingress --group-id $sg_id --ip-permissions $ip_permissions

# AMIのID を取得する

### Windows Server 2022 を選ぶ場合
$ami_id = aws ec2 describe-images --owners amazon --filters 'Name=name,Values=Windows_Server-2022-Japanese-Full-Base*' 'Name=state,Values=available' --query 'sort_by(Images, &CreationDate)[-1].ImageId' --region $region --output text

### Amazon Linux 3 を選ぶ場合
$ami_id = aws ec2 describe-images --owners amazon --filters 'Name=name,Values=al2023-ami-2023.*.*.*-kernel-6.1-x86_64' 'Name=state,Values=available' --query 'sort_by(Images, &CreationDate)[-1].[ImageId]' --region $region --output text

# インスタンスタイプ を設定する

### Windows Server 2022 を選んだユーザー向け
$instance_type = 'm6i.large'

### Amazon Linux 3 を選んだユーザー向け
$instance_type = 't2.micro'

# EC2インスタンス を作成する
aws ec2 run-instances --image-id $ami_id --instance-type $instance_type --key-name $key_name --subnet-id $subnet_id --security-group-ids $sg_id --iam-instance-profile Name=$iam_instance_profile_name --no-associate-public-ip-address

# インターフェースVPCエンドポイント を作成する
aws ec2 create-vpc-endpoint --vpc-id $vpc_id --vpc-endpoint-type Interface --service-name com.amazonaws.$region.ssm --subnet-ids $subnet_id --security-group-ids $sg_id
aws ec2 create-vpc-endpoint --vpc-id $vpc_id --vpc-endpoint-type Interface --service-name com.amazonaws.$region.ssmmessages --subnet-ids $subnet_id --security-group-ids $sg_id
aws ec2 create-vpc-endpoint --vpc-id $vpc_id --vpc-endpoint-type Interface --service-name com.amazonaws.$region.ec2messages --subnet-ids $subnet_id --security-group-ids $sg_id

### (任意) Windows Server 2022 を選んだユーザーは下記のエンドポイントも追加する
aws ec2 create-vpc-endpoint --vpc-id $vpc_id --vpc-endpoint-type Interface --service-name com.amazonaws.$region.ec2 --subnet-ids $subnet_id --security-group-ids $sg_id

 リソースが利用できるまで、実行完了後から5~10分ほどかかります。

 [AWS Systems Manager]コンソールにアクセスして、[フリートマネージャー] を選択します。

 リモート接続したい[ノードID]を選択して、[ノードアクション] から [Connect]オプションにてサーバーアクセスを実行します。

 上記のような画面が表示された場合、検証環境の構築は正常に完了しました。

村上 滉樹/FIXER
FIXER|エンタープライズ部門所属
2020年4月 新卒入社
職業:Cloud Solution Engineer(主にインフラ)
好きなAWS/Azureサービス:AWS Fargate/App Service

カテゴリートップへ

この連載の記事