EC2-Classic リソース調査

# 経緯
EC2-Classicのサービスが2022年8月15日で終了する。
EC2-Classicが有効なアカウントにて、まだEC2-Classicのサービスを使っている場合はVPCへ移行が必要となる。
それにあたり、現在の環境でEC2-Classicのサービスを使用していないか調査を行う。

[EC2-Classic Networking は販売終了になります — 準備方法はこちら](https://aws.amazon.com/jp/blogs/news/ec2-classic-is-retiring-heres-how-to-prepare/)

## EC2-Classic 確認ツール
 [github.com](https://github.com/aws-samples/ec2-classic-resource-finder) 
Classic-Resource-Finder.sh

## 確認手順
* インスタンス作成（ロール等でのIAMパーミッションが必要）
* 作成したインスタンスで以下のコマンドを実行し、CLIとJQとGitをインストールする
* Gitからスクリプトを取得して、実行

```
$ aws --version
## 入っていない場合はCLIをインストール

$ yum -y install jq
$ yum -y install git

$ git clone https://github.com/aws-samples/ec2-classic-resource-finder.git
$ cd ec2-classic-resource-finder
$ sh Classic-Resource-Finder.sh
```

出力されたCSVファイルを保存し、確認

##出力CSV
実行したディレクトリ直下に出力されるCSVファイルの一覧

| ファイル名  | 説明 | 出力 |
|:-----------|:------------:|:------------:|
| Classic_Platform_Status.csv  | EC2-Classicにリソースを起動する機能を備えたリージョン  | Region, Status (Enabled, Disabled) | 
| Classic_EIPs.csv  | EC2-Classicに割り当てられたElasticIP  | IP Address, Region | 
| Classic_EC2_Instances.csv  | EC2-Classicを利用したEC2インスタンス  | Instance ID, Region | 
| Classic_SGs.csv  | EC2-Classicで設定されたセキュリティグループ  | Security Group ID, Region | 
| Classic_ClassicLink_VPCs.csv  | ClassicLinkが有効になっているVPC  | VPC ID, Region | 
| Classic_Auto_Scaling_Groups.csv  | EC2-ClassicでEC2インスタンスを起動設定したAuto-Scalingグループ  | ASG ARN, Region | 
| Classic_CLBs.csv  | EC2-Classicを利用したクラシックロードバランサー  | CLB Name, Region | 
| Classic_RDS_Instances.csv  | EC2-Classicを利用したRDSデータベースインスタンス  | DB Instance ARN, Region | 
| Classic_ElastiCache_Clusters.csv  | EC2-Classicを利用したElastiCacheクラスター  | Cluster ARN, Region | 
| Classic_Redshift_Clusters.csv  | EC2-Classicを利用したRedshiftクラスター  | Cluster Identifier, Region | 
| Classic_ElasticBeanstalk_Applications_Environments.csv  | EC2-Classicで実行設定したElasticBeanstalkアプリケーションと環境  | Application Name, Environment Name, Region | 
| Classic_DataPipelines.csv  | EC2-Classicでインスタンスを起動設定したDataPipelines  | Pipeline ID, Region | 
| Classic_EMR_Clusters.csv  | EC2-Classicでインスタンスを起動設定できるEMRクラスター  | Cluster ID, Region | 
| Classic_OpsWorks_Stacks.csv  | EC2-Classic用に構成されたリソースを持つOpsWorksスタック  | Stack ID, Region | 
| Error.txt  | スクリプトの実行中に発生したエラー  | print text of error outputs | 
　
## CSVファイルが作成されない場合

 **Classic_RDS_Instances.csv** 
：VPCがアタッチされている場合は変数にIDを、Classicの場合は変数を空としてCSVを作成するため、Classicが利用されていない場合はCSVが作成されない。

 **Classic_ElasticBeanstalk_Applications_Environments.csv** 
：ElasticBeanstalkでVPCが使われていなかったらCSVが作成されるため、Classicが利用されていない場合はCSVが作成されない。

 **Classic_EMR_Clusters.csv**
：クラスターにサブネットが構成されていない場合はCSVが作成されるため、サブネットが構成されている場合とEMRクラスターを利用していない場合はCSVが作成されない。

 **Classic_DataPipelines.csv** 
：ec2 リソース サブネット ID が 設定されていない場合のみCSV作成されるため、サブネットが構成されている場合はCSVが作成されない。

## エラーが出る場合

datapipelineにて非活性化されているリージョンについては、以下のようなエラーが発生する。

```
 Could not connect to the endpoint URL: "https://datapipeline.us-west-1.amazonaws.com/"
```

## 必要な権限

スクリプト実行には、awsconfigureまたはEC2のIAMロールのいずれかを使用して設定できるIAMパーミッションがすべてのリソースに対して必要。

> autoscaling:DescribeAutoScalingGroups
datapipeline:GetPipelineDefinition
datapipeline:ListPipelines
ec2:DescribeAccountAttributes
ec2:DescribeAddresses
ec2:DescribeInstances
ec2:DescribeRegions
ec2:DescribeSecurityGroups
ec2:DescribeVpcClassicLink
elasticbeanstalk:DescribeConfigurationSettings
elasticbeanstalk:DescribeEnvironments
elasticache:DescribeCacheClusters
elasticloadbalancing:DescribeLoadBalancers
elasticmapreduce:DescribeCluster
elasticmapreduce:ListBootstrapActions
elasticmapreduce:ListClusters
elasticmapreduce:ListInstanceGroups
rds:DescribeDBInstances
redshift:DescribeClusters
opsworks:DescribeStacks

ElasticBeanstalkを利用している場合、EC2-Classicでリソースを起動するように設定された環境とアプリケーションを識別するには、次の追加の権限が必要。

> autoscaling:DescribeAutoScalingInstances
autoscaling:DescribeLaunchConfigurations
autoscaling:DescribeScheduledActions
cloudformation:DescribeStackResource
cloudformation:DescribeStackResources
ec2:DescribeImages
ec2:DescribeSubnets
ec2:DescribeVpcs
ec2:CreateLaunchTemplate
ec2:CreateLaunchTemplateVersion
rds:DescribeDBEngineVersions
rds:DescribeOrderableDBInstanceOptions
s3:ListAllMyBuckets