[JAWS-UG CLI] Amazon EC2 Systems Manager 入門 (5) パラメータストア

# この記事について

[JAWS-UG CLI専門支部 #81 Amazon EC2 Systems Manager 入門](https://jawsug-cli.doorkeeper.jp/events/57576)で実施するハンズオン用の手順書です。


# 前提条件

## 必要な権限

作業にあたっては、以下の権限を有したIAMユーザもしくはIAMロールを利用してください。

- EC2 Systems Manager(ssm)のフルコントロール権限
- EC2のフルコントロール権限
- CloudFormationの関するフルコントロール権限
- IAMの関するフルコントロール権限
- S3の関するフルコントロール権限
- SNSの関するフルコントロール権限


# 0. 準備

## 0.1. リージョンを指定

ハンズオンでは東京リージョンを利用しますが、必要に応じて他のリージョンに変更してご利用ください。（東京リージョンを他の検証目的で利用している、など）

```bash:コマンド
export AWS_DEFAULT_REGION="ap-northeast-1"
```

## 0.2. 資格情報を確認

```bash:コマンド
aws configure list
```

インスタンスプロファイルを設定したEC2インスタンスでアクセスキーを設定せずに実行した場合、以下のようになります。

```text:結果
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************QSAA         iam-role
secret_key     ****************c1xY         iam-role
    region                us-west-2              env    AWS_DEFAULT_REGION
```

## 0.3. バージョン確認

```bash:コマンド
aws --version
```

```text:結果
（可能な限り最新版を利用しましょう）
```

## 0.4. バージョンアップ（必要に応じて）

```bash:コマンド
sudo pip install -U awscli
```


# 1. パラメータの設定

## 1.1. 文字列の設定

### パラメータ名の指定

```bash:コマンド
PARAMETER_NAME="test-string"
PARAMETER_DESCRIPTION="JAWS-UG CLI Branch EC2 Systems Manager"
```

### パラメータ名の指定

```bash:コマンド
PARAMETER_VALUE="test"
```

### パラメータタイプの指定

```bash:コマンド
PARAMETER_TYPE="String"
```

### 同名パラメータの不存在を確認

```bash:コマンド
aws ssm describe-parameters \
    --filters Key="Name",Values="${PARAMETER_NAME}"
```

```json:結果
{
    "Parameters": []
}
```

### パラメータの確認

```bash:コマンド
cat << ETX

    PARAMETER_NAME: ${PARAMETER_NAME}
    PARAMETER_DESCRIPTION: ${PARAMETER_DESCRIPTION}
    PARAMETER_VALUE: ${PARAMETER_VALUE}
    PARAMETER_TYPE: ${PARAMETER_TYPE}

ETX
```

```text:結果

    PARAMETER_NAME: test-string
    PARAMETER_DESCRIPTION: JAWS-UG CLI Branch EC2 Systems Manager
    PARAMETER_VALUE: test
    PARAMETER_TYPE: String

```

### パラメータの設定

```bash:コマンド
aws ssm put-parameter \
    --name ${PARAMETER_NAME} \
    --description "${PARAMETER_DESCRIPTION}" \
    --value ${PARAMETER_VALUE} \
    --type ${PARAMETER_TYPE} \
    --no-overwrite
```

### パラメータの存在を確認

```bash:コマンド
aws ssm describe-parameters \
    --filters Key="Name",Values="${PARAMETER_NAME}"
```

```json:結果
{
    "Parameters": [
        {
            "LastModifiedUser": "arn:aws:sts::************:assumed-role/CLI/i-*****************",
            "LastModifiedDate": 1490529282.442,
            "Type": "String",
            "Name": "test-string",
            "Description": "JAWS-UG CLI Branch EC2 Systems Manager"
        }
    ]
}
```

## 1.2. 文字列のリストの設定

### パラメータ名の指定

```bash:コマンド
PARAMETER_NAME="test-list"
PARAMETER_DESCRIPTION="JAWS-UG CLI Branch EC2 Systems Manager"
```

### パラメータ名の指定

```bash:コマンド
PARAMETER_VALUE="test1,test2,test3,test4,test5,test6"
```

### パラメータタイプの指定

```bash:コマンド
PARAMETER_TYPE="StringList"
```

### 同名パラメータの不存在を確認

```bash:コマンド
aws ssm describe-parameters \
    --filters Key="Name",Values="${PARAMETER_NAME}"
```

```json:結果
{
    "Parameters": []
}
```

### パラメータの確認

```bash:コマンド
cat << ETX

    PARAMETER_NAME: ${PARAMETER_NAME}
    PARAMETER_DESCRIPTION: ${PARAMETER_DESCRIPTION}
    PARAMETER_VALUE: ${PARAMETER_VALUE}
    PARAMETER_TYPE: ${PARAMETER_TYPE}

ETX
```

```text:結果

    PARAMETER_NAME: test-list
    PARAMETER_DESCRIPTION: JAWS-UG CLI Branch EC2 Systems Manager
    PARAMETER_VALUE: test1,test2,test3,test4,test5,test6
    PARAMETER_TYPE: StringList

```

### パラメータの設定

```bash:コマンド
aws ssm put-parameter \
    --name ${PARAMETER_NAME} \
    --description "${PARAMETER_DESCRIPTION}" \
    --value ${PARAMETER_VALUE} \
    --type ${PARAMETER_TYPE} \
    --no-overwrite
```

### パラメータの存在を確認

```bash:コマンド
aws ssm describe-parameters \
    --filters Key="Name",Values="${PARAMETER_NAME}"
```

```json:結果
{
    "Parameters": [
        {
            "LastModifiedUser": "arn:aws:sts::************:assumed-role/CLI/i-*****************",
            "LastModifiedDate": 1490529738.402,
            "Type": "StringList",
            "Name": "test-list",
            "Description": "JAWS-UG CLI Branch EC2 Systems Manager"
        }
    ]
}
```


## 1.3. 暗号化された文字列の設定

### パラメータ名の指定

```bash:コマンド
PARAMETER_NAME="test-securestring"
PARAMETER_DESCRIPTION="JAWS-UG CLI Branch EC2 Systems Manager"
```

### パラメータ名の指定

```bash:コマンド
PARAMETER_VALUE="test1"
```

### パラメータタイプの指定

```bash:コマンド
PARAMETER_TYPE="SecureString"
```

### 同名パラメータの不存在を確認

```bash:コマンド
aws ssm describe-parameters \
    --filters Key="Name",Values="${PARAMETER_NAME}"
```

```json:結果
{
    "Parameters": []
}
```

### パラメータの確認

```bash:コマンド
cat << ETX

    PARAMETER_NAME: ${PARAMETER_NAME}
    PARAMETER_DESCRIPTION: ${PARAMETER_DESCRIPTION}
    PARAMETER_VALUE: ${PARAMETER_VALUE}
    PARAMETER_TYPE: ${PARAMETER_TYPE}

ETX
```

```text:結果

    PARAMETER_NAME: test-securestring
    PARAMETER_DESCRIPTION: JAWS-UG CLI Branch EC2 Systems Manager
    PARAMETER_VALUE: test1
    PARAMETER_TYPE: SecureString

```

### パラメータの設定

```bash:コマンド
aws ssm put-parameter \
    --name ${PARAMETER_NAME} \
    --description "${PARAMETER_DESCRIPTION}" \
    --value ${PARAMETER_VALUE} \
    --type ${PARAMETER_TYPE} \
    --no-overwrite
```

### パラメータの存在を確認

```bash:コマンド
aws ssm describe-parameters \
    --filters Key="Name",Values="${PARAMETER_NAME}"
```

```json:結果
{
    "Parameters": [
        {
            "KeyId": "alias/aws/ssm",
            "Name": "test-securestring",
            "LastModifiedDate": 1490529907.779,
            "LastModifiedUser": "arn:aws:sts::************:assumed-role/CLI/i-*****************",
            "Type": "SecureString",
            "Description": "JAWS-UG CLI Branch EC2 Systems Manager"
        }
    ]
}
```


# 2. パラメータの取得

## 2.1. 文字列の取得

### 変更履歴の確認

バージョンが1つしか無いため、何も表示されません

```bash:コマンド
PARAMETER_NAME="test-string"
```

```bash:コマンド
aws ssm get-parameter-history \
    --name ${PARAMETER_NAME}
```

```json:結果
{
    "Parameters": []
}
```

### 値の取得

```bash:コマンド
aws ssm get-parameters \
    --names ${PARAMETER_NAME}
```

```json:結果
{
    "InvalidParameters": [],
    "Parameters": [
        {
            "Type": "String",
            "Name": "test-string",
            "Value": "test"
        }
    ]
}
```

## 2.2. 文字列リストの取得

### 変更履歴の確認

バージョンが1つしか無いため、何も表示されません

```bash:コマンド
PARAMETER_NAME="test-list"
```

```bash:コマンド
aws ssm get-parameter-history \
    --name ${PARAMETER_NAME}
```

```json:結果
{
    "Parameters": []
}
```

### 値の取得

```bash:コマンド
aws ssm get-parameters \
    --names ${PARAMETER_NAME}
```

```json:結果
{
    "InvalidParameters": [],
    "Parameters": [
        {
            "Type": "StringList",
            "Name": "test-stringlist",
            "Value": "test1,test2,test3,test4,test5,test6"
        }
    ]
}
```


## 2.3. 暗号化された文字列の取得

### 変更履歴の確認

バージョンが1つしか無いため、何も表示されません

```bash:コマンド
PARAMETER_NAME="test-securestring"
```

```bash:コマンド
aws ssm get-parameter-history \
    --name ${PARAMETER_NAME}
```

```json:結果
{
    "Parameters": []
}
```

### 値の取得（復号化オプションなし）

```bash:コマンド
aws ssm get-parameters \
    --names ${PARAMETER_NAME}
```

```json:結果
{
    "InvalidParameters": [],
    "Parameters": [
        {
            "Type": "SecureString",
            "Name": "test-securestring",
            "Value": "AQECAHiUI/G7eV8mb0bhaItPG0LdDL5TjSku7AShFDfQANtscgAAAGMwYQYJKoZIhvcNAQcGoFQwUgIBADBNBgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDIUxgYaIGOJ3D3gMBgIBEIAgq2xO6QEAGlDcjdXamiINWyr+P8Gld1wiBw4q9lKRv3k="
        }
    ]
}
```

### 値の取得（復号化オプションあり）

```bash:コマンド
aws ssm get-parameters \
    --names ${PARAMETER_NAME} \
    --with-decryption
```

```json:結果
{
    "InvalidParameters": [],
    "Parameters": [
        {
            "Type": "SecureString",
            "Name": "test-securestring",
            "Value": "test1"
        }
    ]
}
```

# 3. パラメータの削除


## 3.1. パラメータの削除（文字列）

### パラメータ名の指定

```bash:コマンド
PARAMETER_NAME="test-string"
```

### パラメータの削除

```bash:コマンド
aws ssm delete-parameter \
    --name ${PARAMETER_NAME}
```

### パラメータの削除を確認

```bash:コマンド
aws ssm describe-parameters \
    --filters Key="Name",Values="${PARAMETER_NAME}"
```

```json:結果
{
    "Parameters": []
}
```


## 3.2. パラメータの削除（文字列リスト）

### パラメータ名の指定

```bash:コマンド
PARAMETER_NAME="test-list"
```

### パラメータの削除

```bash:コマンド
aws ssm delete-parameter \
    --name ${PARAMETER_NAME}
```

### パラメータの削除を確認

```bash:コマンド
aws ssm describe-parameters \
    --filters Key="Name",Values="${PARAMETER_NAME}"
```

```json:結果
{
    "Parameters": []
}
```


## 3.3. パラメータの削除（暗号化された文字列）

### パラメータ名の指定

```bash:コマンド
PARAMETER_NAME="test-securestring"
```

### パラメータの削除

```bash:コマンド
aws ssm delete-parameter \
    --name ${PARAMETER_NAME}
```

### パラメータの削除を確認

```bash:コマンド
aws ssm describe-parameters \
    --filters Key="Name",Values="${PARAMETER_NAME}"
```

```json:結果
{
    "Parameters": []
}
```

以上