FIXER cloud.config Tech Blog
AWS Systems Manager on EC2の検証環境を構築するAWS CLI v2 on PowerShell
2023年06月12日 09時00分更新
本記事は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
この連載の記事
-
TECH
Github Copilotで、コミットメッセージもAIに考えてもらう方法 -
TECH
Terraform 1.5から追加されたimportブロックがすごい!! -
TECH
Prometheusで辞書形式のメトリクスを持つExporterを作りたい! -
TECH
GTM経由でカスタムディメンションを取得するTypeScript -
TECH
Grafana Tempo×OpenTelemetryの導入方法 -
TECH
Grafana TempoとLokiの連携で進化するログ解析とトレーシング -
TECH
「Microsoft 365開発者プログラム」のアクティベーション方法 -
TECH
サインインなしでも使える! 開発者向けAI検索エンジン「Phind」をご紹介 -
TECH
え、高級言語しか触ったことないのにCPUを自作するんですか!? -
TECH
Terraformを用いてAKS上にFluxを導入する方法 -
TECH
Github Copilot Chatをさらに便利にする3つの機能 - この連載の一覧へ