WindowsServer の EC2 に CodeDeploy のエージェントを入れようとしたときのメモ
参考
前提
- AWS 上に EC2 構築済み(WindowsServer2016)
- IAM ユーザー作成済み(アクセスキーとシークレットアクセスキー)
方法 ① PowerShell で手動インストール
起動した WindowsServer に RDP で接続し PowerShell を使用してインストールする
EC2 に RDP で接続して PowerShell を起動して以下を実行する。
## PowerShellの実行ポリシーを変更
PS C:\Users\Administrator> Set-ExecutionPolicy RemoteSigned
## AWSForPowershellのインストール
PS C:\Users\Administrator> Import-Module AWSPowerShell
## エージェントの実行ファイルの置き場所用の/tempディレクトリの作成
PS C:\Users\Administrator> New-item -Path c:\temp -ItemType directory -Force
## AWSの認証情報を登録
PS C:\Users\Administrator> Set-AWSCredential -AccessKey xxxxxxxxxxx -SecretKey xxxxxxxxxxxxxxxx -StoreAs s_maeno
## AWSが持ってるS3バケットからCodeDeployAgentをインストール。バケット名からリージョンの指定ができる。
PS C:\Users\Administrator> Read-S3Object -BucketName aws-codedeploy-ap-northeast-1 -Key latest/codedeploy-agent.msi -File c:\temp\codedeploy-agent.msi
## インストールされたMSIファイルを実行する
PS C:\Users\Administrator> c:\temp\codedeploy-agent.msi /quiet /l c:\temp\host-agent-install-log.txt
## サービスが実行されているかどうか確認する
PS C:\Users\Administrator> powershell.exe -Command Get-Service -Name codedeployagent
※S3 のアクセス権限を付与した IAM ロールを EC2 に付与しておくと、AWS 認証情報の手順はスキップできます(IAM ユーザーの作成不要)
方法 ➁ EC2 のユーザーデータを使用して起動時に自動インストール
- 起動時に S3 への権限を付与した IAM ロールを作成し EC2 に付与しておく
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:Get*",
"s3:List*"
],
"Resource": "arn:aws:s3:::aws-codedeploy-ap-northeast-1/*"
}
]
}
- ユーザーデータを使用して EC2 インスタンス起動の際に自動でインストールされるように設定する 
<powershell>
Set-ExecutionPolicy RemoteSigned -Force
Import-Module AWSPowerShell
New-item -Path c:\tmp -ItemType directory -Force
powershell.exe -Command Read-S3Object -BucketName aws-codedeploy-ap-northeast-1 -Key latest/codedeploy-agent.msi -File c:\tmp\codedeploy-agent.msi
c:\tmp\codedeploy-agent.msi /quiet /l c:\tmp\host-agent-log.txt
</powershell>
■ ユーザーデータ使用の注意点
- 時刻同期を UTC に設定しないと STS の権限エラーが起きる場合があるようです。
Read-S3Object : The retrieved credentials have already expired: Now = 04/11/2022 20:37:24, Credentials expiration = 04/11/2022 17:53:35
- Sysprep でのシャットダウンを実行したインスタンスの AMI でないとユーザデータが実行されない
方法 ③ AWS Systems Manager を使ってインストール(AWS が推奨)
AWS Systems Manager (旧称 SSM) は、AWS でインフラストラクチャを表示および制御するために使用できる AWS のサービスです。Systems Manager コンソールを使用すると、複数の AWS サービスからの運用データを表示させ AWS リソース全体の運用タスクを自動化できます。
AWS の複数のサービスの管理や制御が行えるサービスみたいです。 SSM の一部の機能を使えば、CodeDeployAgent や CloudWatchAgent をコンソールからインストールできます。
■ 手順 以下のように、対象の EC2 インスタンスをマネージドインスタンスに登録する必要があります。
-
SSM エージェントが EC2 にインストールされ起動していること
- 2016 年 11 月以降に公開された Windows Server 2008-2012 R2 AMIs、Windows Server 2016 および 2019 にはプレインストールされています
-
AmazonSSMManagedInstanceCore のポリシーを含む IAM ロールが EC2 に付与されていること