CDK で EC2 のインスタンスを作る
こんにちはインフラが好きなエンジニアのししぃです。
今回は EC2 インスタンスの作成方法について調査していたので、そのメモを残しておきます。
はじめに
AWS でコンピュートリソースを作成する際、一般的には ECS や Lambda を使用することが多いです。しかし稀に EC2 を利用するケースもあります。
具体的なケースとしては RDS の踏み台サーバーや、開発時の一時的な動作確認であると便利なことがあります。こういったケースに対応するために、CDK を使用して EC2 を作成する場合にどれくらい手間がかかるか知っておくと、開発時に役立つかもしれません。
前提
CDK を使って EC2 を作成してアクセスします。
また EC2 は単独で作成してもアクセスできないため、VPC および関連するサブネットも同時に作成します。インスタンスへのアクセスにはセッションマネージャーを経由して行います。
なお今回作成するリソースには費用が発生する可能性がありますので、リソースは適宜削除することをお忘れなきようご注意ください。
では 作っていきましょう 👻
全体の構成ですが以下のようになります。
VPC の上に T2 インスタンスが乗っているだけのシンプルな構成です。
対応するプロジェクトのコードは以下になります。
import aws_cdk as cdk
app = cdk.App()
stack = cdk.Stack(app, "cdk-ec2-deploy-stack")
# VPC
VPC_CIDR = "10.141.0.0/16" # お好みで変更ください
vpc = cdk.aws_ec2.Vpc(
stack,
"vpc",
cidr=VPC_CIDR,
max_azs=1,
subnet_configuration=[
cdk.aws_ec2.SubnetConfiguration(
name="public",
subnet_type=cdk.aws_ec2.SubnetType.PUBLIC,
),
],
)
# EC2
instance = cdk.aws_ec2.Instance(
stack,
"instance",
vpc=vpc,
vpc_subnets=cdk.aws_ec2.SubnetSelection(subnet_type=cdk.aws_ec2.SubnetType.PUBLIC),
instance_type=cdk.aws_ec2.InstanceType.of(cdk.aws_ec2.InstanceClass.T2, cdk.aws_ec2.InstanceSize.MICRO),
machine_image=cdk.aws_ec2.AmazonLinuxImage(generation=cdk.aws_ec2.AmazonLinuxGeneration.AMAZON_LINUX_2),
ssm_session_permissions=True,
)
app.synth()
VPC 側は他の記事でも触れたことがあるので省略します。
EC2 側はすごく短いコードで表現できてしまっていて、とくに解説することがないですね。😅
セッションマネージャーを使うのもssm_session_permissions
を True にするだけで OK です。お手軽ですね。
これを以下のコマンドでデプロイします。
$ cdk -a "python app.py" deploy
完了するまで少し待って完成です。
動作確認
デプロイが完了したら、セッションマネージャーを使ってインスタンスにアクセスしてみます。
まず AWS のコンソールにログインして EC2 のコンソールへ移動します。次にデプロイしたインスタンスを選択して、画面上の「接続」というボタンをクリックします。
すると ↓ のような画面が出てくるので、セッションマネージャーを選択して「接続」をクリックします。
しばらくするとインスタンスのターミナルが起動して、アクセス完了です。
ためしに ↓ みたいなコマンドを打って、自身が無事にインスタンスへアクセスできていることを確認します。
$ sh-4.2$ hostname
>ip-10-141-88-95.ap-northeast-1.compute.internal
以上です。
まとめ
今回は CDK を使用して EC2 インスタンスを作成する方法について調査してみました。
結果 VPC さえあればかなり短いコードで EC2 を作成できることがわかりました。
今後疎通確認等で一時的に EC2 を作りたい場合とかに CDK を使ってサクッと作ってしまうと開発体験が向上するかもしれないですね。
以上です。ありがとうございました。